Kubernetes for AI:编排容器化的训练与推理任务

FreeGuideOnline 最新 2026-06-28

为什么选择 Kubernetes 管理 AI 工作负载

随着机器学习模型规模的爆炸式增长和团队协作的深化,单机训练早已无法满足需求。Kubernetes(K8s)作为容器编排的标准平台,能够统一调度 GPU、TPU 等昂贵资源,弹性扩缩训练节点,并实现从实验到生产的无缝交付。对于 AI 工程师而言,Kubernetes 让环境一致性、资源隔离、任务排队和故障自愈变得简单可靠。

核心价值

  • 资源池化:将多个节点的 GPU 组成统一资源池,按需分配,避免设备闲置。
  • 弹性伸缩:训练任务结束后自动释放 GPU,推理服务可按负载自动扩缩。
  • 环境可再现:容器镜像固化依赖,消除“在我的机器上能跑”问题。
  • 多租户隔离:通过命名空间、资源配额和 RBAC 实现团队间资源共享与安全隔离。
  • 工作流编排:基于 DAG 定义复杂的训练流水线,如数据预处理 → 分布式训练 → 模型评估。

快速理解核心概念

Kubernetes 采用声明式 API,你只需要描述期望状态,控制器会持续将实际状态调节至期望状态。以下是与 AI 工作负载最相关的资源类型:

Pod

Kubernetes 的最小调度单元。一个 Pod 可以包含一个或多个紧密耦合的容器,共享网络和存储。通常一个 Pod 运行一个主应用容器(如训练脚本)。

Job

管理运行至完成的一次性任务。当所有 Pod 成功终止后,Job 也被标记为完成。非常适合单次训练实验或批量推理。

apiVersion: batch/v1
kind: Job
metadata:
  name: pytorch-train
spec:
  completions: 1
  parallelism: 1
  template:
    spec:
      containers:
      - name: trainer
        image: myrepo/pytorch-train:latest
        command: ["python", "train.py"]
        resources:
          limits:
            nvidia.com/gpu: 1
      restartPolicy: Never

GPU 资源与设备插件

通过 nvidia.com/gpu 资源字段申领 GPU。你先需在集群中部署 NVIDIA Device Plugin,它会将每个节点的 GPU 数量暴露给调度器。

节点选择与亲和性

利用 nodeSelector 或更灵活的 affinity,将 AI 工作负载调度到带有 GPU 的节点上。

nodeSelector:
  accelerator: nvidia-tesla-v100

资源配额与限制范围

防止单个项目或用户耗尽集群资源。ResourceQuota 可限制命名空间中 GPU 总量,LimitRange 可为未指定资源的 Pod 设置默认请求/限制。


训练任务编排:从单次实验到分布式训练

单节点训练 Job

简单的单 GPU 训练最适合用 Job 表达。指定 completionsparallelism 均为 1,确保只启动一个 Pod 运行至结束。

多节点分布式训练 Operator

Kubernetes 原生 Job 难以直接管理多节点协同训练(如 AllReduce)。社区提供了多种 Operator 来简化分布式训练:

  • PyTorch Operator (Kubeflow Training Operator) 支持 PyTorchJob CRD,定义 Master 和 Worker 副本,自动处理环境变量和启动顺序。

    apiVersion: kubeflow.org/v1
    kind: PyTorchJob
    metadata:
      name: dist-mnist
    spec:
      pytorchReplicaSpecs:
        Master:
          replicas: 1
          restartPolicy: OnFailure
          template:
            spec:
              containers:
              - name: pytorch
                image: pytorch/pytorch:1.0
                command: ["python", "-m", "torch.distributed.run", "dist_train.py"]
                resources:
                  limits:
                    nvidia.com/gpu: 1
        Worker:
          replicas: 2
          restartPolicy: OnFailure
          template:
            spec:
              containers:
              - name: pytorch
                image: pytorch/pytorch:1.0
                command: ["python", "-m", "torch.distributed.run", "dist_train.py"]
                resources:
                  limits:
                    nvidia.com/gpu: 1
    
  • TFJob (TensorFlow) 类似地提供 TFJob 资源,包含 Chief、Worker、PS(参数服务器)等角色。

  • MPI Operator 适用于 Horovod 等基于 MPI 的框架训练。

超参数调优与流水线

利用 Kubernetes 原生的 CronJob 配合脚本,或通过 Kubeflow Pipelines 构建可重用的超参搜索 DAG。Kubeflow Pipelines 引擎可将每个步骤容器化,通过 Argo 工作流驱动。


推理服务部署

