What is TurboVNC?
From TurboVNC | About / A Brief Introduction to TurboVNC :
TurboVNC is a derivative of VNC (Virtual Network Computing) that is tuned to provide peak performance for 3D and video workloads.
Getting started
Installing the client
Download and install the client matching your client operating system
TurboVNC - Browse Files on Github
If you want to add the yum repo on your RHEL:
TurboVNC | Downloads / TurboVNC YUM Repository
Defining a session
On the client, connect to mimi.uio.no using ssh.
Tip: To make ssh connections easier, you can set yourself up with ssh keys.
ssh username@mimi.uio.no
Load the TurboVNC module and start a vnc session and note the display port number:
$ module load TurboVNC/3.0.1-GCCcore-11.3.0 $ vncserver Desktop 'TurboVNC: mimi.uio.no:2 (kjetba)' started on display mimi.uio.no:2
The vncserver session are now running and you can log out. It has been assigned with display port number 2, this corresponds with the port number 5902 to connect to the server. (Display port 3 -> port number 5903, display port 4 -> port number 5904, etc..)
$ vncserver -list TurboVNC sessions: X DISPLAY # PROCESS ID NOVNC PROCESS ID :2 287018 $ /opt/TurboVNC/bin/vncserver -kill :2
Open a ssh tunnel to the server
Now, to encrypt the connection we need to set up a ssh tunnel from your client to the server:
ssh -L 6000:localhost:5902 username@mimi.uio.no
This ssh connected has to be open while you are connected with vnc. You can terminate your ssh tunnel at any time and stil reconnect at a later time as long as the vnc session is running.
Connect with the TurboVNC client
Connect to localhost:6000
Enjoy your GNOME Desktop experience.
Do you want to use the NVIDIA GPU for 3D graphics?
Normally OpenGL will use Mesa for rendering:
[kjetba@mimi ~]$ glxinfo -B name of display: :7 display: :7 screen: 0 direct rendering: Yes Extended renderer info (GLX_MESA_query_renderer): Vendor: Mesa/X.org (0xffffffff) Device: llvmpipe (LLVM 14.0.3, 256 bits) (0xffffffff) Version: 22.0.3 Accelerated: no Video memory: 1031088MB Unified memory: no Preferred profile: core (0x1) Max core profile version: 4.5 Max compat profile version: 4.5 Max GLES1 profile version: 1.1 Max GLES[23] profile version: 3.2 OpenGL vendor string: Mesa/X.org OpenGL renderer string: llvmpipe (LLVM 14.0.3, 256 bits) OpenGL core profile version string: 4.5 (Core Profile) Mesa 22.0.3 OpenGL core profile shading language version string: 4.50 OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL version string: 4.5 (Compatibility Profile) Mesa 22.0.3 OpenGL shading language version string: 4.50 OpenGL context flags: (none) OpenGL profile mask: compatibility profile OpenGL ES profile version string: OpenGL ES 3.2 Mesa 22.0.3 OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
To change this to NVIDIA, open a terminal and define these two variables:
export __NV_PRIME_RENDER_OFFLOAD=1 export __GLX_VENDOR_LIBRARY_NAME=nvidia
The first variable will tell the system to offload the rendering to the discrete card, the second variable will force applications to use the NVIDIA's GLX stuff.
Now we see NVIDIA being the preferred vendor:
[kjetba@mimi ~]$ glxinfo -B name of display: :7 display: :7 screen: 0 direct rendering: Yes Memory info (GL_NVX_gpu_memory_info): Dedicated video memory: 23040 MB Total available memory: 23040 MB Currently available dedicated video memory: 22508 MB OpenGL vendor string: NVIDIA Corporation OpenGL renderer string: Quadro RTX 6000/PCIe/SSE2 OpenGL core profile version string: 4.6.0 NVIDIA 530.30.02 OpenGL core profile shading language version string: 4.60 NVIDIA OpenGL core profile context flags: (none) OpenGL core profile profile mask: core profile OpenGL version string: 4.6.0 NVIDIA 530.30.02 OpenGL shading language version string: 4.60 NVIDIA OpenGL context flags: (none) OpenGL profile mask: (none) OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 530.30.02 OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
Now start your 3D application in the same terminal session
[kjetba@mimi ~]$ module load ParaView/5.11.1-foss-2022a-mpi [kjetba@mimi ~]$ paraview
In nvtop you now can see the process running graphics
[kjetba@mimi ~]$ nvtop Device 0 [Quadro RTX 6000] PCIe GEN 3@16x RX: 0.000 KiB/s TX: 0.000 KiB/s GPU 1275MHz MEM 6500MHz TEMP 37°C FAN N/A% POW 56 / 250 W GPU[ 0%] MEM[| 0.614Gi/22.500Gi] ┌────────────────────────────────────────────────────────────────────────────────────────────┐ 100│GPU0 % │ │GPU0 mem% │ │ │ │ │ │ │ 75│ │ │ │ │ │ │ │ │ │ 50│ │ │ │ │ │ │ │ │ │ 25│ │ │ │ │ ┌───┐ ┌─────┐ ┌─┐ │ │ │ └─┘ └───────────────┘ └───────┐ │ │ │ │ │ 0│──────────────────────────────────────────────┴─────────────────────────────────────┴───────│ └46s───────────────────34s────────────────────23s────────────────────11s───────────────────0s┘ PID USER DEV TYPE GPU GPU MEM CPU HOST MEM Command 3726478 kjetba 0 Compute 0% 162MiB 1% 0% 184MiB python 3042994 kjetba 0 Graphic 0% 99MiB 0% 0% 524MiB /opt/software/custom/software/Open