
在 AI 大模型训练、推理场景爆发式增长的今天,如何在 Kubernetes 集群中高效调度 GPU 资源,已成为云原生领域的关键技术。本文系统梳理 K8s GPU 调度的核心方案与最佳实践。 ━━━━━━━━━━━━━━ 一、核心架构原理 Kubernetes 通过 Device Plugin 机制将 GPU 抽象为可调度资源。 典型架构: • Worker 节点运行 NVIDIA Device Plugin(DaemonSet) • 向 kubelet 注册 nvidia.com/gpu 扩展资源 • kube-scheduler 基于扩展资源进行调度决策 关键组件协作: Device Plugin → 设备发现与分配 GPU Feature Discovery → 自动拓扑感知 GPU Operator → 全生命周期管理 DCGM Exporter → 监控指标采集 ━━━━━━━━━━━━━━ 二、基础部署方案 1. NVIDIA Device Plugin 安装 apiVersion: apps/v1 kind: DaemonSet metadata: name: nvidia-device-plugin-daemonset namespace: kube-system spec: template: spec: tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule containers: - image: nvcr.io/nvidia/k8s-device-plugin:v0.14.0 name: nvidia-device-plugin-ctr 2. 运行首个 GPU 容器 apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: cuda-container image: nvcr.io/nvidia/cuda:12.0-base resources: limits: nvidia.com/gpu: 1 # 请求1个GPU command: ["nvidia-smi"] ━━━━━━━━━━━━━━ 三、高级调度策略 ▎GPU 共享:时间切片技术 单卡多任务场景下,通过时间切片实现 GPU 虚拟化: apiVersion: v1 kind: ConfigMap metadata: name: time-slicing-config data: any: |- version: v1 sharing: timeSlicing: resources: - name: nvidia.com/gpu replicas: 4 # 1卡拆分为4个vGPU ▎拓扑感知调度 多卡训练任务需关注 NUMA 拓扑: spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: nvidia.com/gpu.product operator: In values: - NVIDIA-A100-SXM4-40GB ▎Volcano 批处理调度 大规模分布式训练推荐 Volcano 调度器: apiVersion: batch.volcano.sh/v1alpha1 kind: Job metadata: name: tensorflow-job spec: schedulerName: volcano minAvailable: 4 # Gang Scheduling tasks: - replicas: 4 template: spec: containers: - resources: limits: nvidia.com/gpu: 2 ━━━━━━━━━━━━━━ 四、方案选型对比 【原生 Device Plugin】 适用:小规模 GPU 集群 特点:轻量、简单,无共享能力 【NVIDIA GPU Operator】 适用:企业级生产环境 特点:自动驱动安装、MIG 支持、完整监控 【Volcano 调度器】 适用:大规模 AI 训练平台 特点:队列调度、Gang Scheduling、任务优先级 ━━━━━━━━━━━━━━ 五、生产环境最佳实践 1. 节点标签自动化 部署 GPU Feature Discovery,自动标记: • nvidia.com/gpu.product(GPU型号) • nvidia.com/gpu.memory(显存容量) • nvidia.com/gpu.topology(互联拓扑) 2. 资源配额管控 apiVersion: v1 kind: ResourceQuota metadata: name: gpu-quota spec: hard: nvidia.com/gpu: 8 3. 关键监控指标 • GPU 利用率(非零即满问题) • 显存占用率 • GPU 温度与功耗 • NVLink 带宽利用率 4. MIG 模式配置(A100/H100) 启用多实例 GPU,单卡可划分为: • 7个 5GB 实例(1g.5gb) • 3个 10GB 实例(2g.10gb) • 1个 20GB 实例 + 1个 10GB 实例(混合模式) ━━━━━━━━━━━━━━ 六、常用运维命令 查看集群 GPU 资源总量: kubectl get nodes -o json | jq '.items[].status.allocatable | select(has("nvidia.com/gpu"))' 查看节点 GPU 分配详情: kubectl describe node <node-name> | grep -A 10 "Allocated resources" 进入容器验证 GPU: kubectl exec -it gpu-pod -- nvidia-smi ━━━━━━━━━━━━━━ 结语 从 Device Plugin 基础调度到 GPU Operator 全栈管理,再到 Volcano 批处理调度,Kubernetes GPU 生态已日趋成熟。建议根据团队规模选择合适的方案:小团队用 Device Plugin 快速上手,中大型企业采用 GPU Operator,AI 平台级应用则引入 Volcano 实现精细化调度。 #Kubernetes #GPU #云原生 #AI基础设施 #容器调度