训练完成的模型需要以高可用、低延迟的方式提供服务。Kubernetes 在这方面的能力非常成熟。

部署 Deployment + Service

最基础的方式:将模型推理封装成 HTTP 服务(如 Flask + TorchServe),然后用 Deployment 管理多个副本,Service 暴露端口,配合 Ingress 对外服务。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: model-server
spec:
  replicas: 3
  selector:
    matchLabels:
      app: model-server
  template:
    metadata:
      labels:
        app: model-server
    spec:
      containers:
      - name: server
        image: myrepo/model-server:v1
        ports:
        - containerPort: 8080
        resources:
          limits:
            nvidia.com/gpu: 1

自动扩缩容

通过 HPA(Horizontal Pod Autoscaler)根据 CPU、内存或自定义指标(如请求延迟)动态调整副本数。对于 GPU 推理,通常基于 GPU 利用率或请求队列长度进行扩缩。需部署 Prometheus Adapter 以暴露自定义指标。

滚动更新与金丝雀发布

Deployment 支持滚动更新,可逐步替换旧版本 Pod,避免服务中断。配合 Service Mesh(如 Istio)还能实现流量精细化分发,进行 A/B 测试。

模型服务器专用方案

  • KServe(原 KFServing):Kubernetes 原生的无服务器推理方案,支持模型热加载、自动缩放至零、灰度发布等。
  • Triton Inference Server:NVIDIA 出品,可在 Kubernetes 中通过 Helm 快速部署,提供 GPU 优化和高并发支持。

资源管理与优化实战

合理设置资源请求与限制

  • requests:调度器确保节点有足够资源才会调度 Pod。显卡请求通常写 nvidia.com/gpu: 1
  • limits:Pod 能使用的最大资源量。对于 GPU,请求与限制通常设为相等,以获得独占访问,避免显存争抢。

GPU 共享与 MIG

NVIDIA A100 等支持 Multi-Instance GPU (MIG),可将一块物理 GPU 分为多个独立实例。在 Kubernetes 中,通过设备插件暴露为多个小 GPU 资源,实现更细粒度的分配。

节点池隔离与污点容忍

为 GPU 节点打上 taint,避免普通工作负载误调度上去:

kubectl taint nodes gpu-node1 accelerator=tesla:NoSchedule

Pod 需添加容忍:

tolerations:
- key: "accelerator"
  operator: "Equal"
  value: "tesla"
  effect: "NoSchedule"

存储与数据管理

训练数据通常存放在分布式存储中,如 NFS、Ceph、或云端对象存储。可通过 PVC(PersistentVolumeClaim)挂载,或使用 CSI 驱动直接挂载 S3 桶(如使用 Mountpoint for S3 CSI driver)。

优先级与抢占

配置 PriorityClass 确保高优先级训练任务(如生产重跑)可以抢占低优先级实验任务,合理利用空闲资源。


最佳实践清单

  1. 构建精简镜像:只包含推理或训练所需的运行时依赖,减小下载时间。
  2. 将配置外部化:使用 ConfigMap 和 Secret 管理超参数、模型路径等,避免硬编码。
  3. 健康检查:为推理服务 Pod 配置 liveness 和 readiness probe,确保故障自动恢复。
  4. 日志集中化:所有容器输出 stdout/stderr,由集群级日志系统(EFK/Loki)采集。
  5. 监控与告警:利用 Prometheus + Grafana 监控 GPU 利用率、显存、训练 loss 等指标。
  6. 命名空间规划:按团队、项目划分命名空间,配合限额和 RBAC,实现软多租户。
  7. 有状态训练保护:对于需要断点续训的任务,使用持久化存储和适当的重启策略。
  8. 测试 Operator 版本:在预发环境验证 PyTorch/TF Operator 兼容性,避免版本错配导致通信失败。

入门资源与下一步

  • 官方文档:Kubernetes 官网 Tasks - Manage GPUs
  • Kubeflow:kubernetes 原生的 MLOps 工具集,涵盖 Notebook、Pipeline、Training Operator 等。
  • k3s / MicroK8s:适合本地开发和边缘 AI 的轻量 Kubernetes 发行版。
  • NVIDIA GPU Operator:自动化 GPU 驱动、设备插件、监控栈的安装与管理。

通过 Kubernetes 将 AI 训练与推理统一编排,你获得的不仅是资源利用率提升,更是将研究实验快速转化为可靠服务的工程化能力。从今天开始,试着把你的训练脚本打包成 Docker 镜像,用一张简单的 Job YAML 在集群中启动它,迈出云端 AI 的第一步。