跳到主要内容
版本:FCP 25.11

使用GPU加速图形化应用

本手册详细介绍如何在远程桌面(VNC)或本地图形化环境中为应用程序启用GPU硬件加速,提升图形渲染性能。适用于3D设计、科学可视化、视频处理、CAD/CAM等需要高性能图形处理的应用场景。

技术架构

VirtualGL通过两种技术路径实现GPU加速:

技术路径优势劣势适用场景
GLX后端加速兼容性好,支持大部分3D应用配置复杂,系统开销较大传统3D应用、兼容性要求高的环境
EGL后端加速配置简单,系统开销小,性能更优对老旧3D应用兼容性有限现代应用、容器化环境、云平台

前提条件

  • 已安装相应的 GPU 驱动程序

方式一:GLX后端加速渲染

配置X Server

NVIDIA GPU配置步骤

  1. 生成Xorg配置

    sudo nvidia-xconfig --enable-all-gpus --separate-x-screens
  2. 查询GPU BusID

    lspci | grep NVIDIA
    # 输出示例:00:07.0 3D controller: NVIDIA Corporation GP104GL [Tesla P4]
  3. 编辑Xorg配置

    sudo vi /etc/X11/xorg.conf

    在对应的Device段添加BusID:

    Section "Device"
    Identifier "Device0"
    Driver "nvidia"
    BusID "PCI:0:7:0" # 根据实际BusID修改
    EndSection
  4. 重启系统

    sudo reboot

安装显示管理器

显示管理器支持多种,例如 GDM、KDM 或 LightDM,以下以Ubuntu18.04安装LightDM为例:

Ubuntu/Debian系统(LightDM)

# 安装LightDM
sudo apt update
sudo apt install lightdm

# 设置为默认显示管理器
sudo dpkg-reconfigure lightdm

# 或使用命令设置
sudo systemctl enable lightdm

# 重启显示服务
sudo systemctl restart lightdm

配置VirtualGL服务器

执行配置脚本

sudo /opt/VirtualGL/bin/vglserver_config

配置选项说明

请选择配置选项:
1) Configure server for use with VirtualGL (GLX + EGL back ends)
2) Configure server for use with VirtualGL (EGL back end only)
X) Exit

选择 1 (GLX + EGL)

限制 3D X 服务器访问权限,仅限 vglusers 用户组?
[Y/n] n
# 选择n:所有用户可访问;选择Y:仅vglusers组成员可访问

限制帧缓冲区设备访问权限,仅限 vglusers 组?
[Y/n] n

禁用 XTEST 扩展?
[Y/n] n # 必须选择n,否则影响远程桌面操作

重启显示服务

sudo systemctl restart lightdm  # 或gdm
# 或重启系统
sudo reboot

验证配置

检查X Server配置

# 检查显示配置
xdpyinfo -display :0

# 检查OpenGL配置
/opt/VirtualGL/bin/glxinfo -display :0 -c

预期输出

  • 应显示可用的视觉特效列表
  • 无错误信息输出
  • 确认GPU被正确识别

运行3D应用

通过VNC连接后执行

# 基本用法
vglrun ./my_3d_app

# 显式指定显示设备(可选)
vglrun -d :0 ./my_3d_app

VNC会话示例

# 连接VNC后在新终端中运行
vglrun glxgears # 测试应用

方式二:EGL后端加速渲染

EGL优势与限制

优势

  • 更低的系统开销
  • 更好的性能表现
  • 配置更简单

限制

  • 需要应用支持EGL,部分老旧应用可能不兼容

配置EGL后端

执行配置脚本

sudo /opt/VirtualGL/bin/vglserver_config

配置选项

选择选项 2 (Configure server for use with VirtualGL (EGL back end only))

限制帧缓冲区设备访问权限,仅限 vglusers 组?
[Y/n] n # 选择n允许所有用户访问

验证EGL配置

# 检查EGL支持
/opt/VirtualGL/bin/eglinfo egl0

# 预期输出:显示EGL配置列表,无错误信息

运行3D应用(EGL模式)

环境变量方式

# 方法1:使用环境变量
export VGL_DISPLAY=egl
vglrun ./my_3d_app

# 方法2:单命令设置
VGL_DISPLAY=egl vglrun ./my_3d_app

命令行参数方式

# 使用-d参数指定EGL设备
vglrun -d egl0 ./my_3d_app

多GPU环境配置(待验证)

GPU识别与选择

查看可用GPU

# NVIDIA
nvidia-smi -L

# AMD
rocm-smi --showproductname

# 通用方法
lspci | grep -E "(VGA|3D)"

GLX后端多GPU配置

不同X Server配置

# 启动额外X Server,需要确保端口不能和vnc session冲突
Xorg :10 -ac -br -noreset -sharevts -logfile /var/log/Xorg.10.log -config /etc/X11/xorg.conf.gpu1

# 使用特定GPU
vglrun -d :10 ./app

EGL后端多GPU配置

使用设备路径

# 通过DRI设备路径选择
VGL_DISPLAY=egl vglrun -d /dev/dri/card0 ./app
VGL_DISPLAY=egl vglrun -d /dev/dri/card1 ./app

使用EGL设备ID

# 通过EGL设备ID选择
vglrun -d egl0 ./app # GPU0
vglrun -d egl1 ./app # GPU1
vglrun -d egl2 ./app # GPU2

常见问题

Q:一张GPU卡能同时被多个用户/进程使用吗?

A: 可以。支持通过软件共享资源,也可通过GPU虚拟化(如MIG)进行硬件级别的拆分与隔离。建议根据任务需求和隔离性要求选择合适的方式。

Q:如何避免多用户/多进程任务集中调用某几张GPU(如 gpu0-10)?

A:在FCP场景中一般是用户与登录节点绑定的方式实现GPU资源隔离。在集群规划中,已经将不同的登录节点及其GPU分配给不同的用户或小组专用,该绑定关系由系统管理员统一配置和维护。