服务器GPU虚拟化为什么重要
AI推理和训练场景中,GPU是核心算力资源。单台服务器搭载4-8张GPU卡,如何将算力灵活分配给多个虚拟机或容器,是数据中心资源调度的关键问题。服务器GPU直通(Passthrough)将整张物理卡独占分配给虚拟机,vGPU切分则将一张物理卡虚拟为多张逻辑卡,供多个租户共享。两种模式分别适用于不同负载,KVM环境下通过VFIO和mediated设备实现。
GPU直通(Passthrough)配置流程
直通模式适合需要完整GPU算力的场景,如大模型训练。前提条件:主板和CPU支持IOMMU(Intel VT-d或AMD-Vi),BIOS中已启用。配置步骤如下。
第一步,启用IOMMU。在GRUB配置中添加内核参数:
GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt"
对于AMD CPU替换为:amd_iommu=on iommu=pt
更新GRUB并重启:
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
第二步,验证IOMMU分组。使用脚本检查IOMMU分组是否隔离良好:
for g in /sys/kernel/iommu_groups/*; do
echo "IOMMU Group ${g##*/}:"
for d in $g/devices/*; do
echo -e "\t$(lspci -nn -s ${d#*/})"
done
done
如果GPU和其他设备在同一IOMMU组,需要添加vfio-pci驱动绑定并使用ACS override补丁(生产环境慎用)。
第三步,绑定VFIO驱动。获取GPU的PCI地址和设备ID:
lspci -nn | grep -i nvidia
# 示例输出: 01:00.0 VGA [0300]: NVIDIA AD102 [10de:2620]
# 设备ID: 10de:2620
绑定VFIO驱动:
echo "options vfio-pci ids=10de:2620" > /etc/modprobe.d/vfio.conf
dracut --force
reboot
第四步,在libvirt虚拟机配置中添加直通设备:
<hostdev mode="subsystem" type="pci" managed="yes">
<source>
<address domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
</source>
<rom bar="on"/>
</hostdev>
启动虚拟机后安装NVIDIA驱动,执行nvidia-smi验证GPU可用。
vGPU切分(MIG与Mediated vGPU)
当多个轻量级推理任务共享一张GPU时,需要切分。NVIDIA提供两种方案:MIG(Multi-Instance GPU)和vGPU(Mediated vGPU)。
MIG适用于Ampere及更新架构(A100/A30/H100),在硬件层面切分GPU为多个隔离实例:
sudo nvidia-smi -i 0 -mig 1
sudo nvidia-smi mig -cgi 1g.5gb,1g.5gb,2g.10gb -C
上述命令在GPU 0上创建3个MIG实例:两个1g.5gb和一个2g.10gb。每个实例拥有独立的SM和显存,互不干扰。虚拟机通过VFIO mediated设备接入:
virsh nodedev-create mig-instance-0
MIG的限制是切分方案受硬件约束,A100最多7个1g.5gb实例,不支持跨切分规格混搭。
对于非Ampere架构GPU,NVIDIA vGPU方案通过mdev机制切分。在宿主机安装vGPU Manager,创建vGPU类型:
# 查看支持的vGPU类型
mdevctl types
# 创建vGPU实例
mdevctl start -u $(uuidgen) -p 0000:01:00.0 -t nvidia-35
nvidia-35对应4GB显存的vGPU配置。每个vGPU实例作为mdev设备挂载到虚拟机,虚拟机内部安装vGPU Guest驱动即可使用。
GPU资源分配的性能开销对比
直通模式性能损失最小,虚拟机独占整卡,开销在1%-3%之间。MIG模式由于硬件级隔离,性能损耗约5%-8%,但隔离性好,适合多租户生产环境。vGPU mediated模式开销较大,约10%-15%,因中间层需要做显存和指令调度,但灵活度最高,支持旧架构GPU。实际选择需根据业务场景:训练任务必须直通,推理服务可用MIG切分,开发测试环境用vGPU最经济。
常见故障与排查
GPU直通后虚拟机启动黑屏:检查是否遗漏ROM BAR配置,部分GPU需要将VBIOS映射到虚拟机。执行rombar="on"配置,或手动提取VBIOS文件注入虚拟机。vGPU创建失败报错"No remaining capacity":说明该GPU上已分配的vGPU实例已占满资源,需检查当前分配情况nvidia-smi vgpu并释放不再使用的实例。MIG实例无法被虚拟机识别:确认虚拟机配置中mdev UUID与已创建实例一致,且libvirt版本支持mdev管理(4.4.0以上)。驱动版本不匹配也是常见原因,宿主机vGPU Manager版本必须与Guest驱动版本严格对应。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/fu-wu-qi-gpu-zhi-tong-yu-vgpu-qie-fen-pei-zhi-shi-zhan-kvm/