跳转至

Kubernetes GPU 平台

Kubernetes 通过 Device Plugin 框架让 kubelet 发现并向 API Server 上报 GPU 等扩展资源。厂商插件通常以 DaemonSet 运行,并把 NVIDIA GPU 暴露为 nvidia.com/gpu

设备可用链路

flowchart LR
    D[Node Driver] --> R[Container Runtime]
    D --> P[Device Plugin]
    P --> K[Kubelet]
    K --> A[API Server<br/>node capacity]
    S[Scheduler] --> A
    S --> Pod[GPU Pod]
    R --> Pod

任一环节不匹配,都可能出现“节点有卡但 Pod 用不了”:驱动/内核模块、容器 runtime、device plugin 注册、资源上报、scheduler 决策与容器注入要逐层验证。

最小 GPU Pod

apiVersion: v1
kind: Pod
metadata:
  name: gpu-smoke-test
spec:
  restartPolicy: Never
  containers:
    - name: cuda
      image: nvidia/cuda:12.6.3-base-ubuntu24.04
      command: ["bash", "-lc", "nvidia-smi && sleep 10"]
      resources:
        limits:
          nvidia.com/gpu: 1

Kubernetes 官方文档说明,GPU 扩展资源应写在 limits;可以只写 limits,此时其值同时用作 request。若同时写 request 与 limit,两者必须相等。扩展设备资源为整数且默认不可超卖。

镜像版本仅作示例

运行前确认镜像存在且 CUDA 用户态与节点驱动兼容,不要把示例 tag 当成生产固定版本。

调度不仅是“还有几张卡”

生产平台常需要表达:

  • GPU 型号、显存容量、互连域、MIG profile;
  • GPU 与 NIC/NUMA 的拓扑关系;
  • 作业必须同时获得 N 张卡/多个 Pod 的 gang 语义;
  • 队列、租户配额、公平性、优先级和抢占;
  • 训练长作业与在线推理的隔离;
  • 节点健康、维护、drain 与故障恢复。

Node Feature Discovery 可发现并标记硬件特征。标签表示能力,taint/toleration 控制哪些 workload 可以进入,node affinity 表达工作负载需求;不要让用户随意伪造受信任的硬件标签。

GPU 共享方式要区分

方式 隔离粒度 适合 风险/代价
整卡 设备 大训练、高负载推理 小任务利用率可能低
MIG 硬件分区(特定 GPU) 需要更强资源隔离的小服务 profile 固定、重配与能力限制
Time-slicing 时间共享 开发、小突发任务 显存/性能隔离弱,邻居干扰
MPS 进程级并发机制 可控的多进程 CUDA 共享 故障与资源治理复杂

“可共享”不等于“适合多租户生产”。要根据安全、显存隔离、SLO 和故障域选择。

训练与服务的控制器

  • 原生 Job 适合简单 batch;分布式训练通常还需要 gang scheduling、角色编排和容错控制器。
  • 模型服务可从 Deployment + Service 起步;需要模型 CRD、revision、canary、autoscaling 与多框架数据面时再引入 KServe 等平台层。
  • KServe 的 InferenceService 封装了模型服务生命周期、网络、健康检查、流量与扩缩;高级 LLM 场景还需评估队列、token 指标、prefix-aware routing 和多节点推理。

自动扩缩的现实约束

LLM 副本扩容包括节点供给、Pod 调度、镜像拉取、模型下载、权重加载、编译/warmup。总时间可能远大于普通 Web 服务。

因此:

  • 以 queue time、running/waiting sequences、token rate 等负载信号补充 CPU/GPU utilization;
  • 设置合理 min replicas 和预测性余量;
  • 使用节点/镜像/模型缓存缩短冷启动;
  • scale-down 要有稳定窗口,避免抖动和缓存反复丢失;
  • 扩容策略必须通过突发流量演练验证。

节点上线与下线

节点上线前验证:驱动、GPU 健康、ECC/Xid、NVLink、NIC、存储、时间同步、device plugin 和基准性能。下线前先 cordon,迁移/结束 workload,再做 drain;训练作业要确认 checkpoint,推理要确认副本与 SLO 余量。

延伸阅读