首页 > 其他分享 >PVE直通Nvidia显卡

PVE直通Nvidia显卡

时间:2024-02-03 21:34:33浏览次数:38  
标签:blacklist 直通 IOMMU Nvidia DMAR PVE nvidia 显卡

本文参考:PVE开启硬件直通功能PVE 7.3 优化和显卡直通PVE开启硬件显卡直通功能PVE设置显卡直通proxmox PCI Passthrough

简介

其实网络上有很多不错的文章讲述了如何直通显卡,也有简单易用的脚本帮你直通(pvetools)。我也成功在pve上直通n卡给win10,但是在Debian12上,我一直没办法使用Nvidia-smi,后来在朋友的提醒下,成功的解决了此问题,所以写下这篇文章讲述我的解决方案。


注意事项

  • 本文编写时 Proxmox-Pve版本8.1.3PVE内核版本6.5.11-4-pve
  • 本文所使用显卡为 Nvidia Quadro T400 4G (TU117GLM)
  • 请确保所使用的 硬件设备 支持 Intel VT-D 或者 AMD AMD-V ,并且在 BIOS 中已经启用。
  • 本文编写时,测试虚拟机所使用的系统为 Debian12 bookworm ,内核版本为 6.1.0-17-amd64
  • 本文编写时,使用n卡驱动安装方式为 apt install nvidia-driver ,开启源 bookworm main non-free non-free-firmware contrib 参数

先前准备

开启IOMMU和硬件直通功能

  1. 编辑(nanovi/etc/default/grub ,并修改 GRUB_CMDLINE_LINUX_DEFAULT 那一行。

    • Intel CPU
    # pcie_acs_override=downstream video=vesafb:off video=efifb:off
    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream"
    
    • AMD CPU
    # pcie_acs_override=downstream video=vesafb:off video=efifb:off
    GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt initcall_blacklist=sysfb_init pcie_acs_override=downstream"
    

    intel_iommuamd_iommu=on开启IOMMU
    video=vesafb:off video=efifb:off 不加载 vesafbveas设备fbefifb 是指 uefi设备fb ,在 PVE 7.3 之后版本用initcall_blacklist=sysfb_init 替代(来源于PVE 7.3 优化和显卡直通
    pcie_acs_override=downstream 是为了将 iommu groups拆分,方便直通一些板载的设备(来源于加强硬件直通的功能

  2. 更新 GRUB
    update-grub 执行更新

  3. 加载内核模块
    编辑 /etc/modules ,新增一下内容

    vfio
    vfio_iommu_type1
    vfio_pci
    vfio_virqfd
    
  4. 重启 PVE

  5. 验证是否成功 启用IOMMU
    输入 dmesg | grep -e DMAR -e IOMMU,并有以下类似内容

    # 这是我的机器输出内容
    [    0.019611] ACPI: DMAR 0x000000003555A000 000088 (v02 INTEL  EDK2     00000002      01000096)
    [    0.019640] ACPI: Reserving DMAR table memory at [mem 0x4225a000-0x4225a087]
    [    0.175656] DMAR: Host address width 39
    [    0.175657] DMAR: DRHD base: 0x000000far90000 flags: 0x0
    [    0.175661] DMAR: dmar0: reg_base_addr far90000 ver 4:0 cap 1c0000c40660462 ecap 29a00f0505e
    [    0.175664] DMAR: DRHD base: 0x000000far91000 flags: 0x1
    [    0.175668] DMAR: dmar1: reg_base_addr far91000 ver 5:0 cap d2008c40660462 ecap f050da
    [    0.175670] DMAR: RMRR base: 0x0000004c000000 end: 0x000000503fffff
    [    0.175673] DMAR-IR: IOAPIC id 2 under DRHD base  0xfed91000 IOMMU 1
    [    0.175674] DMAR-IR: HPET id 0 under DRHD base 0xfed91000
    [    0.175675] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
    [    0.177198] DMAR-IR: Enabled IRQ remapping in x2apic mode
    [    0.592036] pci 0000:00:02.0: DMAR: Skip IOMMU disabling for graphics
    [    0.658565] DMAR: Intel-IOMMU force enabled due to platform opt in
    [    0.658570] DMAR: No ATSR found
    [    0.658571] DMAR: No SATC found
    [    0.658572] DMAR: IOMMU feature fl1gp_support inconsistent
    [    0.658573] DMAR: IOMMU feature pgsel_inv inconsistent
    [    0.658574] DMAR: IOMMU feature nwfs inconsistent
    [    0.658575] DMAR: IOMMU feature dit inconsistent
    [    0.658576] DMAR: IOMMU feature sc_support inconsistent
    [    0.658577] DMAR: IOMMU feature dev_iotlb_support inconsistent
    [    0.658578] DMAR: dmar0: Using Queued invalidation
    [    0.658581] DMAR: dmar1: Using Queued invalidation
    [    0.659172] DMAR: Intel(R) Virtualization Technology for Directed I/O
    
  6. 验证是否 启用IOMMU中断重映射
    输入 dmesg | grep remapping 并输出 类似 以下内容即为成功。到目前为止可以 直通 除显卡外PCI-E设备

    # intel
    [    0.175675] DMAR-IR: Queued invalidation will be enabled to support x2apic and Intr-remapping.
    [    0.177198] DMAR-IR: Enabled IRQ remapping in x2apic mode
    # amd
    AMD-Vi: Interrupt remapping enabled
    

    如果失败或者没有,可能没有 启用IOMMU中断重映射 ,会导致无法直通,请看第七点。

  7. 允许不安全IOMMU中断重映射(第六点成功时,这步跳过)
    编辑 /etc/modprobe.d/iommu_unsafe_interrupts.conf ,添加以下内容。

    options vfio_iommu_type1 allow_unsafe_interrupts=1
    

显卡直通

  1. 屏蔽驱动
    编辑 /etc/modprobe.dpve-blacklist.conf ,添加以下内容

    # Nvidia
    blacklist nvidiafb
    blacklist nouveau
    blacklist nvidia
    
    # AMD
    blacklist amdgpu
    blacklist radeon
    
    # Intel UHD
    #blacklist snd_hda_codec_hdmi
    #blacklist snd_hda_intel
    #blacklist snd_hda_codec
    #blacklist snd_hda_core
    
  2. 忽略显卡警告(Nvidia专属,主要在 Win 中遇到一些应用,列如 GeForce ExperiencePassmark Performance TestSiSoftware Sandra
    编辑 /etc/modprobe.d/kvm.conf

    options kvm ignore_msrs=1 report_ignored_msrs=0
    

    ignore_msrs 忽略异常
    report_ignored_msrs 是否报告异常

  3. 配置 VFIO ,主要用于 显示输出音频输出 分开

    • 查看显卡ID
      输入 lspci -nn | grep VGA ,得到类似以下内容
    00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-P Integrated Graphics Controller [8086:46d6] (rev 0c)
    01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117GLM [Quadro T400 Mobile] [10dg:1fa2] (rev a1)
    
    • 获取 设备ID音频ID ,注意我这 显卡编号01:00.0
      输入lspci -n -s 02:00
    01:00.0 0300: 10dg:1fa2 (rev a1)
    01:00.1 0403: 10dg:10fd (rev a1)
    
    • 设备ID10dg:1fa2) 和 音频ID10dg:10fd) 写入到 /etc/modprobe.d/vfio.conf
    options vfio-pci ids=10dg:1fa22,10dg:10fd
    
  4. 更新内核
    输入 update-initramfs -u

  5. 重启

  6. 检查 vfio-pci 是否应用成功
    输入 lspci -nnk 并找到 显卡编号 那一行,如果得到类似以下结果,为成功

    01:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU117GLM [Quadro T400 Mobile] [10de:1fb2] (rev a1)
        Subsystem: NVIDIA Corporation TU117GLM [Quadro T400 Mobile] [10de:1489]
        Kernel driver in use: vfio-pci
        Kernel modules: nvidiafb, nouveau
    01:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10fa] (rev a1)
        Subsystem: NVIDIA Corporation Device [10de:1489]
        Kernel driver in use: vfio-pci
        Kernel modules: snd_hda_intel
    

    结果中有 Kernel driver in use: vfio-pci 即为成功


添加显卡到虚拟机

创建虚拟机

  1. 常规 选项卡请根据自己情况填写

  2. 操作系统 选项卡请根据自己情况填写

  3. 系统 选项卡

    • 显卡 选择 标准VGASPICEVirtlO-GPUVirGL GPU 任选其一即可
    • 机型 选择 q35
    • Qemu代理 选择 开启(一般会安装的,类似 ESXI agent,用于与 虚拟机通信 获取 虚拟机信息
    • BIOS 选择 OVMF(UEFI) ,并选择 EFI存储
  4. 磁盘 选项卡请根据自己情况填写

  5. CPU 选项卡

    • 类别 推荐选择 host
    • 其他请根据自己情况填写
  6. 内存 选项卡

    • 推荐关闭 Ballooning设备 ,因为 硬件直通虚拟机 需要保证内存不是共享的。
  7. 网络 选项卡请根据自己情况填写

  8. 确认

添加显卡到虚拟机

  1. 选择 虚拟机 , 并点击 硬件
  2. 点击 添加 , 然后点击 PCI设备
  3. 选择 原始设备 ,在 设备 中选择需要直通的显卡
  4. 启用 所有功能主GPUROM-BarPCI-Express

    其中 主GPU 可以不用选择,此选项影响 显卡默认参数(会导致无法启动终端)
    所有功能ROM-BarPCI-Express 经测试不影响 nvidia-smi 命令

  5. 点击添加

关闭安全启动(Linux专属)

终于来到了其他教程没有的部分
如果你的 安装Linux 后,装完驱动发现无法使用 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.

还发现 systemd-modules-loadnvidia-persistenced.service 无法启动,systemctl status systemd-modules-load.servicejournalctl -xeu nvidia-persistenced.service,提示有以下内容

# systemd-modules-load.service
modprobe: ERROR: could not insert 'nvidia': Invalid argument
modprobe: ERROR: could not insert 'nvidia_current_drm': Key was rejected by service
modprobe: ERROR: ../libkmod/libkmod-module.c:1047 command_do() Error running install command 'modprobe nvidia ; modprobe -i nvidia-current-modeset ' for module nvidia_modeset: retcode 1
modprobe: ERROR: could not insert 'nvidia_modeset': Invalid argument
modprobe: ERROR: could not insert 'nvidia_current_drm': Key was rejected by service
Error running install command 'modprobe nvidia-modeset ; modprobe -i nvidia-current-drm ' for module nvidia_drm: retcode 1
Failed to insert module 'nvidia_drm': Invalid argument

# nvidia-persistenced.service
Started (737)
Failed to query NVIDIA devices. Please ensure that the NVIDIA device files (/dev/nvidia*) exist, and that user 101 has read and write permissions for those files.
Shutdown (737)
nvidia-persistenced failed to initialize. Check syslog for more details.
nvidia-persistenced.service: Control process exited, code=exited, status=1/FAILURE

这时候,你可以试试关闭虚拟机的安全启动,原因是因为 驱动签名验证 无法通过,我在使用 nvidia官方驱动 安装时候发现的 ,它提示

 The target kernel has CONFIG_MODULE_SIG set, which means that it supports cryptographic signatures on kernel
  modules. On some systems, the kernel may refuse to load modules without a valid signature from a trusted key. This
  system also has UEFI Secure Boot enabled; many distributions enforce module signature verification on UEFI systems
  when Secure Boot is enabled. Would you like to sign the NVIDIA kernel module?

关闭安全启动 步骤如下

  1. 启动虚拟机,并快速反复按 F2 按钮 进入BIOS
  2. 上下键光条 移动到 Device Manager ,按 回车键 选择
  3. 选择 Secure Boot Configuration
  4. 光条 移动到 Attempt Secure Boot 一行 , 按 空格键 取消 × (取消选中),可能会有提示,按 空格键 即可继续
  5. F10 保存,提示输入 Y 保存,输入 N 或者 ESC键 取消,这里输入 Y
  6. ESC键 退回到一开始界面
  7. 光条 移动到 Continue 一行,按 回车键 继续
  8. 提示按 回车键 继续
  9. 输入 nvidia-smi 命令查看是否成功

结尾

以上就是 PVE硬件直通 教程。有其他特殊问题的,可以看看官方的这篇文章proxmox PCI Passthrough

标签:blacklist,直通,IOMMU,Nvidia,DMAR,PVE,nvidia,显卡
From: https://www.cnblogs.com/MAENESA/p/18005241

相关文章

  • 华为显卡已经支持pytorch计算框架
    相关链接:https://support.huawei.com/enterprise/zh/doc/EDOC1100079287/a21c08dehttps://www.zhihu.com/question/624955377/answer/3240350483https://www.hiascend.com/document/detail/zh/ModelZoo/pytorchframework/pies/pies_00004.htmlAscend/pytorch项目地址:https:......
  • Bevy 设置使用集成显卡
    Bevy测试用例在笔记本环境下,默认启动intel的集成显卡,cargorun执行bevy的测试例子,会发现窗口图形无法正常启动,报错信息如下:thread'main'panickedat/home/chen/.cargo/registry/src/mirrors.ustc.edu.cn-4affec411d11e50f/wgpu-0.17.2/src/backend/direct.rs:771:18:Error......
  • 英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择,含架构
    英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择,含架构技术和性能对比带你解决疑惑近期,AIGC领域呈现出一片繁荣景象,其背后离不开强大算力的支持。以ChatGPT为例,其高效的运行依赖于一台由微软投资建造的超级计算机。这台超级计算机配备了数万个NVIDIA......
  • 英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择,含架构
    英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择,含架构技术和性能对比带你解决疑惑近期,AIGC领域呈现出一片繁荣景象,其背后离不开强大算力的支持。以ChatGPT为例,其高效的运行依赖于一台由微软投资建造的超级计算机。这台超级计算机配备了数万个NVIDI......
  • 影驰RTX 4070 SUPER星曜OC显卡评测:250W超频潜力十足 散热更惊喜
    一、前言:影驰推出主打高颜值的RTX4070SUPER星曜OC显卡影驰作为DIY大厂,要说它家颜值最高的产品,那必然就是星曜系列,无论显卡、内存还是SSD,不光好看,品质和性能上也都有着不俗的表现。随着RTX4070SUPER的推出,影驰也第一时间推出了这款主打高颜值的RTX4070SUPER星曜OC显卡。......
  • [转帖]3 分钟了解 NVIDIA 新出的 H200
    https://zhuanlan.zhihu.com/p/439633733内存带宽应该是9.6*1024*6算出来来的实际值4.8TB/S和内存141G应该是进行了一些删减理论上是六个24GB的HBM3e的内存.应该是为了安全和稳定进行了限速不然理论上可以达到接近6BG的带宽和144G的HBM3e的内存大小.英伟......
  • 使用CPU运行大语言模型(LLM),以清华开源大模型ChatGLM3为例:无需显卡!用CPU搞定大模型运行
    教程视频地址:无需显卡!用CPU搞定大模型运行部署!【详细手把手演示】按照上面视频进行安装配置之前需要注意,python编程环境需要大于等于python3.10,否则会运行报错。下载好GitHub上的项目代码后需要运行pipinstall-rrequirements.txt配置好后运行效果:相关资料:【ChatGL......
  • nvidia官网如何下载历史驱动
    首先打开下载官网页面https://www.nvidia.cn/geforce/drivers/第二步:按F12打开浏览器调试页面DevTools,将页签切换到网络选项卡中,并按清除按钮将已有的请求信息清空。第三步:在驱动搜索界面选中自己的显卡信息,点击搜索,切换到DevTools中,看到已发起的搜索驱动请求,找到ajax开头的请......
  • 计算机编程中的黑魔法编程是什么?如何求解一个浮点数的平方根倒数?计算机中的浮点数是如
    原视频:没有显卡的年代,这群程序员用4行代码优化游戏最原始的求解目标:(求一个浮点数的开方的导数)浮点数在计算机中的表示形式:对数的运算法则:A为a在计算机中的表示形式(二进制表示形式):求浮点数的平方根倒数的应用场景:这个情况,直白的说就......
  • NVIDIA中的cupti的作用及设置: CUDA profiling tools interface —— Could not load
    NVIDIA官方给出的说明:可以知道,这个组件的作用是对NVIDIA的CUDA进程进行性能分析的,通过对这个组件的调用可以实现对CUDA进程的性能监测。在使用深度学习框架时有时需要对运行的代码的CUDA部分进行性能分析,于是就会调用该库的接口,有时会报错:Couldnotloaddynamiclibrary......