GPU 资源切分实战:MIG、vGPU 与多租户共享
场景:多租户集群里最常见的浪费——一张 A100 90% 的时间利用率不到一半:训练作业间歇性吃满,推理作业只占 10% 显存。GPU 资源切分解决"一张卡怎么分给多个人/多个作业",是 Slurm 异构调度 的下一层:那篇讲"整卡怎么分给作业",本篇讲"一张卡怎么切"。
1. 三种切分路线
| 路线 | 原理 | 隔离强度 | 适用 |
|---|---|---|---|
| MIG(硬件切分) | A100/H100 把 GPU 物理切为多个实例,算力+显存硬隔离 | 最强(近乎独立 GPU) | 训练/推理混布、安全敏感多租户 |
| vGPU(虚拟化切分) | NVIDIA vGPU Manager 把物理 GPU 虚拟化为多张 vGPU | 中(显存隔离,算力共享或限流) | 虚拟桌面/轻负载多租户 |
| 软切分(显存/时间片) | 容器化 + CUDA 限制(如显存上限、MPS 时间片) | 弱(共享算力,易互相干扰) | 测试环境、低成本共享 |
一句话:要"真隔离"选 MIG;要"灵活轻量"选软切分;vGPU 介于两者且依赖虚拟化平台(vSphere/OpenStack)。
2. MIG 详解(重点)
2.1 什么是 MIG
MIG(Multi-Instance GPU)在 A100/H100(Ampere+ 架构)上把 GPU 切成多个计算+显存物理隔离的实例,每个实例近似独立 GPU:
A100-80G 常见切法示例
┌──────────────────────────────┐
│ MIG 2g.20gb MIG 2g.20gb │ ← 2 个小实例
├──────────────────────────────┤
│ MIG 3g.40gb │ ← 1 个中实例
├──────────────────────────────┤
│ MIG 7g.80gb │ ← 整卡单实例
└──────────────────────────────┘2.2 关键特性与约束
- 算力+显存双隔离:一个实例 OOM/崩溃不影响其他实例——这是软切分做不到的;
- 实例组合有约束:单卡同时活跃的实例组合由 GPU 规格决定(如 1g/2g/3g/4g/7g 档位),不能任意搭配;
- NCCL 通信限制:MIG 实例间通信走 PCIe/网络而非 NVLink 全带宽——数据并行跨实例性能差,MIG 实例间不适合做张量并行;
- 驱动/容器要求:需 NVIDIA 容器运行时 + 驱动支持 MIG 的版本;不同实例可跑不同 CUDA 版本(容器化)。
2.3 典型用法
| 场景 | 切法建议 |
|---|---|
| 推理服务多副本 | 1g/2g 小实例 × N,各自跑一个 vLLM 副本 |
| 小训练作业 | 3g/4g 中实例,多租户各自训练 |
| 关键大作业 | 7g 整卡实例,独占保障 |
3. Slurm 集成:MIG 与 gres
Slurm 23.02+ 原生支持 MIG 的 gres 声明。配置要点:
# slurm.conf 中声明 MIG 能力
NodeName=gpu01 Gres=gpu:8,mig:2g.20gb:4,mig:3g.40gb:2
# 作业按 MIG 实例申请
#SBATCH --gres=mig:2g.20gb:1工程要点:
- 普通作业申请
gpus会占用整卡 gres,与 MIG 作业互斥——用独立分区/独立 gres 词区分整卡与切分作业; - MIG 实例的"健康检查"比整卡复杂(实例级别故障检测),调度器与监控都要按实例维度做;
- 混布时按 Slurm 异构调度 的"按节点分型"原则:整卡节点、MIG 节点分开规划,避免两类作业在节点上互踩。
4. 踩坑与调优(实战经验)
MIG 不是万能药:大模型训练(70B+ 多卡并行)几乎必须整卡 + NVLink;硬切反而降低通信带宽。切分服务的是"小作业+推理+多租户",不是"大训练"。
显存隔离 ≠ 性能隔离(软切分路线):时间片/软显存限制下,一个忙作业能把同卡其他租户拖慢数倍——软切分只适合低敏场景,生产多租户优先 MIG。
故障域是隐性成本:MIG 依赖整卡硬件,整卡故障 = 卡上所有实例一起挂;"实例间隔离"是运行时隔离,不是硬件冗余。关键服务仍需跨物理卡部署副本。
MIG 与 NCCL 的坑:跨实例 NCCL 走低速路径,混合并行(实例内并行 + 跨实例通信)性能断崖。设计并行方案时先确认通信路径,别指望 MIG 实例间有 NVLink 全速。
驱动升级影响实例拓扑:MIG 的实例档位、组合与驱动强绑定,升级驱动要重验实例配置并滚动验证作业——升级窗口当停机维护管理。
5. 效果量化与复盘
| 指标 | 参考口径 |
|---|---|
| 利用率提升 | 单卡从 ~40% 提升到 ~70~85%(切分 + 背压调度) |
| 多租户数 | 一张 A100-80G 可同时服务 2~7 个隔离租户(按实例档位) |
| 隔离保证 | 算力/显存硬隔离,实例崩溃不影响同卡其他实例 |
| 代价 | NVLink 跨实例不可用、配置与运维复杂度上升 |
口径说明:以上为工程经验量级,实际收益以自家作业画像(作业大小分布、峰值特征)为准——先统计作业大小分布,再决定要不要切。
复盘结论:GPU 切分是"用运维复杂度换利用率"。作业画像以小作业/推理为主 → MIG 收益明显;以大训练为主 → 整卡 + 调度背压更合适。没有切分方案,只有适不适合的作业画像。
工程启示
- GPU 切分是 Slurm 异构调度 的纵深:那篇解决"卡怎么分配",本篇解决"卡怎么切细"——合起来才是完整的异构资源管理;
- 与 13 章 · 私有化 LLM 服务 强相关:推理多副本 + MIG 小实例是私有化服务降低成本的标准组合;
- 资源切分之外,异构集群的"体检"(利用率、排队、故障)是运维基本功——下一步可规划《异构集群监控与作业效率分析》。