PVE虚拟机直通英伟达GPU显卡完全指南

前言

部署pve报错解决

本教程在pve宿主机执行

一. 前提条件

Bios开启VT-d HD-t

1、确认CPU是否支持VT-D

2、确保启动方式为gurb,非systemd-boot
如果启动方式为systemd-boot,在0x02步骤中需要参考 [3] Proxmox VE Administration Guide 开启iommu功能 或参考本文末尾下方第二链接proxmox-boot-tool refresh

二. 开启IOMMU功能

编辑文件/etc/default/grub,修改GRUB_CMDLINE_LINUX_DEFAULT字段值

如果为Intel的CPU

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"

如果为AMD的CPU

1
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/7/image_3170d8505684902d0828f4adc8f464bb.png

三. 添加VT-D功能的内核模块

打开文件/etc/modules,新增以下4行内容

1
2
3
4
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/7/image_922e9e8bc8602c37be9a95b4b4cfbac7.png

四. 屏蔽宿主机显卡驱动

1
2
3
4
5
6
7
8
9
# 屏蔽镭龙显卡驱动
echo "blacklist radeon" >> /etc/modprobe.d/pve-blacklist.conf

# 屏蔽英伟达显卡的开源nouveau驱动
echo "blacklist nouveau" >> /etc/modprobe.d/pve-blacklist.conf

# 屏蔽英伟达显卡驱动
echo "blacklist nvidia" >> /etc/modprobe.d/pve-blacklist.conf

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/7/image_eaab6c3d231a8dae5e02514fd79eea14.png

五. 其它参数

1
2
3
4
5
6
7
8
# 允许不安全的中断
echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf

# 忽略异常,防止虚拟机异常导致宿主机崩溃
# ignore_msrs : 忽略异常
# report_ignored_msrs : 是否报告异常
echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/7/image_8e63746854064a712ab3519c84a8afae.png

六. 配置VFIO

ps:执行此操作后可能无法输出到外接显示器,若出现此情况,请撤回该步骤

1、查看显卡ID

1
2
root@pve:~# lspci -nn | grep VGA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2685] (rev a1)

N卡编号为01:00,搜索对应的设备ID和音频设备ID

1
2
3
root@pve:~# lspci -n -s 01:00
01:00.0 0300: 10de:2685 (rev a1)
01:00.1 0403: 10de:22ba (rev a1)

或者直接以NVIDIA为关键词搜索相关的设备,其中一个是音频

1
2
3
root@pve:~# lspci -nn | grep NVIDIA
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2685] (rev a1)
01:00.1 Audio device [0403]: NVIDIA Corporation AD102 High Definition Audio Controller [10de:22ba] (rev a1)

得到显卡的设备ID和显卡内置音频设备ID为:

  • 显卡ID10de:2685
  • 音频ID10de:22ba

2、将设备ID添加到vfio.conf

1
2
3
echo "options vfio-pci ids=10de:2685,10de:22ba disable_vga=1" > /etc/modprobe.d/vfio.conf
# 如果无法输出到外接显示器,取消disable_vga=1参数试试
echo "options vfio-pci ids=10de:2685,10de:22ba" > /etc/modprobe.d/vfio.conf

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/7/image_d97846f7bd4dc84cc26efca3ae8b9d1a.png

七. 应用更改

  • 1、刷新更改

    1
    2
    update-grub
    update-initramfs -u -k all

    https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/7/image_088397be69bb3731e3594f4f49245bd7.png

  • 2、重启PVE

    1
    reboot
  • 3、检查是否配置成功

    1
    2
    3
    4
    5
    6
    7
    8
    9
    root@pve:~# lspci -nnk
    01:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2685] (rev a1)
    Subsystem: Shenzhen Colorful Yugong Technology and Development Co. Device [7377:1400]
    Kernel driver in use: vfio-pci
    Kernel modules: nvidiafb, nouveau
    01:00.1 Audio device [0403]: NVIDIA Corporation AD102 High Definition Audio Controller [10de:22ba] (rev a1)
    Subsystem: Shenzhen Colorful Yugong Technology and Development Co. AD102 High Definition Audio Controller [7377:1400]
    Kernel driver in use: vfio-pci
    Kernel modules: snd_hda_intel

如果看到Kernel driver in use: vfio-pci,表示应用成功

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/7/image_2867de7d79e4bcc5b8934e10af67e9bb.png

添加显卡到虚拟机中
完成上述步骤配置后,在PVE-web图形化端添加PCI-E设备到虚拟机中即可

创建虚拟机时需要选择:

https://github.com/zznn-cloud/zznn-cloud-blog-images/raw/main/Qexo/24/7/image_4d88c6e4aaae1b291fb1a0054b3e7011.png

ps:
1、我同时添加显卡和音频之后,开机遇报错:TASK ERROR: start failed: QEMU exited with code 1,如果遇到同样的报错,尝试把音频设备从硬件中移除

八. 扩展

虚拟机直通显卡后安装显卡驱动 使用下方脚本安装

安装脚本 > nvidia-gpu.sh

本文参考

https://blog.csdn.net/byb123/article/details/124549876 (主要参考)

https://blog.dako.dev/proxmox-7-4-gpu-passthrough--e6-98-be-e5-8d-a1-e7-9b-b4-e9-80-9a/