3.2 MIG 与时间切片 GPU 共享:把一块卡掰开用的取舍 读者学完这一节,应该能回答:「当我的 GLM-5.2 推理流量不够塞满一整块卡时,是用 MIG 硬切,还是用时间切片软共享?」——并且知道各自的雷区在哪。 第二章我们默认「一个 Pod 独占整卡」。这在显存和算力都吃紧的大模型推理里很合理,但现实往往是:大部分时候流量用不满一整块 A100,可又确实有若干个独立服务/租户要跑。 整卡独占太浪费,混部又怕互相打架。这一节就来讲「把一块 GPU 掰开用」的两条主流路径,以及我为什么常建议「推理服务优先别切」。 一、先问自己:你真的需要 GPU 共享吗 在动手切卡之前,先诚实回答三个问题: 单实例真的用不满一张卡吗? 如果 GLM-5.
读者学完这一节,应该能回答:「当我的 GLM-5.2 推理流量不够塞满一整块卡时,是用 MIG 硬切,还是用时间切片软共享?」——并且知道各自的雷区在哪。
第二章我们默认「一个 Pod 独占整卡」。这在显存和算力都吃紧的大模型推理里很合理,但现实往往是:大部分时候流量用不满一整块 A100,可又确实有若干个独立服务/租户要跑。 整卡独占太浪费,混部又怕互相打架。这一节就来讲「把一块 GPU 掰开用」的两条主流路径,以及我为什么常建议「推理服务优先别切」。
在动手切卡之前,先诚实回答三个问题:
我的主张很直接:推理服务(尤其是 GLM-5.2 这种吃显存的服务)默认整卡独占;只有「明显用不满 + 需要隔离 + 能容忍抖动」三者同时满足,才考虑共享。 大多数团队过早切卡,最后都在排奇怪的延迟问题。
MIG 是 NVIDIA A100 / H100 等数据中心卡的硬件能力,它把一块物理 GPU 在硬件层面切成多个「实例」,每个实例拥有独立的显存、缓存和算力切片,彼此强隔离——一个实例 OOM 不会拖垮另一个,调度器也保证算力配额。
MIG 的切片是固定的几个档位,不是任意比例。以 A100 80G 为例,常见切法:
注意「g」前面的数字就是算力切片比例。下面这张图展示一块 A100 怎么被 MIG 切成多个强隔离实例:
MIG 的优点:
nvidia.com/mig-2g.20gb 即可。MIG 的代价:
时间切片不切硬件,而是让多个 Pod 分时复用同一块卡。实现上通常借助 NVIDIA device plugin 的 time-slicing 配置,把一个物理 GPU 暴露成多个「虚拟 GPU」,多个 Pod 轮流上卡跑。
更细一层还有 MPS(Multi-Process Service):多个进程把 kernel 并发提交到同一个 context,减少上下文切换开销,适合「多个小负载都想低延迟」的场景。
时间切片的直观模型:
时间切片的优点:
时间切片的代价(也是主要雷区):
| 维度 | MIG 硬件切分 | 时间切片软共享 |
|---|---|---|
| 隔离强度 | 强(硬件级) | 弱(共享显存) |
| 算力保证 | 有固定配额 | 无,分时争抢 |
| 显存弹性 | 固定锁死 | 共享池,弹性但易 OOM |
| 配置复杂度 | 高(切档位、重启) | 低(改 config) |
| 适合场景 | 多租户强隔离、SLA 要求 | 开发测试混部、弹性闲时 |
| 对 GLM-5.2 推理 | 仅适合显存需求小的实例档 | 不推荐主推理,易抖动 |
我的结论:生产推理(尤其是 GLM-5.2 这种显存 + 算力双高)默认整卡独占;要隔离优先 MIG;时间切片只留给测试 / 低风险混部。 别用时间切片跑核心推理链路,那是延迟事故的温床。
无论 MIG 还是时间切片,落到 K8s 都是「Pod 申请 GPU 资源」这件事,但细节有别。
MIG 落地:
nvidia-smi mig 或 GPU Operator 的 MIG 策略创建实例档位。nvidia.com/mig-3g.40gb 这类资源暴露给调度器。resources.limits 写对应的 MIG 资源名,而非 nvidia.com/gpu。--tensor-parallel-size 设为 1(MIG 实例内无法再跨实例并行),--gpu-memory-utilization 按该实例显存档位(如 40G)重新换算。时间切片落地:
time-slicing.replicas(如 4)。nvidia.com/gpu,调度器把它们挤到同一张卡分时跑。下面这张图对比两种路径在 K8s 调度里的资源形态:
把前面的原则落到三个你一定会遇到的真实决策上。
决策 1:一块 A100 要同时跑 GLM-5.2 推理 + 一个轻量 embedding 模型,怎么分?
embedding 模型显存小、算力轻、延迟不敏感。正确做法不是时间切片硬挤,而是用 MIG 把卡切成 3g.40gb(给 GLM-5.2)+ 剩余给 embedding 实例,强隔离保证推理不被 embedding 拖。若 embedding 显存需求极小(如 < 10G),也可切 1g.10gb 给它,主推理占 7g.80gb 满血跑。
决策 2:开发环境 8 个人共用 2 块卡做 GLM-5.2 调试,怎么配?
调试流量低、容忍抖动、要弹性。这里时间切片最合适:每块卡 time-slicing.replicas=4,8 个人每人一个 Pod 分时跑,显存共享池弹性利用,配置还简单。千万别上 MIG——8 个固定小档位既浪费又不够灵活。
决策 3:生产要接两个外部租户的 GLM-5.2 推理,SLA 不同,怎么隔离?
租户间强隔离 + SLA 要求 = MIG。按两租户各自的 3.1 显存公式选档位,各自独占实例,互不影响。时间切片在这里是事故源头,绝对不用。
下面这张图把三个决策对应到路径:
resources.limits 的 GPU 申请方式,正是本节 MIG / 时间切片落地的最末端——你在 2.2 写的 nvidia.com/gpu: 1,换成 MIG 就是 nvidia.com/mig-3g.40gb: 1。所以「GPU 共享」不是孤立一章,它直接改写你第二章 Deployment 的资源声明。改共享策略前,务必回头同步 2.2 的 limits 写法。
共享 GPU 最怕「看不见」。无论 MIG 还是时间切片,上线后这几条必须进监控:
nvidia.com/gpu 申请数 vs 物理卡数,防止 device plugin 配置错误导致的静默超卖。我的经验:时间切片上线的第一周,每天看一次 P99 延迟分布,确认抖动在可接受区间;MIG 上线则重点看各实例显存是否「切太大导致浪费」或「切太小导致起不来」。监控不到位就上共享,等于蒙眼开车。
tensor-parallel-size 按卡数设。nvidia.com/gpu 用量、MIG 实例健康、以及共享场景下的 P99 延迟抖动。最后说一个容易被忽略的隐性成本:切换共享策略不是改个 YAML 就完事。
nvidia-smi mig -cgi ... 重新创建实例,期间该节点 GPU 上的 Pod 必须驱逐,等于一次节点维护窗口。在生产集群里,这意味着要申请变更、挑低峰、走审批。所以决策时要把「将来会不会改」也算进去:如果你预判 3 个月内租户会扩,MIG 档位选太死后面迁移成本高;时间切片则灵活得多。我的做法是用 MIG 给「稳定、长生命周期」的隔离负载,用时间切片给「还在试、会变」的负载,让运维代价和负载稳定性匹配。
resources.limits 写法。把这几条贴在工位上,90% 的 GPU 共享选型争论都能当场拍板。
把一块卡掰开用,本质是「隔离 vs 弹性」的权衡:MIG 用固定档位换强隔离和算力保证,时间切片用共享池换弹性却牺牲隔离、引入抖动。对 GLM-5.2 这类吃显存又吃算力的推理,我的建议是「主链路整卡独占,隔离需求上 MIG,时间切片只用在测试和闲时」。这一节和 3.1 的显存公式合起来,就是你做 GPU 容量决策的全部依据。
下一章我们进入实战案例:怎么用压测摸清这块卡的真相、怎么做灰度、怎么把推理服务真正生产化。