本教程建议结合下文给出的官方文档来操作
启用 PCIe 直通
https://pve.proxmox.com/wiki/PCI(e)_Passthrough
启用IOMMU
打开GRUB配置文件进行编辑
vim /etc/default/grub
找到包含GRUB_CMDLINE_LINUX_DEFAULT的行,并在引号内添加
iommu=pt intel_iommu=on
参数。例如:GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=pt intel_iommu=on"
更新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。
安装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.
Finished, enjoy your life.
使用过程中突然失效
在宿主机运行update-initramfs -u -k all
重新生成initramfs镜像
引用内容
- https://pve.proxmox.com/wiki/NVIDIA_vGPU_on_Proxmox_VE
- 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
- https://pycvala.de/blog/proxmox/create-your-own-debian-12-cloud-init-template/