需启用IOMMU并配置vfio-pci驱动实现GPU直通:BIOS开启VT-d/AMD-Vi,内核添加iommu=pt参数,验证IOMMU分组,绑定GPU至vfio-pci,虚拟机中添加PCI设备并使用OVMF。

如果您希望在Proxmox VE环境中将物理GPU直接分配给虚拟机使用,以获得接近原生的图形性能或支持CUDA、AI训练、游戏等场景,则需确保硬件支持并正确配置IOMMU、内核参数及虚拟机设备绑定。以下是实现GPU直通的具体操作步骤:
一、确认CPU与主板支持VT-d(Intel)或AMD-Vi(AMD)并启用IOMMU
GPU直通依赖于硬件级I/O内存管理单元(IOMMU)功能,该功能必须在BIOS/UEFI中开启,并通过内核参数激活。未启用IOMMU将导致PCI设备无法被隔离和分配给虚拟机。
1、重启服务器进入BIOS/UEFI设置界面。
2、查找并启用Intel VT-d(Intel平台)或AMD-Vi / IOMMU(AMD平台)选项,通常位于“Advanced” → “CPU Configuration”或“Northbridge Configuration”中。
3、保存设置并重启,登录Proxmox主机终端。
4、执行命令 dmesg | grep -i iommu,确认输出中包含“AMD-Vi: IOMMU enabled”或“IOMMU enabled”字样。
二、修改GRUB配置启用IOMMU内核参数
Linux内核需加载相应参数以启用IOMMU支持并禁止NVIDIA/AMD驱动在宿主机上抢占GPU设备,否则直通会失败。
1、编辑GRUB配置文件:nano /etc/default/grub。
2、定位到 GRUB_CMDLINE_LINUX_DEFAULT 行,在引号内追加以下内容(根据CPU厂商二选一):
Intel平台:添加 intel_iommu=on iommu=pt;
AMD平台:添加 amd_iommu=on iommu=pt。
3、若使用NVIDIA显卡,还需添加 nvidia.NVreg_EnableGpuFirmware=0 以禁用固件加载。
4、执行 update-grub && reboot 使配置生效。
三、验证PCI设备可隔离性与IOMMU分组
直通要求GPU及其关联设备(如音频控制器、桥接器)处于同一IOMMU组且不与其他关键设备共享,否则无法安全解绑。
1、运行脚本生成IOMMU组信息:for d in /sys/kernel/iommu_groups/*/devices/*; do n=${d#*/iommu_groups/*}; n=${n%/devices/*}; printf 'IOMMU Group %s ' \"$n\"; lspci -nns \"${d##*/}\"; done 2>/dev/null | sort -V。
2、识别目标GPU设备ID(例如 01:00.0)及其所在IOMMU组编号。
3、检查该组内是否仅含GPU核心与配套音频设备(如 01:00.1),若存在USB控制器、SATA控制器等则不可直通。
四、绑定GPU设备至vfio-pci驱动
需将GPU从宿主机默认驱动(如nouveau、nvidia、radeon、amdgpu)卸载,并强制绑定至vfio-pci驱动,使其可供KVM识别为可直通设备。
1、查看GPU当前驱动:lspci -k -s 01:00.0(将01:00.0替换为实际设备地址)。
2、获取GPU设备的Vendor ID与Device ID:lspci -nn -s 01:00.0,输出形如 [10de:1db6]。
3、编辑modprobe配置:echo "options vfio-pci ids=10de:1db6,10de:10f0" > /etc/modprobe.d/vfio.conf(第二ID为音频设备,需一并加入)。
4、屏蔽原驱动并加载vfio模块:echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf;echo "blacklist nvidia" >> /etc/modprobe.d/blacklist.conf;echo "vfio" >> /etc/modules;echo "vfio_iommu_type1" >> /etc/modules;echo "vfio_pci" >> /etc/modules;echo "vfio_virqfd" >> /etc/modules。
5、更新initramfs并重启:update-initramfs -u -k all && reboot。
五、在虚拟机中添加GPU设备并启用ACS补丁(如必要)
对于部分主板或芯片组,PCIe拓扑可能缺乏ACS(Access Control Services)支持,导致IOMMU组合并,此时需通过内核参数绕过检查。
1、编辑虚拟机配置文件:nano /etc/pve/qemu-server/100.conf(100为VM ID)。
2、添加PCI设备行:hostpci0: 01:00.0,pcie=1,rombar=1,x-vga=1(若需作为主显示卡);若仅作计算卡,可省略x-vga=1。
3、若IOMMU组异常合并且硬件不支持ACS,可在GRUB中追加 pci=assign-busses pcie_acs_override 参数(仅限测试环境,存在安全风险)。
4、启动虚拟机前,确认其BIOS类型为OVMF(UEFI),并在硬件设置中启用 SCSI Controller → Use OVMF (UEFI) 及 Machine → q35。









