我的 Proxmox GPU 直通设置

我在 Proxmox VE 上使用 NVIDIA 显卡进行 GPU 直通的个人笔记和配置。包括我用于高性能虚拟机的确切设置。

技术栈: Proxmox VE, NVIDIA, QEMU, VFIO
查看代码

我的 Proxmox GPU 直通设置

这些是我在 Proxmox VE 家庭实验室上设置 GPU 直通的个人笔记。我分享这个配置是因为我花了好几天才让它正常工作,这些是对我的硬件有效的确切步骤。

为什么我需要这个

我想把多台物理机器整合到一台 Proxmox 服务器中,同时保持 GPU 性能,用于:

  • 具有近乎原生性能的游戏 Windows 虚拟机
  • 使用 CUDA 加速的 ML/AI 实验
  • 视频编码项目
  • 测试 GPU 加速应用程序

我的硬件设置

  • Proxmox VE 8.1
  • 启用 VT-d 的 Intel CPU
  • 支持 IOMMU 的华硕主板
  • 用于直通的 NVIDIA RTX 3080
  • 用于 Proxmox 主机显示的集成显卡

我的配置步骤

1. BIOS 设置

我在 BIOS 的 Advanced > CPU Configuration 下启用了 VT-d。这很关键 - 没有它,什么都不会工作。

2. GRUB 配置

这是我在系统的 /etc/default/grub 中添加的内容:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

然后更新 GRUB:

update-grub

注意:如果你有 AMD CPU,使用 amd_iommu=on

3. 加载 VFIO 模块

编辑 /etc/modules

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd

4. 黑名单 GPU 驱动

创建 /etc/modprobe.d/blacklist.conf

blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist nvidia_drm

5. 更新 initramfs

update-initramfs -u -k all

验证 IOMMU 组

重启后,检查 IOMMU 组:

#!/bin/bash
for d in /sys/kernel/iommu_groups/*/devices/*; do
    n=${d#*/iommu_groups/*}; n=${n%%/*}
    printf 'IOMMU Group %s ' "$n"
    lspci -nns "${d##*/}"
done

你的 GPU 应该在它自己的 IOMMU 组中,或者只与它的音频设备在一起。

虚拟机配置

  1. 在 Proxmox 网页界面添加 PCI 设备
  2. 如果 GPU 有音频,启用”All Functions”
  3. 将机器类型设置为 q35
  4. 在虚拟机配置中添加 hostpci0 行:
hostpci0: 0000:01:00,pcie=1,x-vga=1

常见问题

虚拟机启动时黑屏

  • 尝试在虚拟机内核参数中添加 video=efifb:off
  • 确保 Proxmox 主机有第二个 GPU

Windows 中的代码 43

  • 在虚拟机配置中添加 vendor-id:vendor-id=1234567890ab
  • 隐藏 KVM:args: -cpu host,kvm=off

性能差

  • 启用 MSI 中断
  • 对存储和网络使用 virtio 驱动
  • 固定 CPU 核心以获得更好性能

我的结果

配置好一切后,我现在运行着:

  • Windows 11 虚拟机用于游戏,约 95% 的原生 RTX 3080 性能
  • 带 CUDA 的 Ubuntu 虚拟机用于 AI/ML 实验
  • 大多数游戏稳定 4K 60+ FPS
  • 可以在虚拟机之间重新分配 GPU 而无需重启主机

这个设置已经稳定运行了几个月。

有用的资源

这些资源帮助我解决了问题:


最后更新:2025年11月 我的设置:Proxmox VE 8.1 + NVIDIA RTX 3080 状态:生产就绪且稳定