本教程建议结合下文给出的官方文档来操作

启用 PCIe 直通

https://pve.proxmox.com/wiki/PCI(e)_Passthrough

启用IOMMU

  1. 打开GRUB配置文件进行编辑

    vim /etc/default/grub

  2. 找到包含GRUB_CMDLINE_LINUX_DEFAULT的行,并在引号内添加iommu=pt intel_iommu=on参数。例如:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=pt intel_iommu=on"

  3. 更新GRUB配置

    update-grub

添加内核模块

# 编辑模块配置
vim /etc/modules

# 添加以下模块
vfio
vfio_iommu_type1
vfio_pci

# 刷新initramfs
update-initramfs -u -k all

# 重启系统
reboot

# 检查模块是否加载, 输出结果应包含上面的3个模块
lsmod | grep vfio

# 检查是否启用PCIe直通
dmesg | grep -e DMAR -e IOMMU -e AMD-Vi

# 输出结果应该包含以下内容
1. DMAR: IOMMU enabled - 这表明IOMMU(输入输出内存管理单元)已经启用,这是PCIe直通的必要条件。
2. DMAR: Intel(R) Virtualization Technology for Directed I/O - 这表明Intel的虚拟化技术(VT-d)已经启用,这是用于PCIe直通的技术。

将 GPU 与主机分离

参考官方文档 https://pve.proxmox.com/wiki/PCI(e)_Passthrough#_host_device_passthrough

在虚拟机中安装驱动

新建虚拟机

https://pycvala.de/blog/proxmox/create-your-own-debian-12-cloud-init-template/

使用PCIe直通时,使用q35作为机器类型、OVMF(VMs的UEFI)代替SeaBIOS以及PCIe代替PCI可以达到最佳兼容性。请注意,如果您想使用OVMF进行GPU直通,GPU需要具有UEFI兼容的ROM,否则请使用SeaBIOS。

image

安装CUDA和GPU驱动

https://developer.nvidia.com/cuda-downloads

在网站中找到对应平台Cuda安装命令, 下载运行安装, 然后再安装GPU驱动, 建议使用cuda-drivers

故障排除

关闭虚拟机的安全启动

如果运行nvidia-smi后输出以下内容, 可以尝试关闭安全启动来解决

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

https://www.cnblogs.com/MAENESA/p/18005241#%E5%85%B3%E9%97%AD%E5%AE%89%E5%85%A8%E5%90%AF%E5%8A%A8linux%E4%B8%93%E5%B1%9E-

Finished, enjoy your life.

使用过程中突然失效

在宿主机运行update-initramfs -u -k all重新生成initramfs镜像

引用内容

  1. https://pve.proxmox.com/wiki/NVIDIA_vGPU_on_Proxmox_VE
  2. https://access.redhat.com/documentation/en-us/red_hat_virtualization/4.3/html/setting_up_an_nvidia_gpu_for_a_virtual_machine_in_red_hat_virtualization/proc_nvidia_gpu_passthrough_nvidia_gpu_passthrough
  3. https://pycvala.de/blog/proxmox/create-your-own-debian-12-cloud-init-template/