如何用 MIG(Multi-Instance GPU)切分 A100 并保证显存隔离?
解读
在国内互联网大厂或 AI 独角兽的面试里,这道题表面问“切分”,实则考察三件事:
- 是否亲手在生产环境用过 A100 + MIG 做显存隔离,而不是纸上谈兵;
- 是否能把 CUDA 驱动版本、NVML API、Kubernetes device-plugin、LLMOps 调度 串成闭环;
- 是否知道 显存隔离 ≠ 算力隔离,并能给出可观测、可回滚的兜底方案。
面试官通常会在你回答过程中追问“如果业务方把 40 GiB 模型误发到 20 GiB 实例怎么快速止损”,所以回答必须落地到“谁负责切、谁负责拦、谁负责报警”。
知识点
- 硬件前提:A100 必须为 PCIe 80 GB 或 SXM 80 GB,40 GB 版不支持 MIG;NVIDIA Ampere 架构 才带 MIG 单元。
- 软件栈:
- 驱动 ≥ 450.80.02,推荐 470+(国内阿里云 A100 裸金属镜像默认 470.161);
- CUDA Toolkit ≥ 11.4,且 nvidia-fabricmanager 版本与驱动严格对齐;
- nvidia-device-plugin for K8s ≥ 0.14.0 才支持
nvidia.com/mig-3g.20gb这类资源名。
- MIG 粒度:A100-80GB 最多 7 个 7g.10gb 实例,或 1 个 3g.40gb + 2 个 2g.20gb + 1 个 1g.10gb,显存与算力同时硬隔离,但 L2 cache 与内存带宽仍共享。
- 隔离级别:
- 显存隔离:由 GPU 内部 MMU-level partition 保证,ECC 错误也按实例隔离;
- 错误隔离:GPU 挂起只影响所在 GI(GPU Instance),其他 GI 继续跑;
- QoS 隔离:需额外打开 nvidia-smi -q -d SUPPORTED_CLOCKS 中的 exclusive 模式,否则高负载实例仍会挤占内存带宽。
- LLMOps 视角:
- 模型下发前:通过 OpenTelemetry + NVML API 实时采集
migDevice.memory.used / migDevice.memory.total; - 模型下发时:在 KubeRay 的
RayClusterCR 里声明nvidia.com/mig-3g.40gb: 1,Webhook 自动校验模型 size < 39 GiB; - 失败兜底:DCGM 检测 XID 43/48 立即触发 Pod 迁移 + MIG 实例销毁重建,防止“坏邻居”。
- 模型下发前:通过 OpenTelemetry + NVML API 实时采集
答案
步骤一:确认节点
nvidia-smi -q | grep "MIG Mode" # 输出 Enable
nvidia-smi mig -lgi # 列出可用 GI 实例
若返回 MIG mode: Disabled,需 重启节点 并在 grub 内核参数 加 nvidia-mig=1,国内阿里云、腾讯云裸金属均需在控制台“重启并启用 MIG”,单纯 modprobe 不生效。
步骤二:规划切分
以 3g.40gb 为例,先销毁默认 GI:
nvidia-smi mig -dci -gi 0
nvidia-smi mig -dgi -gi 0
再创建策略:
nvidia-smi mig -cgi 3,40,0 -gi 0
nvidia-smi mig -cci 3,40,0 -gi 0
此时 nvidia-smi -L 会看到 GPU-0: GPU-3g.40gb,UUID 以 MIG- 开头,显存 40 GiB 硬隔离。
步骤三:Kubernetes 暴露
- 给节点打标签
kubectl label node a100-mig-01 nvidia.com/mig.config=3g.40gb - 使用 nvidia-device-plugin 的
mig.strategy=mixed模式,自动生成 Extended Resourcenvidia.com/mig-3g.40gb: 1。 - 在 RayService 或 Triton InferenceServer 的 Pod spec 里直接声明:
无需再写 nvidia.com/gpu,否则调度器会冲突。resources: limits: nvidia.com/mig-3g.40gb: "1"
步骤四:持续监控
- 显存水位:通过 DCGM_FI_DEV_MEM_COPY_UTIL 结合 NVML nvmlDeviceGetMigDeviceInfoByHandle 拿到 migDevice.memory.used;
- 错误隔离:DCGM 检测 XID 43 时,自动调用 nvidia-smi mig -dci -gi X 销毁实例,并触发 K8s Pod 反亲和重调度;
- 回滚策略:若业务方误发 50 GiB 模型,Webhook 校验失败返回 403,并推送飞书/钉钉告警,30 秒内阻断上线。
通过以上四步,即可在 生产级 LLMOps 流水线 里完成 A100 的 MIG 切分,并保证 显存 100% 隔离、故障域最小化、可观测、可回滚。
拓展思考
- 多卡 MIG 混部:如果集群里既有 A100-80GB 又有 A30-24GB,A30 不支持 MIG,此时需设计 两级调度:
- 一级用 K8s scheduler extender 把 >30 GiB 模型路由到 A100-MIG;
- 二级用 Volcano gang scheduling 保证 张量并行 2×3g.40gb 落在同一 NUMA node,避免 QPI 跨路。
- 动态调整:国内直播电商大促场景,白天需要 7×1g.10gb 做批量图文生成,晚上需要 1×3g.40gb 做千亿模型推理,可写 CronJob 在 00:00 调用 nvidia-smi mig -cgi … 重切,配合 Cluster-Autoscaler 缩容空节点,整体成本下降 38%。
- 安全合规:金融客户要求 不同租户密钥隔离,**MIG 实例 UUID 可绑定到 vTPM 做 远程证明,结合 NVIDIA Confidential Computing 未来可做到 GPU 内存加密,目前国内仅阿里云 7 代裸金属支持预览版,面试时可作为技术预研亮点抛出。