計算機側で「TurboVNC」を使っているので、windows/macで使うvncクライアントも「TurboVNC」を使います
別のvncクライアントでも表示は出来ますが、動作が重くなりました。「TurboVNC」なら「TurboVNC」なのでしょう.
■二手先の接続例
gateにログインして「ssh -L 0.0.0.0:5901:10.10.10.2:5901 saber@localhost」を実行します。これで「gate -- HostB」のトンネルが作られます。
その後、gateからHostBに移って「/opt/TurboVNC/bin/vncserver -vgl」して vncサーバを立てます。 ここでslurmならインターラクティヴジョブでGPUを確保しながらHostBに移って「/opt/TurboVNC/bin/vncserver -vgl」を起動させます
この状態でclientにて vncクライアントを起動させ、「gate:5901」にアクセスするとclientでHostBの画面が表示されます。
■三歩先への接続例.
トンネルを作って、HostBに移って「/opt/TurboVNC/bin/vncserver -vgl」を実行してvncサーバを起動します
その後に、clientにて vnc クライアントで「HostA:5901」宛にアクセスします。
これでHostBの画面が、clientのvncクライアントに表示されます
例えば空く数枚のGPUを持つ計算機で、2枚目のGPUでvnc描画させて、3枚目のGPUには特手のアプリの描画を専門で行わせるってできるみたい.
TurboVNCの vncserver にて vnc の待ち受けを作る際に
VGL_DISPLAY=:0.1 /opt/TurboVNC/bin/vncserver -vgl :1
とすると、計算機の2番目のGPUが vnc全体の描画に使われます
VGL_DISPLAY=:0.0 /opt/TurboVNC/bin/vncserver -vgl :1
VGL_DISPLAYが「0.0」なら1枚目. 「0.1」なら2枚目って感じです。
引数の「-vgl :1」 の「:1」は接続用port番号で5900にこの数字を足した数がvncの接続ポートになります
[root@rockylinux ~]# nvidia-smi -L
GPU 0: NVIDIA T600 (UUID: GPU-01226552-df75-5989-c2f3-3550cdc3427d)
GPU 1: NVIDIA RTX A2000 (UUID: GPU-23cc3ee7-31d3-a068-2f61-5aa00052d084)
[root@rockylinux ~]#
GPU 0: NVIDIA T600
GPU 1: NVIDIA RTX A2000
があって、「VGL_DISPLAY=:0.0 /opt/TurboVNC/bin/vncserver -vgl :1」なら
[saber@rockylinux ~]$ glxinfo|grep -i opengl
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA T600/PCIe/SSE2
:
となって、「VGL_DISPLAY=:0.1 /opt/TurboVNC/bin/vncserver -vgl :1」なら
[saber@rockylinux ~]$ glxinfo|grep -i opengl
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA RTX A2000/PCIe/SSE2
:
とglxinfoの返すデバイスが変わります.
次にGUIアプリの個別GPU割り当てですが、VirtualGLの vglrun を使います
vncviewerではなく、mobaXterm経由で行います. vncviewerでは vglrun が機能しないみたい.
/opt/VirtualGL/bin/vglrun -d :0.0 <GUIアプリ>
「-d :0.0」はvnc描画しているデバイスが使われます。vncserverでの「VGL_DISPLAY=:0.x」に寄ります.
「VGL_DISPLAY=:0.0 /opt/TurboVNC/bin/vncserver -vgl :1」として、「/opt/VirtualGL/bin/vglrun -d :0.0 <GUIアプリ>」なら T600 が選ばれます
また
「VGL_DISPLAY=:0.0 /opt/TurboVNC/bin/vncserver -vgl :1」として、「/opt/VirtualGL/bin/vglrun -d :0.1 <GUIアプリ>」なら A2000 が選ばれます
っでベンチの結果ですが、左が T600、右がA2000の結果です
slurmで2つのGPUを確保したインターラクティヴジョブを作り、片方は vnc と アプリ描画、もう一つは計算に使うとかできそう