1. 课程导入:GPU虚拟化与资源隔离的背景、目标、学习路径

1.1 为什么需要GPU虚拟化:从独占到共享的必然演进

在深度学习、科学计算与云游戏等场景中,GPU已成为最昂贵的计算资源之一。早期GPU以物理卡为单位被单一进程或单一容器独占,这种模式带来三个尖锐问题:利用率低下(推理任务往往只占用GPU 10%~30%的算力)、成本高昂(A100/H100等高端卡单价数万元至数十万元)、管理僵化(无法像CPU那样按需弹性切分)。GPU虚拟化的核心动机,就是打破“一卡一任务”的物理绑定,让一块GPU能够安全、高效地服务于多个租户或多个工作负载。

从技术演进看,GPU虚拟化经历了四代路径:

  • API转发层虚拟化:拦截CUDA/OpenCL调用并重定向到物理GPU,如早期rCUDA,兼容性好但性能损耗高。
  • 直通与分区虚拟化:通过PCIe SR-IOV或MIG(Multi-Instance GPU)将物理GPU划分为多个独立实例,隔离性强但粒度受限。
  • 全虚拟化与中介直通:如NVIDIA vGPU,由Hypervisor中的VGPU Manager统一调度,兼顾性能与共享。
  • 时间片与多进程服务(MPS/MPS改进):在软件层实现细粒度算力切分,适合推理等短任务场景。
核心矛盾:GPU虚拟化不是“免费午餐”——每一次抽象都会引入性能开销或隔离边界。本课程将围绕“如何切、如何隔、如何调度、如何度量”四条主线展开。

1.2 资源隔离的本质:算力、显存与故障域的三重边界

GPU资源隔离远比CPU复杂,因为GPU的硬件架构是大规模并行多核,且显存带宽与计算单元紧密耦合。隔离必须覆盖三个维度:

  1. 算力隔离(SM/流处理器分区):限制某容器可用的SM数量或计算占比,防止一个任务占满所有CUDA核心。
  2. 显存隔离(帧缓冲分区):为每个实例分配独立的显存地址空间,防止越界读写或显存耗尽导致OOM。
  3. 故障域隔离(错误传播边界):当某个实例发生ECC错误或驱动崩溃时,不能影响同卡其他实例。

下表对比了当前主流GPU虚拟化技术的隔离粒度与适用场景:

技术方案 隔离粒度 算力切分 显存隔离 典型场景
NVIDIA MIG 硬件级(A100/H100) 固定SM切片 独立显存通道 多租户训练、推理隔离
NVIDIA vGPU(SR-IOV) 硬件辅助虚拟化 时间片+显存配额 显存分区 VDI、云桌面
CUDA MPS 进程级(软件) 并发调度控制 共享显存(无隔离) 小任务并发、批处理
容器+GPU插件 设备插件级 整卡分配 整卡显存 Kubernetes简单调度
常见误区:很多人认为“显存隔离=显存配额限制”。实际上,真正的隔离还需要防止带宽抢占——即使显存地址不重叠,一个高带宽需求的实例也可能通过内存控制器争抢导致邻居性能骤降。这是MIG与vGPU在硬件设计上的关键差异。

1.3 课程学习路径:从原理到排障的四阶段设计

本课程共30章,按认知逻辑分为四个阶段。每个阶段都配有动手实验与故障案例,确保“知其然更知其所以然”。

阶段一:基础原理(第1~8章)——聚焦GPU硬件架构(SM、显存层次、PCIe拓扑)、虚拟化技术谱系、隔离模型与性能开销来源。学完本阶段,你将能画出GPU虚拟化栈的完整数据通路。

阶段二:主流技术实践(第9~18章)——深入NVIDIA MIG配置、vGPU部署、AMD MxGPU、容器运行时(containerd+GPU插件)、Kubernetes设备扩展等。每章均包含nvidia-smi、mig-parted等真实命令演示。

阶段三:资源调度与度量(第19~25章)——解决“切好了怎么分”的问题:多租户调度策略、GPU共享与抢占、可观测性指标(DCGM)、成本核算模型。此阶段会引入实际调度器源码片段分析。

阶段四:排障与优化(第26~30章)——覆盖显存泄漏定位、MIG实例故障恢复、vGPU性能抖动排查、多卡通信(NVLink)瓶颈分析等真实生产案例。

# 本课程推荐的实验环境(最低配置)
# 硬件:1台NVIDIA A100或RTX 4090服务器
# 软件:Ubuntu 22.04 + CUDA 12.x + Docker + Kubernetes 1.28
# 验证MIG是否可用:
nvidia-smi -mig 1
nvidia-smi mig -lgi

1.4 典型场景复盘:一个真实的企业级GPU共享案例

某AI公司有8张A100(80GB),需要同时运行:3个中型训练任务(每个需30GB显存)、12个在线推理服务(每个需4GB显存且延迟敏感)、若干开发调试容器。若不做虚拟化,只能按物理卡分配——3个训练任务占3张卡,12个推理服务挤在2张卡上(显存不足),开发容器无卡可用。

采用MIG+时间片组合方案后:

  • 将其中4张A100各切分为2个实例(每实例40GB显存,约50%算力),满足3个训练任务+1个备用。
  • 剩余4张卡启用vGPU模式,每张卡分出6个2GB显存的实例,承载12个推理服务。
  • 开发容器使用MPS共享剩余算力,限制占用不超过20%。

最终GPU整体利用率从37%提升至82%,推理P99延迟仅增加4%。但过程中也暴露了问题:MIG实例的显存带宽隔离并不完美,当训练任务全速写入时,同卡推理实例的延迟抖动达到15%。这促使团队在调度层增加了带宽感知的优先级策略——这正是本课程第23章要深入讲解的内容。

学习建议:每章结束后,请用“三个一”方法复盘:画一张架构图、写一段配置命令、记录一个排障日志。GPU虚拟化是实践性极强的领域,只看不练等于没学。

1.5 本节要点与自测清单

在进入第2章“GPU硬件架构与虚拟化基础”之前,请确认你已理解以下核心概念:

  • GPU虚拟化的四大技术路径及其性能/隔离权衡。
  • 算力隔离、显存隔离、故障域隔离三者的区别与联系。
  • MIG、vGPU、MPS三种主流方案的适用边界。
  • 本课程四个学习阶段的内容划分与实验环境要求。
GPU虚拟化与资源隔离全景图 应用层(训练任务 / 推理服务 / 开发容器 / 云桌面) CUDA · OpenCL · Vulkan · 自定义框架 虚拟化技术层(本课程核心) NVIDIA MIG 硬件级SM/显存切片 A100/H100 · 强隔离 NVIDIA vGPU SR-IOV · 时间片+配额 VDI · 多租户 CUDA MPS 进程级并发控制 共享显存 · 软隔离 容器+插件 整卡分配 K8s Device Plugin 物理GPU硬件资源池 SM 0~15 SM 16~31 SM 32~47 SM 48~63 显存 带宽 NVLink 隔离维度: 算力隔离(SM) 显存隔离(帧缓冲) 故障域隔离 带宽隔离(防抢占) 第1章:课程导入 · 明确GPU虚拟化的技术坐标与学习路径 MIG硬件切片 → vGPU时间片 → MPS进程并发 → 容器整卡分配