技术博客

NVIDIA MIG 多实例 GPU Kubernetes 进阶运维指南

深入讲解 NVIDIA Multi-Instance GPU(MIG)在 Kubernetes 集群中的配置策略、Single/Mixed 模式实战、GPU Operator 自动化管理与多租户隔离最佳实践。

NVIDIAMIGKubernetesGPUGPU 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 缓存完全独立,实例间互不干扰,适合以下场景:

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 策略运维简单,适合专用推理节点。