目录
Please enable Javascript to view the contents

K8s设备插件-GPU管理基础

 ·  ☕ 3 分钟

系列导航

本系列介绍 K8s 中 Device Plugin 机制及其在 GPU 管理等 AI 场景中的应用。

① GPU基础 → ② Device Plugin → ③ 开发Plugin → ④ 多设备/AI场景 → ⑤ DRA

顺序文章定位
本篇 - GPU 管理基础基础——NVIDIA GPU、CUDA、MIG、vGPU 概念
Device Plugin 详解核心——机制原理、gRPC 接口、生命周期、部署
编写自定义 Device Plugin扩展——FPGA、RDMA、ASIC 等自定义设备接入
多设备管理与 AI 场景进阶——GPU + RDMA + NVMe 组合调度
DRA 动态资源分配演进——K8s 1.26+ 新一代资源分配机制,替代 Device Plugin 的新方向

重要

K8s 的 Device Plugin 机制是 GPU 管理的基础。NVIDIA GPU Operator 负责驱动安装、Device Plugin 部署、MIG 配置。理解 GPU 的物理拓扑(PCIe、NVLink、NVSwitch)和逻辑切分(MIG、vGPU、Time-Slicing)是 AI 集群调度的前提。


1. GPU 设备要求

要使容器能使用 GPU,容器内需要出现两部分内容:

要求说明路径
GPU 设备文件容器能访问 GPU 设备/dev/nvidia0, /dev/nvidiactl, /dev/nvidia-uvm
GPU 驱动库CUDA 驱动、NVML 库等/usr/local/nvidia/lib64/

kubelet 通过 CRI 接口将这些设备和目录注入容器。


2. GPU 资源声明

K8s 通过 Extended Resource 声明 GPU:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
apiVersion: v1
kind: Pod
metadata:
  name: cuda-vector-add
spec:
  containers:
  - name: main
    image: nvidia/cuda:11.0
    resources:
      limits:
        nvidia.com/gpu: 1
字段说明
nvidia.com/gpuNVIDIA GPU 的 Extended Resource 名
limits: 1申请 1 块 GPU(requests 可以省略,会自动等于 limits)

3. 物理拓扑

3.1 单机 GPU 互联

1
2
3
4
5
6
7
8
节点内 GPU 拓扑:
CPU Socket 0 ──── PCIe ──── PCIe Switch ──── GPU0
                                               ├─── NVLink ──── GPU1
                                               ├─── NVLink ──── GPU2
                                               └─── NVLink ──── GPU3
CPU Socket 1 ──── PCIe ──── PCIe Switch ──── GPU4
                                               ├─── NVLink ──── GPU5
                                               ...
互联方式带宽说明
NVLink900 GB/s(H100)GPU-GPU 直连,不经过 PCIe
NVSwitch3.2 TB/s(H100 全互联)无阻塞交换芯片,连接节点内所有 GPU
PCIe 5.0128 GB/s(双向)GPU-CPU 通信

3.2 查看拓扑

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
nvidia-smi topo -m
#         GPU0  GPU1  GPU2  GPU3  GPU4  GPU5  GPU6  GPU7
#  GPU0    X    NV18  NV18  NV18  SYS   SYS   SYS   SYS
#  GPU1   NV18   X    NV18  NV18  SYS   SYS   SYS   SYS
#  GPU2   NV18  NV18   X    NV18  SYS   SYS   SYS   SYS
#  GPU3   NV18  NV18  NV18   X    SYS   SYS   SYS   SYS
#  GPU4   SYS   SYS   SYS   SYS   X    NV18  NV18  NV18
#  GPU5   SYS   SYS   SYS   SYS  NV18   X    NV18  NV18
#  GPU6   SYS   SYS   SYS   SYS  NV18  NV18   X    NV18
#  GPU7   SYS   SYS   SYS   SYS  NV18  NV18  NV18   X
# NV18 = NVLink 18 路(最高带宽)
# SYS  = 通过 PCIe + CPU 互联(需要通过系统总线)

4. GPU 切分方式

4.1 MIG(Multi-Instance GPU)

A100/H100 支持将一块物理 GPU 切分为最多 7 个独立实例:

1
2
3
4
5
6
7
8
# 列出 MIG 配置
nvidia-smi --query-gpu=mig.mode.current --format=csv

# 启用电实例 A100 MIG
nvidia-smi mig -cgi 9,9,9,9,9,9,9  # 7 个 1g.5gb 实例

# MIG 实例的资源声明方式
nvidia-smi mig -i 0 -cgi 9 -C
MIG 配置实例数每实例显存适用场景
1g.5gb75 GB小模型推理
2g.10gb310 GB中等推理/小训练
3g.20gb220 GB中等训练
7g.40gb140 GB(全 GPU)大模型训练

4.2 Time-Slicing(时间切片)

NVIDIA GPU Operator 1.12+ 支持 GPU 时间切片,允许多个 Pod 共享同一 GPU:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apiVersion: v1
kind: ConfigMap
metadata:
  name: time-slicing-config
data:
  any: |-
    version: v1
    flags:
      migStrategy: none
    sharing:
      timeSlicing:
        resources:
        - name: nvidia.com/gpu
          replicas: 4   # 1 张物理 GPU 暴露为 4 个虚拟 GPU    

4.3 vGPU(Virtual GPU)

NVIDIA vGPU 通过 GRID 驱动实现显存隔离和 QoS(需要 vGPU License):

方式隔离级别License适用场景
MIG硬件隔离(独立显存+SM)免费推理+训练
Time-Slicing软件时间片,无显存隔离免费轻量推理
vGPU显存隔离 + 帧缓冲隔离收费VDI、专业可视化

5. NVIDIA GPU Operator

NVIDIA 提供的统一部署方案,一键安装所有 GPU 组件:

1
2
3
4
5
6
7
8
NVIDIA GPU Operator 包含:
├── NVIDIA Driver(节点驱动)
├── NVIDIA Container Toolkit(nvidia-container-runtime)
├── NVIDIA Device Plugin(上报 GPU 资源给 K8s)
├── NVIDIA DCGM(GPU 监控)
├── GPU Feature Discovery(节点标签)
├── MIG Manager(MIG 管理)
└── Sandbox Device Plugin(共享 GPU)
1
2
3
4
5
# 安装 NVIDIA GPU Operator
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm install gpu-operator nvidia/gpu-operator \
  --set operator.defaultRuntime=containerd \
  --set driver.enabled=true

6. 节点标签

安装 GPU Operator 后,节点自动打上标签:

1
2
3
4
5
6
7
8
kubectl get node gpu-node-1 --show-labels
# nvidia.com/gpu.present=true
# nvidia.com/gpu.product=NVIDIA-A100-SXM4-40GB
# nvidia.com/gpu.count=8
# nvidia.com/gpu.memory=40960
# nvidia.com/gpu.family=ampere
# nvidia.com/mig.capable=true
# nvidia.com/mig.strategy=mixed

参考链接

分享

Hex
作者
Hex
CloudNative Developer