GPU 直通仅支持 AMD64/Intel 64 架构。
本文档介绍基于 V100/T1000 NVIDIA 卡的一系列指令,仅供 GPU 计算目的使用。
请验证您使用的是 NVIDIA Tesla 产品——Maxwell、Pascal 或 Volta。
要管理主机系统,您需要在主机上使用另一张显示卡,或者使用功能正常的 SSH 环境。
请验证主机是否支持 VT-d 技术,以及它是否已在固件设置中启用。
> dmesg | grep -e "Directed I/O"
[ 12.819760] DMAR: Intel(R) Virtualization Technology for Directed I/O如果 VT-d 未在固件中启用,请启用它并重新启动主机。
请验证主机是否具有额外的 GPU 或 VGA 卡。
> lspci | grep -i "vga"
07:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. \
MGA G200e [Pilot] ServerEngines (SEP1) (rev 05)使用 Tesla V100 卡
> lspci | grep -i nvidia
03:00.0 3D controller: NVIDIA Corporation GV100 [Tesla V100 PCIe] (rev a1)使用 T1000 Mobile(适用于 Dell 5540)
> lspci | grep -i nvidia
01:00.0 3D controller: NVIDIA Corporation TU117GLM [Quadro T1000 Mobile] (rev a1)
IOMMU 默认情况下是禁用的。您需要在 /etc/default/grub 配置文件中启动时启用它。
对于基于 Intel 的主机
GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt rd.driver.pre=vfio-pci"
对于基于 AMD 的主机
GRUB_CMDLINE_LINUX="iommu=pt amd_iommu=on rd.driver.pre=vfio-pci"
保存修改后的 /etc/default/grub 文件后,重新生成主 GRUB 2 配置文件 /boot/grub2/grub.cfg
>sudogrub2-mkconfig -o /boot/grub2/grub.cfg
重新启动主机并验证 IOMMU 是否已启用。
> dmesg | grep -e DMAR -e IOMMU为了将 NVIDIA 卡分配给 VM 客户机,我们需要阻止主机操作系统加载 NVIDIA GPU 的内置 nouveau 驱动程序。使用以下内容创建文件 /etc/modprobe.d/60-blacklist-nouveau.conf
blacklist nouveau
查找卡的供应商和型号 ID。使用在 第 A.3.1 节,“验证主机环境” 中标识的 Bus 号码,例如 03:00.0
> lspci -nn | grep 03:00.0
03:00.0 3D controller [0302]: NVIDIA Corporation GV100 [Tesla V100 PCIe] [10de:1db4] (rev a1)使用以下内容创建文件 /etc/modprobe.d/vfio.conf
options vfio-pci ids=10de:1db4
请验证您的卡是否需要额外的 ids= 参数。对于某些卡,您还必须指定音频设备,因此也必须将设备的 ID 添加到列表中,否则您将无法使用该卡。
您可以加载 VFIO 驱动程序的方法有三种。
创建文件 /etc/dracut.conf.d/gpu-passthrough.conf 并添加以下内容(注意前导空格)
add_drivers+=" vfio vfio_iommu_type1 vfio_pci vfio_virqfd"
重新生成 initrd 文件
>sudodracut --force /boot/initrd $(uname -r)
创建文件 /etc/modules-load.d/vfio-pci.conf 并添加以下内容
vfio vfio_iommu_type1 vfio_pci kvm kvm_intel
对于 Microsoft Windows 客户机,我们建议禁用 MSR(特定于型号的寄存器)以避免客户机崩溃。创建文件 /etc/modprobe.d/kvm.conf 并添加以下内容
options kvm ignore_msrs=1
为了获得适当的 GPU 直通功能,主机需要使用 UEFI 固件启动(即,不使用传统 BIOS 启动序列)。如果尚未安装,请安装 qemu-ovmf 包
>sudozypper install qemu-ovmf
本节描述了如何配置客户机虚拟机,以便它可以利用主机的 NVIDIA GPU。使用 Virtual Machine Manager 或 virt-install 安装客户机 VM。有关更多详细信息,请参阅 第 9 章,“客户机安装”。
在客户机 VM 安装期间,选择 并配置以下设备
如果可能,请使用 Q35 芯片组。
使用 UEFI 固件安装客户机 VM。
添加以下模拟设备
图形:Spice 或 VNC
设备:qxl、VGA 或 Virtio
有关更多信息,请参阅 第 13.6 节,“视频”。
将主机 PCI 设备(例如,我们的示例中的 03:00.0)添加到客户机。有关更多信息,请参阅 第 13.12 节,“将主机 PCI 设备分配给 VM 客户机”。
为了获得最佳性能,我们建议对网络卡和存储使用 virtio 驱动程序。
从 http://www.nvidia.com/download/driverResults.aspx/131159/en-us 下载驱动程序 RPM 包。
安装下载的 RPM 包
>sudorpm -i nvidia-diag-driver-local-repo-sles123-390.30-1.0-1.x86_64.rpm
刷新仓库并安装 cuda-drivers。此步骤与非 SUSE 发行版不同
>sudozypper refresh && zypper install cuda-drivers
重新启动客户机 VM
>sudoshutdown -r now
由于安装程序需要编译 NVIDIA 驱动程序模块,因此请安装 gcc-c++ 和 kernel-devel 包。
禁用 Secure Boot,因为 NVIDIA 的驱动程序模块未签名。在 SUSE 发行版上,您可以使用 YaST GRUB 2 模块来禁用 Secure Boot。有关更多信息,请参阅 “参考”一书,第 14 章“UEFI(统一可扩展固件接口)”,第 14.1.1 节“在 openSUSE Leap 上的实现”。
从 https://www.nvidia.com/Download/index.aspx?lang=en-us 下载驱动程序安装脚本,使其可执行并运行它以完成驱动程序安装
>chmod +x NVIDIA-Linux-x86_64-460.73.01.run>sudo./NVIDIA-Linux-x86_64-460.73.01.run
从 https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=SLES&target_version=15&target_type=rpmlocal 下载 CUDA 驱动程序并按照屏幕上的说明进行安装。
安装 NVIDIA 驱动程序后,Virtual Machine Manager 显示会失去与客户机操作系统的连接。要访问客户机 VM,您必须通过 ssh 登录,切换到控制台界面,或在客户机中安装专用的 VNC 服务器。为了避免屏幕闪烁,请停止并禁用显示管理器
>sudosystemctl stop display-manager && systemctl disable display-manager
更改目录到 CUDA 示例模板
> cd /usr/local/cuda-9.1/samples/0_Simple/simpleTemplates编译并运行 simpleTemplates 文件
> make && ./simpleTemplates
runTest<float,32>
GPU Device 0: "Tesla V100-PCIE-16GB" with compute capability 7.0
CUDA device [Tesla V100-PCIE-16GB] has 80 Multi-Processors
Processing time: 495.006000 (ms)
Compare OK
runTest<int,64>
GPU Device 0: "Tesla V100-PCIE-16GB" with compute capability 7.0
CUDA device [Tesla V100-PCIE-16GB] has 80 Multi-Processors
Processing time: 0.203000 (ms)
Compare OK
[simpleTemplates] -> Test Results: 0 Failures在安装 NVIDIA 驱动程序之前,您需要使用客户机的 <hidden state='on'/> 指令隐藏 hypervisor,例如
<features> <acpi/> <apic/> <kvm> <hidden state='on'/> </kvm> </features>
从 https://www.nvidia.com/Download/index.aspx 下载并安装 NVIDIA 驱动程序。
从 https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64 下载并安装 CUDA 工具包。
在目录 Program Files\Nvidia GPU Computing Toolkit\CUDA\v10.2\extras\demo_suite 中找到几个 NVIDIA 演示示例。