在 Red Hat Virtualization 中为虚拟机设置 NVIDIA GPU


Red Hat Virtualization 4.3

如何在 Red Hat Virtualization 中配置虚拟机以使用专用的 GPU 或 vGPU。

摘要

本文档论述了如何使用带有图形处理单元(GPU)的主机,在 Red Hat Virtualization 中针对不需要 GPU 的数据密集型任务和软件运行。

前言

您可以使用带有兼容图形处理单元(GPU)的主机,在 Red Hat Virtualization 中运行适合图形密集型任务的虚拟机以及运行在没有 GPU(如 CAD)运行的软件。

您可以使用以下方法之一为虚拟机分配 GPU:

  • GPU passthrough :您可以将主机 GPU 分配给单个虚拟机,因此是虚拟机而不是主机在使用 GPU。
  • 虚拟 GPU(vGPU) :您可以将物理 GPU 设备划分为一个或多个虚拟设备,称为 介质设备。然后,您可以将这些介质设备分配给一个或多个虚拟机作为虚拟 GPU。这些虚拟机可以共享单个物理 GPU 的性能。对于某些 GPU,单个虚拟机只能分配一个介质设备。vGPU 支持只在选择的 NVIDIA GPU 上可用。

    例如:

    主机有四个 GPU。每个 GPU 最多支持 16 vGPU,共 64 个 vGPU。以下是一些可能的 vGPU 分配:

    • 一台带有 64 个 vGPU 的虚拟机
    • 64 台虚拟机,每个虚拟机均具有一个 vGPU
    • 32 个虚拟机,每个有一个 vGPU;8 个虚拟机,每个配备 2 个 vGPU;4 个虚拟机,每个具有 4 个 vGPU

Red Hat Virtualization 支持 PCI VFIO(也称为设备透传)作为非VGA 图形设备,适用于某些基于 NVIDIA PCIe 的 GPU 设备。

除了标准模拟图形界面之一外,您还可以通过主机 GPU 将一个或多个主机 GPU 附加到单个虚拟机。虚拟机使用仿真图形设备进行预引导和安装,并且 GPU 在加载其图形驱动程序时进行控制。

有关您可以传递给单个虚拟机的具体主机 GPU 数量的信息,请参阅 NVIDIA 网站。

要为虚拟机分配 GPU,请按照以下步骤执行:

这些步骤的详情如下。

先决条件

  • 您的 GPU 设备支持 GPU 透传模式。
  • 您的系统被列为是已经过验证的有效服务器硬件平台。
  • 您的主机芯片组支持 Intel VT-d 或 AMD-Vi

有关支持的硬件和软件的更多信息,请参阅 NVIDIA GPU 软件发行注记中的验证的平台

在主机上需要支持 I/O 内存管理单元(IOMMU)在虚拟机上使用 GPU。

流程

  1. 在管理门户中,点 ComputeHosts。选择主机,再点编辑。此时会显示 Edit Hosts 窗格。
  2. Kernel 选项卡。
  3. 选中 Hostdev Passthrough 和 SR-IOV 复选框。此复选框通过在内核命令行中添加 intel_iommu=onamd_iommu=on 来为带有 Intel VT-d 或 AMD Vi 的主机启用 IOMMU 支持。
  4. 选中 Blacklist Nouveau 复选框。
  5. 点击 确定
  6. 选择主机,再单击 ManagementMaintenance
  7. InstallationReinstall
  8. 重新安装完成后,重启主机机器。
  9. 主机计算机重新引导后,点 ManagementActivate

1.2. 从主机中分离 GPU

如果 GPU 绑定到主机内核驱动程序,则无法将 GPU 添加到虚拟机,因此您必须在主机中取消绑定 GPU 设备,然后才能将其添加到虚拟机。主机驱动程序通常不支持 GPU 的动态绑定,因此建议手动将设备从绑定到主机驱动程序中排除。

流程

  1. 在主机上,运行 lspci 命令识别该设备的设备插槽名称和 ID。在以下示例中,使用 NVIDIA Quadro 或 GRID 卡等图形控制器:

    # lspci -Dnn | grep -i NVIDIA
    0000:03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104GL [Quadro K4200] [10de:11b4] (rev a1)
    0000:03:00.1 Audio device [0403]: NVIDIA Corporation GK104 HDMI Audio Controller [10de:0e0a] (rev a1)
    Copy to Clipboard Toggle word wrap

    输出显示安装了 NVIDIA GK104 设备。它具有图形控制器和带有以下属性的音频控制器:

    • 图形控制器的设备插槽名称为 0000:03:00.0,而 graphics 控制器的 vendor-id:device-id 是 10de:11b4
    • 音频控制器的设备插槽名称为 0000:03:00.1,音频控制器的 vendor-id:device-id 是 10de:0e0a
  2. 防止主机机器驱动程序使用 GPU 设备。您可以将 vendor-id:device-id 与 pci-stub 驱动程序一起使用。要做到这一点,请将 pci-stub.ids 选项(值为 vendor-id:device-id)附加到位于 /etc/sysconfig/grub 配置文件中的 GRUB_CMDLINX_LINUX 环境变量,例如:

    GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/vg0-lv_swap rd.lvm.lv=vg0/lv_root rd.lvm.lv=vg0/lv_swap rhgb quiet intel_iommu=on pci-stub.ids=10de:11b4,10de:0e0a"
    Copy to Clipboard Toggle word wrap

    为 pci-stub 添加附加厂商 ID 和设备 ID 时,使用逗号分隔它们。

  3. 使用 grub2-mkconfig 重新生成引导装载程序配置使其包含这个选项,如下所示:

    # grub2-mkconfig -o /etc/grub2.cfg
    Copy to Clipboard Toggle word wrap
    注意

    在使用基于 UEFI 的主机时,目标文件应为 /etc/grub2-efi.cfg

  4. 重启主机机器。
  5. 确认启用了 IOMMU,主机设备被添加到 pci-stub.ids 列表中,并且 Nouveau 已放入黑名单:

    # cat /proc/cmdline
    BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-147.el8.x86_64 root=/dev/mapper/vg0-lv_root ro crashkernel=auto resume=/dev/mapper/vg0-lv_swap rd.lvm.lv=vg0/lv_root rd.lvm.lv=vg0/lv_swap rhgb quiet intel_iommu=on 
    1
    
    pci-stub.ids=10de:11b4,10de:0e0a 
    2
    
    rdblacklist=nouveau 
    3
    Copy to Clipboard Toggle word wrap
1
IOMMU 被启用
2
主机设备被添加到 pci-stub.ids 列表中
3
Nouveau 将列入黑名单

1.3. 将 GPU 附加到虚拟机

从主机内核驱动程序取消绑定 GPU 后,您可以将其添加到虚拟机并启用正确的驱动程序。

流程

  1. 按照虚拟机管理指南中的将主机设备添加到虚拟机中的步骤进行操作。
  2. 运行虚拟机并登录该虚拟机。
  3. 在虚拟机上安装 NVIDIA GPU 驱动程序。详情请查看 第 1.4 节 “在虚拟机上安装 GPU 驱动程序”
  4. 使用 lspci -nnk 命令,验证是否为 GPU 使用了正确的内核驱动程序。例如:

    # lspci -nnk
    00:07.0 VGA compatible controller [0300]: NVIDIA Corporation GK104GL [Quadro K4200] [10de:11b4] (rev a1)
    Subsystem: Hewlett-Packard Company Device [103c:1096]
    Kernel driver in use: nvidia
    Kernel modules: nouveau, nvidia_drm, nvidia
    Copy to Clipboard Toggle word wrap

1.4. 在虚拟机上安装 GPU 驱动程序

流程

  1. 运行虚拟机并使用串行控制台(如 SPICE 或 VNC)连接到该控制台。
  2. 将驱动程序下载到虚拟机。有关获取驱动程序的详情,请查看 NVIDIA 网站上的驱动程序页面
  3. 安装 GPU 驱动程序。

    重要

    仅限 Linux: 在 Linux 客户机操作系统上安装驱动程序时,系统将提示您更新 xorg.conf。如果您不在安装过程中更新 xorg.conf,则需要手动更新它。更多信息请参阅 第 1.5 节 “更新和启用 xorg(Linux 虚拟机)”

  4. 在驱动程序完成安装后,重启机器。对于 Windows 虚拟机, 从管理门户或虚拟机门户中完全关闭客户机,而不是从客户机操作系统中。

    重要

    仅 Windows: 从 Windows 虚拟机操作系统中关闭虚拟机有时会将虚拟机变为休眠模式,这不会完全清除内存,并可能会导致后续的问题。使用管理门户或虚拟机门户关闭虚拟机会强制完全清理内存。

  5. 将监视器连接到主机 GPU 输出接口,并运行虚拟机。
  6. 为每个 vGPU 设置 NVIDIA vGPU 客户机软件许可,并在 NVIDIA 控制面板中添加许可证凭证。如需更多信息,请参阅 NVIDIA Virtual GPU 软件文档中的 NVIDIA vGPU 软件许可证的使用方法

1.5. 更新和启用 xorg(Linux 虚拟机)

在在虚拟机上使用 GPU 之前,您需要在虚拟机上更新并启用 xorg。NVIDIA 驱动程序安装应该自动执行此操作。查看 /etc/X11/xorg.conf 来检查 xorg 是否已更新并启用:

# cat /etc/X11/xorg.conf
Copy to Clipboard Toggle word wrap

前两行表示是否由 NVIDIA 生成。例如:

# cat /etc/X11/xorg.conf
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig: version 390.87 (buildmeister@swio-display-x64-rhel04-14) Tue Aug 21 17:33:38 PDT 2018
Copy to Clipboard Toggle word wrap

流程

  1. 在虚拟机上,使用以下命令生成 xorg.conf 文件:

    # X -configure
    Copy to Clipboard Toggle word wrap
  2. 使用以下命令,将 xorg.conf 文件复制到 /etc/X11/xorg.conf

    # cp /root/xorg.conf.new /etc/X11/xorg.conf
    Copy to Clipboard Toggle word wrap
  3. 重启虚拟机。
  4. 通过查看 /etc/X11/xorg.conf 来验证 xorg 是否已更新并启用:

    # cat /etc/X11/xorg.conf
    Copy to Clipboard Toggle word wrap

    搜索 Device 部分。您应该看到类似如下的条目:

    Section "Device"
        Identifier     "Device0"
        Driver         "nvidia"
        VendorName     "NVIDIA Corporation"
    EndSection
    Copy to Clipboard Toggle word wrap

GPU 现在分配到虚拟机。

第 2 章 分配虚拟 GPU

要设置 NVIDIA vGPU 设备,您需要:

  1. 为您的 GPU 设备获取并安装正确的 NVIDIA vGPU 驱动程序
  2. 创建介质设备
  3. 为虚拟机分配每个介质设备
  4. 在每个虚拟机上安装客户机驱动程序。

以下流程解释了此过程。

2.1. 在主机上设置 NVIDIA vGPU 设备

注意

在客户端操作系统中安装 NVIDIA vGPU 驱动程序前,您需要理解许可要求并获取正确的许可证凭证。

先决条件

  • 您的 GPU 设备支持虚拟 GPU(vGPU)功能。
  • 您的系统被列为是已经过验证的有效服务器硬件平台。

有关支持的 GPU 和验证平台的更多信息,请参阅 www.nvidia.com 上的 NVIDIA vGPU CERTIFIED SERVERS

流程

  1. 为主机下载并安装 NVIDIA 驱动程序。有关获取驱动程序的详情,请查看 NVIDIA 网站上的驱动程序页面
  2. 如果 NVIDIA 软件安装程序没有创建 /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 文件,请手动创建。
  3. 在文本编辑器中打开 /etc/modprobe.d/nvidia-installer-disable-nouveau.conf 文件,并在文件末尾添加以下行:

    blacklist nouveau
    options nouveau modeset=0
    Copy to Clipboard Toggle word wrap
  4. 为当前内核重新生成初始 ramdisk,然后重新启动:

    # dracut --force
    # reboot
    Copy to Clipboard Toggle word wrap

    另外,如果您需要使用带有介质设备的之前支持的内核版本,请为所有安装的内核版本重新生成初始 ramdisk:

    # dracut --regenerate-all --force
    # reboot
    Copy to Clipboard Toggle word wrap
  5. 检查内核是否已载入 nvidia_vgpu_vfio 模块:

    # lsmod | grep nvidia_vgpu_vfio
    Copy to Clipboard Toggle word wrap
  6. 检查 nvidia-vgpu-mgr.service 服务是否正在运行:

    # systemctl status nvidia-vgpu-mgr.service
    Copy to Clipboard Toggle word wrap

    例如:

    # lsmod | grep nvidia_vgpu_vfio
    nvidia_vgpu_vfio 45011 0
    nvidia 14333621 10 nvidia_vgpu_vfio
    mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio
    vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
    # systemctl status nvidia-vgpu-mgr.service
    nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon
       Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago
     Main PID: 1553 (nvidia-vgpu-mgr)
     [...]
    Copy to Clipboard Toggle word wrap
  7. 通过在终端或者在脚本中输入以下行来获取可用 mdev 类型列表:

    for device in /sys/class/mdev_bus/; do for mdev_type in $device/mdev_supported_types/; do
        MDEV_TYPE=$(basename $mdev_type)
        DESCRIPTION=$(cat $mdev_type/description)
        NAME=$(cat $mdev_type/name)
        echo "mdev_type: $MDEV_TYPE --- description: $DESCRIPTION --- name: $NAME";
      done;
    done | sort | uniq
    Copy to Clipboard Toggle word wrap
    注意

    有关特定 GPU 设备的 type-id 值,请参阅 Virtual GPU 软件文档中的虚拟 GPU 类型。请注意,只有 Q-series NVIDIA vGPU(如 GRID P4-2Q)支持 Linux 虚拟机上的介质设备 GPU 类型。

    输出结果类似如下:

    mdev_type: nvidia-11 --- description: num_heads=2, frl_config=45, framebuffer=512M, max_resolution=2560x1600, max_instance=16 --- name: GRID M60-0B
    mdev_type: nvidia-12 --- description: num_heads=2, frl_config=60, framebuffer=512M, max_resolution=2560x1600, max_instance=16 --- name: GRID M60-0Q
    ...
    mdev_type: nvidia-22 --- description: num_heads=4, frl_config=60, framebuffer=8192M, max_resolution=4096x2160, max_instance=1 --- name: GRID M60-8Q
    Copy to Clipboard Toggle word wrap
  8. 在管理门户中,点 ComputeVirtual Machines。选择一个虚拟机并点击 Edit。此时会出现 Edit Virtual Machine 对话框。
  9. 自定义属性。如果没有出现自定义属性,请首先单击 Show Advanced Options
  10. Custom Properties 对话框中,点 Please select a keymdev_type。如果没有出现 Please select a key,点 + 按钮。
  11. 在出现的文本字段中,输入您之前识别的 GPU 类型或类型。例如: nvidia-12。您可以使用一个以逗号分隔的列表为一个虚拟机添加多个 vGPU。例如:nvidia22,nvidia22.

    注意

    多个 vGPU 必须是相同的 mdev 类型。例如您不能使用 nvidia22,nvidia15

现在,已完成在主机上安装和配置 GPU,您可以继续在每个虚拟机上安装和配置 vGPU。

2.2. 在虚拟机上安装 vGPU 驱动程序

流程

  1. 运行虚拟机并使用串行控制台(如 SPICE 或 VNC)连接到该控制台。
  2. 将驱动程序下载到虚拟机。有关获取驱动程序的详情,请查看 NVIDIA 网站上的驱动程序页面
  3. 安装 vGPU 驱动程序,按照 NVIDIA Virtual GPU 软件文档中的安装 NVIDIA vGPU Software Graphics Driver 中的说明。

    重要

    仅限 Linux: 在 Linux 客户机操作系统上安装驱动程序时,系统将提示您更新 xorg.conf。如果您不在安装过程中更新 xorg.conf,则需要手动更新它。更多信息请参阅 第 1.5 节 “更新和启用 xorg(Linux 虚拟机)”

  4. 在驱动程序完成安装后,重启机器。对于 Windows 虚拟机, 从管理门户或虚拟机门户中完全关闭客户机,而不是从客户机操作系统中。

    重要

    仅 Windows: 从 Windows 虚拟机操作系统中关闭虚拟机有时会将虚拟机变为休眠模式,这不会完全清除内存,并可能会导致后续的问题。使用管理门户或虚拟机门户关闭虚拟机会强制完全清理内存。

  5. 运行虚拟机并使用其中一个支持的远程桌面协议(如 Mechdyne TGX)连接到该虚拟机,并通过打开 NVIDIA Control Panel 进行验证。在 Windows 上,您还可以打开 Windows Device Manager。vGPU 应显示在 Display 适配器 下。如需更多信息,请参阅 NVIDIA Virtual GPU 软件文档中的 NVIDIA vGPU 软件图形驱动程序
  6. 为每个 vGPU 设置 NVIDIA vGPU 客户机软件许可,并在 NVIDIA 控制面板中添加许可证凭证。如需更多信息,请参阅 NVIDIA Virtual GPU 软件文档中的 NVIDIA vGPU 软件许可证的使用方法

2.3. 删除 NVIDIA vGPU 设备

要更改分配的 vGPU 介质设备的配置,必须将现有设备从分配的客户端中删除。

流程

  1. 在管理门户中,点 ComputeVirtual Machines
  2. 右键单击虚拟机,再点关闭
  3. 虚拟机关闭后,选择虚拟机并点编辑。这会打开 Edit Virtual Machine 窗口。
  4. 自定义属性选项卡上,点 mdev 类型 旁边的减号 - 按钮,然后单击确定

2.4. 监控 NVIDIA vGPU

对于 NVIDIA vGPUS,若要获取物理 GPU 和 vGPU 的信息,您可以通过在主机上输入 nvidia-smi 命令来使用 NVIDIA System Management Interface。如需更多信息,请参阅 NVIDIA Virtual GPU 软件文档中的 NVIDIA 系统管理接口 nvidia-smi

例如:

# nvidia-smi
Thu Nov  1 17:40:09 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.62                 Driver Version: 410.62                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M60           On   | 00000000:84:00.0 Off |                  Off |
| N/A   40C    P8    24W / 150W |   1034MiB /  8191MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla M60           On   | 00000000:85:00.0 Off |                  Off |
| N/A   33C    P8    23W / 150W |   8146MiB /  8191MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  Tesla M60           On   | 00000000:8B:00.0 Off |                  Off |
| N/A   34C    P8    24W / 150W |   8146MiB /  8191MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   3  Tesla M60           On   | 00000000:8C:00.0 Off |                  Off |
| N/A   45C    P8    24W / 150W |     18MiB /  8191MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0     34432    C+G   vgpu                                         508MiB |
|    0     34718    C+G   vgpu                                         508MiB |
|    1     35032    C+G   vgpu                                        8128MiB |
|    2     35032    C+G   vgpu                                        8128MiB |
+-----------------------------------------------------------------------------+
Copy to Clipboard Toggle word wrap

2.5. 用于 NVIDIA vGPU 的远程桌面流服务

以下远程桌面流服务已被成功测试,以便在 RHEL 8 中与 NVIDIA vGPU 功能一起使用:

  • HP-RGS
  • Mechdyne TGX - 目前无法在 Windows Server 2016 客户机中使用 Mechdyne TGX。
  • NICE DCV - 当使用此流服务时,红帽建议使用固定分辨率设置,因为在某些情况下使用动态解析会导致一个黑色。
注意

不支持 SPICE。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat