NVIDIA MIG 多实例 GPU Kubernetes 进阶运维指南
深入讲解 NVIDIA Multi-Instance GPU(MIG)在 Kubernetes 集群中的配置策略、Single/Mixed 模式实战、GPU Operator 自动化管理与多租户隔离最佳实践。
NVIDIA Multi-Instance GPU(MIG)自 A100/H100 系列开始支持,可将一块物理 GPU 硬件切分为最多 7 个完全隔离的实例,每个实例拥有独立的显存、计算引擎、缓存与带宽配额。在 LLM 推理、批量实验、多租户 AI 平台场景中,MIG 是比时间片(Time-Slicing)更强隔离性的选择。
为什么需要 MIG
时间片共享(Time-Slicing)允许多个 Pod 分时复用同一块 GPU,但没有显存隔离——任何 Pod OOM 都会影响同卡其他任务。MIG 在硬件层实现切分,每个 MIG 实例的显存、SM 与 L2 缓存完全独立,实例间互不干扰,适合以下场景:
- 多租户 AI 平台:不同团队/业务方共享同一 GPU 节点,需要严格隔离
- 推理服务混部:小模型推理(7B 以下)不需要整卡,MIG 大幅提升硬件利用率
- 训练与推理并行:同一节点上的大实例跑训练,小实例承接在线推理
MIG 实例规格速查(A100/H100 80GB)
| Profile | SM 数 | 显存 | 最大数量 |
|---|---|---|---|
| 1g.10gb | 1/7 | 10GB | 7 |
| 2g.20gb | 2/7 | 20GB | 3 |
| 3g.40gb | 3/7 | 40GB | 2 |
| 4g.40gb | 4/7 | 40GB | 1 |
| 7g.80gb | 7/7 | 80GB | 1(全卡) |
H100 NVL 96GB 版本 profile 略有不同,参考
nvidia-smi mig -lgip实际输出。
环境准备
确认 GPU 支持 MIG
nvidia-smi --query-gpu=name,mig.mode.current --format=csv
# 输出示例:
# name, mig.mode.current
# NVIDIA H100 80GB HBM3, Disabled
启用 MIG 模式
# 单卡启用(需要先停止使用该 GPU 的进程)
sudo nvidia-smi -i 0 -mig 1
# 重启后确认
nvidia-smi -i 0 --query-gpu=mig.mode.current --format=csv,noheader
# 输出:Enabled
MIG 模式启用后不会自动创建实例,需要手动或通过 GPU Operator 配置 profile。
手动创建 MIG 实例(调试用)
# 创建 2 个 3g.40gb 实例(H100 80GB)
sudo nvidia-smi mig -cgi 3g.40gb,3g.40gb -C
# 查看创建结果
nvidia-smi mig -lgi
# +----------------------------------------------------+
# | GPU instances: |
# | GPU Name Profile Instance Placement|
# | ID ID Start Size|
# |====================================================|
# | 0 MIG 3g.40gb 9 1 0 4 |
# | 0 MIG 3g.40gb 9 2 4 4 |
# +----------------------------------------------------+
# 创建 Compute Instance
nvidia-smi mig -cci
nvidia-smi mig -lci
删除实例:
sudo nvidia-smi mig -dci && sudo nvidia-smi mig -dgi
GPU Operator 自动化管理 MIG
在生产 Kubernetes 集群中,手动维护 MIG 实例既繁琐又容易出错,推荐使用 NVIDIA GPU Operator 的 MIG Manager 自动化管理。
安装 GPU Operator(含 MIG Manager)
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update
helm upgrade --install gpu-operator nvidia/gpu-operator \
--namespace gpu-operator \
--create-namespace \
--set mig.strategy=mixed \
--set migManager.enabled=true \
--set driver.enabled=true \
--set toolkit.enabled=true \
--version 24.9.0
MIG 策略:Single vs Mixed
Single 策略:节点上所有 GPU 使用相同的 MIG profile,所有实例以 nvidia.com/mig-<profile> 形式暴露。
kubectl label node <node-name> nvidia.com/mig.config=all-3g.40gb
Mixed 策略:同一节点不同 GPU 可以配置不同 profile,通过 ConfigMap 定义。
# mig-parted ConfigMap 示例
apiVersion: v1
kind: ConfigMap
metadata:
name: default-mig-parted-config
namespace: gpu-operator
data:
config.yaml: |
version: v1
mig-configs:
all-1g.10gb:
- devices: all
mig-enabled: true
mig-devices:
1g.10gb: 7
mixed-a100:
- devices: [0, 1]
mig-enabled: true
mig-devices:
3g.40gb: 2
- devices: [2, 3]
mig-enabled: true
mig-devices:
1g.10gb: 7
应用配置:
kubectl label node <node-name> nvidia.com/mig.config=mixed-a100
MIG Manager 会自动驱逐节点上的 Pod,重新配置 MIG 实例,再重新标记节点为可调度。
Kubernetes 中使用 MIG 资源
MIG 实例在 Kubernetes 中以扩展资源形式暴露:
kubectl describe node <node-name> | grep -A 20 "Capacity"
# 输出示例(Mixed 策略):
# nvidia.com/mig-1g.10gb: 14
# nvidia.com/mig-3g.40gb: 4
Pod 请求 MIG 实例:
apiVersion: v1
kind: Pod
metadata:
name: llm-inference
spec:
containers:
- name: vllm
image: vllm/vllm-openai:v0.21.0
resources:
limits:
nvidia.com/mig-3g.40gb: "1"
command:
- python3
- -m
- vllm.entrypoints.openai.api_server
- --model
- /models/qwen2.5-7b-instruct
- --max-model-len
- "8192"
注意:一个 Pod 只能请求同类型的 MIG 实例,不能混用不同 profile。
多租户隔离最佳实践
ResourceQuota 限额
apiVersion: v1
kind: ResourceQuota
metadata:
name: team-a-gpu-quota
namespace: team-a
spec:
hard:
requests.nvidia.com/mig-3g.40gb: "2"
limits.nvidia.com/mig-3g.40gb: "2"
PriorityClass 优先级
为在线推理设置高优先级,确保批量任务不抢占推理服务:
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: inference-high
value: 1000
globalDefault: false
---
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: batch-low
value: 100
globalDefault: true
节点亲和性
将 MIG 节点专用于 AI 推理,防止普通业务 Pod 调度到 GPU 节点:
# 给 MIG 节点打污点
kubectl taint node <gpu-node> dedicated=mig:NoSchedule
# Pod 容忍污点
spec:
tolerations:
- key: dedicated
operator: Equal
value: mig
effect: NoSchedule
常见问题排查
MIG 实例未出现在 kubectl describe node
# 检查 MIG Manager 状态
kubectl get pods -n gpu-operator | grep mig-manager
# 查看 MIG Manager 日志
kubectl logs -n gpu-operator -l app=nvidia-mig-manager --tail=100
# 手动触发重新标记
kubectl label node <node-name> nvidia.com/mig.config=all-3g.40gb --overwrite
Pod 一直 Pending:无法分配 MIG 资源
# 检查节点可用 MIG 资源
kubectl get node <node-name> -o json | jq '.status.allocatable | with_entries(select(.key | startswith("nvidia.com/mig")))'
# 检查是否有 Pod 占用了全卡资源(mig-7g.80gb 优先级可能过高)
kubectl get pods -A -o json | jq '.items[] | select(.spec.containers[].resources.limits["nvidia.com/mig-7g.80gb"] != null) | .metadata.name'
节点重启后 MIG 配置丢失
MIG Manager 会在节点重新加入集群后自动根据节点标签重新配置,通常 2-3 分钟内恢复。若未恢复,检查 MIG Manager DaemonSet 的 nodeSelector 是否匹配该节点。
KubeCon 2026 最新动态
KubeCon EU 2026 上,NVIDIA 将 DRA(Dynamic Resource Allocation)GPU 驱动捐赠给 CNCF,新的 DRA MIG 分配模型支持按需动态创建/销毁 MIG 实例,而不再需要预先静态配置。结合 SUSE Virtualization 的 MIG vGPU 直通支持,混合 VM+容器的 AI 基础设施场景将大幅简化运维复杂度。
小结
MIG 是 GPU 利用率与多租户隔离的最佳平衡点。核心操作路径:确认 GPU 支持 → 启用 MIG 模式 → GPU Operator 自动化 profile → ResourceQuota 限额 → PriorityClass 优先级。Mixed 策略更灵活,适合混布推理+训练的生产集群;Single 策略运维简单,适合专用推理节点。
