Skip to content

Instantly share code, notes, and snippets.

@zzilch
Last active October 21, 2023 09:03
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zzilch/33843124341712408e3f2d82c524b67c to your computer and use it in GitHub Desktop.
Save zzilch/33843124341712408e3f2d82c524b67c to your computer and use it in GitHub Desktop.
headless-nvidia

Headless Rendering

1. 使用 X11-Forwarding + VirtualGL 转发图形界面

Virtual GL 介绍:当我们使用 ssh X11 forward 时,本地需要安装 X Server 如 Window 的 XMing(MobaXterm自带),服务器作为 X Client 发送渲染指令到本地的 X Server,本地 X Server 调用本地的 OpenGL 库渲染图像。该方法使用的是本地 GPU,并且仅有限支持 opengl,当运行图形功能较为复杂的软件时效率较低。 Virual GL 则能作为一个代理使用服务器的 OpenGL 在服务器端进行渲染,然后将渲染结果转发到本地 X Server。安装 Virtual GL 后运行 vglserver_config 配置 Virtual GL 代理,然后在 ssh -X 的环境下使用 vglrun xxx 进行服务端渲染。 但如果要运行图形软件,Virtual GL需要将每帧传输到比本地,需要较好的网络环境。

2. 使用 GPU 加速的 Headless Rendering 建立虚拟桌面环境

  1. 安装lightdm和mate-desktop

这一步的目的是安装一个和N卡驱动的OpenGL库不冲突的桌面管理器和桌面环境 推荐使用Mate(在Ubuntu 20.04/18.04/16.04均通过测试)

  1. (可选)卸载gdm3和gnome(ubuntu-desktop), 不卸载也可以通过sudo dpkg-reconfig lightdm 将lightdm作为默认桌面管理器,并在登陆时手动选择mate作为桌面环境

这一步的目的是卸载和N卡驱动的OpenGL冲突的桌面管理器和桌面环境 Ubuntu下的GDM3和GNome确定会产生冲突,因此安装其他桌面环境后删除

  1. 安装N卡驱动 sudo apt install nvidia-driver-{verison like 440}

如果没有该驱动包请先添加nvidia-cuda源,见wiki的服务器教程

  1. (多卡)查询显卡busid: nvidia-xconfig --query-gpu-info

选择一张显卡作为图形卡,选择后尽量不要用该卡使用cuda

  1. 设置headless虚拟屏幕 sudo nvidia-xconfig -a --allow-empty-initial-configuration --use-display-device=None --virtual=1920x1080 --busid {busid}

这一步为图形卡配置一个虚拟显示器,并设置虚拟显示器的分辨率

至此headless环境配置完毕,重启后控制端口会显示lightdm登录界面。但不要在控制端登录,因为此时的桌面环境会显示在虚拟显示器中,控制端登录完会黑屏不显示任何内容。需要通过nx协议或vnc协议进行屏幕共享来显示虚拟显示器的图像内容。

  • 【推荐】NX协议:在本地和服务器安装nomachine,默认使用用户名和密码登录,可以改为密钥登录。
  • VNC协议:分别在本地安装vnc的客户端和服务端,并设置用户的vnc的连接密码。Ubuntu 18.04以上选用tigervnc,16.04选用tightvnc。各个版本都可以选用turbovnc,但需要手动下载二进制安装包进行安装。

下面给出两种种连接远程的方式。

  1. 【推荐】服务器和本机同时安装nomachine,将连接到虚拟显示器:0,此时通过nomachine的远程桌面登录即可以看到桌面。通过将x0vncserver或x11vnc添加为自启动项的可以将显示器:0的内容通过vnc分享到端口5900。
  2. 服务器安装该发行版推荐的vncserver (1) 用vncpasswd设置密码 (2) 配置~/.vnc/startup设置启动安装好的桌面如mate-session(turbovnc安装后自动配置到了starup.turbovnc) (3) 设置用户croncab开机自动启动vncserver :0 通过vnc客户端(如tigervnc-viewer,mobaxterm) 和vnc密码连接5900端口(或通过ssh转发),直接连接到远程桌面的显示器:0。此时若使用nomachine将看到两个虚拟显示器user :0以及lightdm :1,也可以通过nomachine连接虚拟显示器:0,但虚拟显示器:1无法使用,可以通过禁用dm避免第二个显示器的出现。

3. Mate 桌面环境简介

  • mate-session: 登录后启动的桌面会话,可以通过 ps aux | grep mate-session 查找已经运行的会话
  • mate-panel --reset:如果登录后桌面布局有缺失或其他问题可以用该命令重置
  • mate-tweak: Mate桌面环境布局设置,直接运行该命令会启动图形配置界面,推荐使用下面三种 Layout
    • Cupertino:类苹果布局
    • Redmond:类Windows布局
    • Mutiny:类Ubuntu Unity布局

参考链接: https://virtualgl.org/Documentation/HeadlessNV https://github.com/plumbee/nvidia-hw-accelerated-box

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment