普通Linux发行版无法直接实现vGPU切分,必须使用NVIDIA数据中心级GPU(如P40、A100等)、专用vGPU驱动、SR-IOV硬件支持及合法授权许可;消费级显卡即使刷BIOS也不支持。

不能直接用普通 Linux 发行版加开源驱动实现 vGPU 切分。vGPU 不是内核模块开关一开就能用的功能,它依赖 GPU 厂商提供的专用虚拟化驱动栈、宿主机固件支持(如 SR-IOV)、以及合法授权许可 —— 尤其对 NVIDIA 显卡,消费级 GeForce 卡默认被软件锁死,连 nvidia-gridd 都拒绝启动。
确认物理 GPU 是否支持 vGPU 硬件虚拟化
NVIDIA 官方只对数据中心级 GPU 开放完整 vGPU 支持,比如 P40、P100、A10、A100、L40、H100。RTX 4090、4080、3090 等消费卡即使刷了 Tesla BIOS,也缺乏硬件级 SR-IOV 引擎和 vGPU 调度单元,nvidia-smi -q -d vgpu 会直接报错或无输出。
- 运行
lspci -vv -s $(lspci | grep -i nvidia | head -n1 | awk '{print $1}') | grep -A10 "Capabilities.*SR-IOV",若无SR-IOV字样,说明硬件不支持 - 查 NVIDIA 官方文档的 Supported GPUs 表格,P40 属于支持列表,但必须搭配 GRID / vGPU 软件包(非普通 CUDA 驱动)
- AMD 的 MI210/MI300 系列支持 MxGPU,Intel Arc GPU 目前仅支持基本 VFIO 直通,无 vGPU 切分能力
Proxmox VE(PVE)中启用 vGPU 的关键步骤
PVE 本身不提供 vGPU 管理界面,所有操作都在宿主机命令行完成,且必须在安装完 NVIDIA vGPU 驱动后手动配置服务与设备策略。
- 加载必要内核模块:确保
/etc/modules包含vfio、vfio_iommu_type1、vfio_pci、vfio_virqfd,否则mdevctl无法注册中介设备 - 禁用
nouveau和drm_kms_helper:在/etc/modprobe.d/pve-blacklist.conf中加入两行,否则 vGPU 驱动初始化时会冲突失败 - 必须启用 IOMMU:在 GRUB 启动参数中添加
intel_iommu=on iommu=pt(Intel)或amd_iommu=on iommu=pt(AMD),重启后验证dmesg | grep -i iommu有“enabled”字样 - 安装的是
NVIDIA-GRID-Linux-KVM-*.run包,不是NVIDIA-Linux-x86_64-*.run;后者只能用于直通,无法创建mdev设备
创建并分配 vGPU 实例给 Ubuntu 22.04 虚拟机
vGPU 实例本质是 Mediated Device(mdev),由 nvidia-gridd 服务动态生成,每个实例对应一个 UUID,需手动绑定到 VM 的 PCI 设备节点。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 先运行
nvidia-smi -L确认物理 GPU 已识别,再执行ls /sys/bus/pci/devices/*/mdev_supported_types/,看到类似NVIDIA-xxx的子目录才表示 vGPU 模式已就绪 - 用
mdevctl define --auto或手动写 JSON 创建指定显存大小的 vGPU,例如 P40 的NVIDIA-A100-2Q(2GB 显存)或NVIDIA-P40-12Q(12GB)——注意 Q 是 vGPU 配置单位,不是 GB - 在 PVE WebUI 中编辑目标虚拟机配置,在
Options → Custom下添加:hostpci0: 0000:05:00.0,pcie=1,rombar=0,x-vga=0,其中0000:05:00.0是mdev设备的父 PCI 地址,不是物理 GPU 的地址 - Ubuntu 22.04 虚拟机内需安装
nvidia-driver-535或更高版本,并启用nvidia-fallback模式,否则nvidia-smi可能显示“no devices found”
常见失败现象与绕不过去的授权问题
即使所有配置都正确,nvidia-gridd 服务仍可能反复崩溃或拒绝生成 vGPU,最常被忽略的是许可证缺失 —— 这不是可跳过的步骤,而是硬性拦截点。
-
systemctl status nvidia-gridd显示 “Failed to initialize vGPU manager”,大概率是未部署有效 license 文件(/etc/nvidia/gridd.conf中FeatureType=1且LicenseFile路径错误) - 使用
vgpu_unlock工具虽能绕过消费卡限制,但它修改的是闭源驱动二进制,与 NVIDIA 官方支持完全脱钩,nvidia-smi可能误报显存、CUDA kernel 加载失败、或在负载突增时触发 watchdog 复位 - P40 卡在 vGPU 模式下不支持 NVENC 编码器共享,多个 VM 同时调用
ffmpeg -c:v h264_nvenc会争抢硬件编码单元,导致其中几个 VM 视频转码卡死
真正稳定的 vGPU 共享,核心不在脚本怎么写,而在于硬件选型是否合规、license 是否激活、以及对每个 vGPU 实例的显存/CUDA 核心配额是否有明确预期。没拿到 nvidia-gridd 的正常日志输出前,别急着往 VM 里装驱动。










