AI服务器vGPU配置:让多台虚拟机共享一块物理GPU
vGPU 不是把物理 GPU 直接直通给一台虚拟机,而是让多台虚拟机按显存切片共享同一块物理 GPU。
动手前必须先确认显卡型号在 NVIDIA vGPU 支持列表内,并且宿主机已经装好虚拟化平台。
下文以 KVM/libvirt 环境为例,说明从条件核对到虚拟机验证的完整流程。
先核对硬件和软件前提
不是所有 NVIDIA GPU 都支持 vGPU。
消费级 GeForce 卡通常不支持,数据中心卡如 A100、H100 对 vGPU 的支持情况也要按具体型号和驱动版本查官方支持矩阵。
你需要确认三件事:
- 物理 GPU 型号出现在当前 vGPU 版本的 supported GPU 列表中;
- 宿主机操作系统版本与 vGPU Manager 驱动匹配;
- 虚拟化平台已启用 IOMMU,KVM 能识别 GPU 的 PCI 地址。
在宿主机上先确认 GPU 和 IOMMU 状态:
lspci | grep -i nvidia
# 输出中应能看到 GPU 的 PCI 地址,如 3b:00.0
dmesg | grep -e DMAR -e IOMMU
# 看到 DMAR: IOMMU enabled 才表示 IOMMU 已开启
如果 IOMMU 未开启,
需要在 GRUB 启动参数中加入 intel_iommu=on iommu=pt(Intel 平台)或 amd_iommu=on iommu=pt(AMD 平台),
更新 grub 后重启再复查。
宿主机侧安装 vGPU Manager
vGPU 的宿主机驱动和普通 GPU 驱动不是同一个包。
你需要从 NVIDIA 许可渠道获取对应版本的 vGPU Manager 驱动,安装后确认内核模块加载成功:
# 安装 vGPU Manager 驱动包(文件名以实际下载为准)
./NVIDIA-Linux-x86_64-<版本>-vgpu-kvm.run --silent
# 检查模块
lsmod | grep nvidia
nvidia-smi
nvidia-smi 能正常输出 GPU 信息,且驱动版本与 vGPU 版本对应,宿主机侧才算就绪。
此时不要急着给虚拟机分配 vGPU,先在 virt-manager 或 virsh 中确认 GPU 的 PCI 设备能被 libvirt 识别。
为虚拟机分配 vGPU 类型
在 libvirt 中,vGPU 通过 的 mdev 方式挂载。
先列出宿主机上可用的 vGPU 类型:
# 查看 mdev 设备
ls /sys/bus/pci/devices//mdev_supported_types/
每个目录对应一种 vGPU 规格,例如 nvidia-,数字大小对应显存切片。
编辑虚拟机 XML,加入类似配置:
UUID 需要先通过 uuidgen 生成,然后写入对应类型的 create 文件:
echo > /sys/bus/pci/devices//mdev_supported_types/nvidia-/create
启动虚拟机后,在虚拟机内执行 lspci | grep -i nvidia 应能看到 NVIDIA 设备。
虚拟机内安装 Guest 驱动
虚拟机里的驱动要和宿主机 vGPU Manager 版本对应,否则会出现设备识别异常或驱动加载失败。
在虚拟机内安装对应的 vGPU Guest 驱动,安装完成后运行:
nvidia-smi
能列出 vGPU 型号和显存容量,说明虚拟机侧配置成功。
如果 nvidia-smi 报 “No devices were found”,优先检查宿主机 vGPU Manager 版本与 Guest 驱动版本是否匹配,以及虚拟机 XML 中 mdev 地址是否写对。
常见坑和验证方式
- 驱动版本不匹配:宿主机 vGPU Manager 与虚拟机 Guest 驱动主版本不一致时,虚拟机内可能黑屏或驱动拒绝加载。升级前先查兼容表。
- IOMMU 未生效:忘记更新 grub 或未重启,
dmesg中看不到 IOMMU enabled,vGPU 无法分配。 - 显存切片超分:同一块 GPU 创建的 vGPU 实例总显存不能超过物理显存,规划时留出余量。
- 许可证问题:部分 vGPU 功能需要 NVIDIA 授权服务,未配置许可时性能或功能可能受限。
验证时建议在虚拟机内跑一次 nvidia-smi -q 查看 vGPU 类型和显存,并实际运行一个轻量 CUDA 程序确认计算可用。
多台虚拟机同时启动后,再回宿主机执行 nvidia-smi 查看各实例占用,确认没有实例创建失败。
整个流程的关键顺序是:先确认硬件支持,再装宿主机 vGPU Manager,然后创建 mdev 并挂给虚拟机,最后在虚拟机内装匹配的 Guest 驱动。
任何一步版本对不上,后面的验证都会失败。