MIG 与算力切分:一张 A100/H100 如何服务多个租户
· 3 min read
GPU 共享有三档武器:时间片轮转最粗放,MPS 提升并发但不隔离,MIG 用硬件分区做到故障与安全双重隔离。多租户场景选错方案,轻则性能抖动,重则数据串租户。
三种切分方式的本质区别
| 方式 | 隔离级别 | 显存保证 | 故障隔离 | 适用场景 |
|---|---|---|---|---|
| 时间片(Time-Slicing) | 仅时间维度 | 无 | 无 | 开发测试、低风险负载 |
| MPS | 进程级 | 无硬保证 | 弱 | 同租户多进程提吞吐 |
| MIG | 硬件分区 | 有,独立显存带宽与 L2 | 有 | 生产多租户、合规场景 |
MIG(Multi-Instance GPU)把一张物理 GPU 切成多个独立实例,每个实例拥有专属的 SM、显存、显存带宽与 L2 缓存。租户之间互不干扰:一个实例上的进程崩溃不会波及其他实例,显存争抢与噪声邻居问题从硬件层面消除。A100、A30、H100 均支持,是当前数据中心级切分的唯一硬件方案。
MIG 档位规划
以 A100 80GB 为例,官方 profile 如下:
| Profile | 显存 | SM 占比 | 每卡最多实例数 |
|---|---|---|---|
| 1g.10gb | 10GB | 7 分之 1 | 7 |
| 2g.20gb | 20GB | 7 分之 2 | 3 |
| 3g.40gb | 40GB | 7 分之 3 | 2 |
| 7g.80gb | 80GB | 全卡 | 1 |
实践中的黄金档位是 1g.10gb 与 3g.40gb:前者把一张卡切成七份跑 7B 以下小模型的推理或开发环境,是 2025 年以来最常用配置;后者一份 40GB 足够中等模型微调。切分是静态的,改 profile 需要排空节点上的负载,规划节点池时最好按租户画像把"全跑 1g"与"全跑 3g"的机器分开。
在 Kubernetes 上落地
NVIDIA GPU Operator 让 MIG 管理近乎自动化:给节点打上 nvidia.com/mig.config 标签(如 all-1g.10gb),MIG Manager 自动完成切分,device plugin 随后把实例以独立资源上报。租户侧的 Pod 只需在 resources.limits 里申请对应档位,例如请求一个 nvidia.com/mig-1g.10gb 资源单元。集群若要混合全卡与切分卡,用 mixed 策略即可让部分 GPU 保持完整模式。监控侧用 GPU Operator 自带的 DCGM Exporter 暴露利用率、显存与 XID 错误指标,接 Prometheus 做租户级报表。
实操建议
- 先做租户画像:统计各业务的模型显存占用与时延要求,再定档位,避免切成 1g 后发现核心业务挤不进去。
- 时间片与 MIG 二选一为主:给稳定性敏感的生产负载用 MIG,给弹性开发环境用时间片,通过节点池隔离。
- 注意限制:切分后单实例算力上限固定,大模型推理放不进 40GB 就只能走全卡或多卡。
- 财务口径上把每个 MIG 实例当作独立计费单元,配额与报表都按实例粒度管理,才能真正把切分省下的成本落到账上。