Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Kubernetes

Kubernetes(K8s)可在集群中运行容器,确保声明的副本数量正常运行,并调度 GPU 训练和推理任务。

Kubernetes(常简称为 K8s)是一种开源系统,可在机器集群上运行容器化应用。用户声明工作负载的期望状态,例如要运行哪个容器镜像、要保持多少个副本,以及每个副本需要多少 CPU、内存和 GPU容量;Kubernetes 会持续启动、重启、迁移和扩缩容器,使其符合期望状态。Google 于 2014 年 6 月公布了该项目,其基础是 Google 内部的 Borg 集群管理器;2015 年 7 月发布 1.0 版本时,Google 将其作为新成立的云原生计算基金会的种子项目。Kubernetes 在希腊语中意为舵手,K8s 则用 8 替代了 K 和 s 之间的八个字母。在机器学习运维(MLOps)中,Kubernetes 是运行分布式训练作业、批量推理和模型服务的常用基础层,可在共享硬件上运行这些任务。

架构与控制循环#

一个集群由控制平面和工作节点组成。控制平面包含供所有客户端访问的 API 服务器、存储集群状态的 etcd、负责将新 Pod 分配给节点的调度器,以及各自监视一种对象的控制器。每个工作节点,无论是本地部署的服务器还是云虚拟机,都会运行 kubelet 代理和 containerd 或 CRI-O 等容器运行时。Kubernetes 调度的最小单元是 Pod:一个或多个共享网络地址和存储卷的容器。

工作负载通常以 YAML 编写为对象,并使用 kubectl 应用。Deployment 会保持指定数量的相同 Pod 运行,并在镜像变更时逐步替换它们;Service 为这些 Pod 提供一个稳定地址,并在它们之间分发请求;Job 则会运行 Pod,直到任务完成。控制器会比较声明状态与实际运行状态,并针对任何差异采取行动:

同一个循环也让 Kubernetes 具备自我修复能力。节点故障时,其 Pod 会退出运行状态,控制器便会在健康节点上创建替代 Pod。因容量不足而处于 Pending 状态的 Pod,也是集群自动扩缩容器添加节点的信号。

Kubernetes 在机器学习中的应用#

GPU 通过设备插件提供给 Pod,设备插件会将 GPU 声明为可计数资源,例如 nvidia.com/gpu;GPU 也可通过动态资源分配提供,该功能自 Kubernetes 1.34 起稳定可用,允许 Pod 按 GPU 型号或内存等属性请求设备。NVIDIA GPU Operator 会在 GPU 节点上安装驱动和插件,还可以将一块 GPU 划分为多个实例,或让多个 Pod 分时共享 GPU。OpenAI 于 2021 年报告称,已将单个 Kubernetes 集群扩展至 7,500 个节点,用于训练 GPT-3和 CLIP等模型。

开源项目在 Kubernetes 之上添加了面向机器学习的专用层:

  • Kubeflow:在集群上运行分布式 PyTorch 训练、机器学习流水线和笔记本。
  • Kueue:对批处理和训练作业进行排队并执行团队配额管理,避免某个团队独占资源,让昂贵的 GPU 保持繁忙。
  • KServe:通过自动扩缩的端点提供模型服务,包括在模型空闲时缩容至零。
  • 水平 Pod 自动扩缩器:根据 CPU 使用率或队列长度等自定义指标增加或减少推理副本,从而在流量变化时保持延迟稳定。

Job 是运行一次性 GPU 任务(例如批量推理)最简单的方式。Ultralytics 官方 Docker 镜像已包含 yolo 命令和 YOLO26 nano权重,因此这个 Job 只需设置命令并申请一块 GPU:

apiVersion: batch/v1
kind: Job
metadata:
  name: yolo26-predict
spec:
  backoffLimit: 2 # retry a failed pod at most twice
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: yolo
          image: ultralytics/ultralytics:latest
          command: ["yolo", "predict", "model=yolo26n.pt", "source=https://ultralytics.com/images/bus.jpg"]
          resources:
            limits:
              nvidia.com/gpu: 1 # schedule only onto a node with a free GPU

使用 kubectl apply -f job.yaml 提交任务后,调度器会将 Pod 安排到有空闲 GPU 的节点上;kubectl logs job/yolo26-predict 则会打印预测模式下的目标检测结果。训练 Job 遵循相同模式,并为检查点添加持久卷;此外,还会在 /dev/shm 处添加内存卷,供 PyTorch数据加载器工作进程使用。

Kubernetes、Docker 与无服务器架构的对比#

  • Docker:构建镜像并在一台机器上运行容器。Kubernetes 则在多台机器之间调度容器;从 1.24 版本起,它通过 containerd 或 CRI-O 运行由 Docker 构建的镜像,而不再使用 Docker Engine。
  • 无服务器计算:Google Cloud Run 和 AWS Lambda 等服务完全隐藏集群,按请求计费;Knative 则将同样的缩容至零模式带到 Kubernetes 集群中。
  • 托管 Kubernetes:Google Kubernetes Engine(GKE)、Amazon Elastic Kubernetes Service(EKS)和 Azure Kubernetes Service(AKS)会为客户运行控制平面;GKE Autopilot 还会管理工作节点。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来