AI服务器GPU vGPU配置:让虚拟机共享显卡的实操步骤
vGPU 解决的是“多台虚拟机怎么共享一块物理 GPU”的问题。
它和 GPU 直通不同:直通是一台虚拟机独占整卡,vGPU 则把物理 GPU 切分成多个虚拟 GPU,按实例分配给不同虚拟机。
配置前必须先确认显卡型号在 NVIDIA vGPU 支持列表中,并且已经获得对应授权,否则驱动能装、虚拟机也能启动,但虚拟 GPU 无法正常工作。
先分清 vGPU 和直通,确认适用条件
vGPU 适合开发测试、虚拟桌面和小模型推理这类需要多租户隔离、但单任务显存需求不高的场景。
如果业务需要整卡算力,直接用 PCI 直通更简单,不必引入 vGPU 授权和驱动复杂度。
动手前逐项确认:
- 物理 GPU 支持 vGPU,且服务器 BIOS 已开启 VT-d 和 SR-IOV(如显卡要求)。
- 宿主机是 64 位 Linux,内核和 KVM/libvirt 已就绪。
- 已从 NVIDIA 获取 vGPU Manager 驱动包和客户机驱动包,并持有有效授权。
- 宿主机不加载普通 GPU 计算驱动,vGPU Manager 会接管物理卡。
宿主机安装 vGPU Manager 驱动
先停掉占用 GPU 的服务,卸载已有的 NVIDIA 驱动:
systemctl stop nvidia-persistenced 2>/dev/null
/usr/bin/nvidia-uninstall -s 2>/dev/null || true
安装与当前内核匹配的 vGPU Manager 驱动(包名随版本不同,以实际获取的包为准):
chmod +x NVIDIA-Linux-x86_64-*-vgpu-kvm.run
./NVIDIA-Linux-x86_64-*-vgpu-kvm.run --dkms -s
装完后确认物理卡被识别,且驱动模式为 vGPU:
nvidia-smi
nvidia-smi vgpu -q
如果 nvidia-smi 能列出 GPU 但 vgpu 子命令报错,通常是驱动包不是 vGPU Manager 版本,需要换包重装。
在 libvirt 中挂载 mdev 设备
vGPU 在 Linux 下通过 mediated device(mdev)暴露给虚拟机。
先查看可创建的实例类型:
ls /sys/bus/pci/devices//mdev_supported_types/
cat /sys/bus/pci/devices//mdev_supported_types/nvidia-/description
用 lspci 查到的 PCI 地址替换,nvidia- 是实例类型编号。
创建 mdev 设备并记录 UUID:
UUID=$(uuidgen)
echo $UUID > /sys/bus/pci/devices//mdev_supported_types/nvidia-/create
然后在虚拟机的 XML 中加入 hostdev 段,把该 mdev 设备挂给虚拟机:
保存后重启虚拟机。
注意 mdev 设备生命周期与虚拟机绑定,虚拟机销毁后需要重新创建,生产环境建议用管理平台或脚本统一维护。
客户机安装驱动并验证
进入虚拟机后安装对应版本的 NVIDIA 客户机驱动(GRID/vGPU 客户机驱动),重启后执行:
nvidia-smi
能列出虚拟 GPU 型号、显存和驱动版本,说明链路通了。
再跑一个简单 CUDA 示例或 nvidia-smi -q 查看授权状态,确认没有授权报错。
验证时重点看三处:宿主机 nvidia-smi vgpu 是否显示实例运行中;
虚拟机内 nvidia-smi 是否识别到卡;
业务进程能否正常分配显存。
三者缺一,按驱动版本、mdev 绑定、授权顺序排查。
常见报错和避坑点
- 虚拟机启动报 vfio 错误:检查 mdev UUID 是否仍存在,宿主机是否加载
vfio_mdev模块。 - 客户机 nvidia-smi 报授权失败:确认 vGPU 授权服务可达、授权类型与实例匹配,不要用计算卡驱动替代 vGPU 客户机驱动。
- 宿主机普通驱动和 vGPU Manager 混装:两者会冲突,切换前先彻底卸载。
- 实例类型选错:不同 ID 对应不同显存规格,选大了会挤占其他虚拟机资源。
vGPU 配置的关键不在命令多少,而在显卡支持、授权到位、驱动版本三方一致。
按本文顺序做完后,用宿主机和虚拟机两侧的 nvidia-smi 结果交叉验证,再接入业务负载,能避免大部分“装完不能用”的问题。