← 文章 / 科技资讯
fairwinds 5天前 · 2026-11-05 01:33:01 · 10 阅读

Kubernetes上的AI:平台团队和机器学习团队的必备概念

在 Kubernetes 上运行 AI 工作负载,意味着要学习一批新概念:GPU 如何申请和共享、一组 Pod 如何一起调度、模型如何部署和扩缩容。本页定义了最重要的这些概念,解释它们为何对 AI 工作负载至关重要,以及对负责运维的团队意味着什么。

有两类人正在同时从相反的方向学习这套术语。平台工程师熟悉 Kubernetes,但对 GPU 和模型服务部署还不熟悉;机器学习(ML)工程师熟悉模型和 GPU,但对 Kubernetes 还是新手。双方最终要在同一批集群上协作,很多摩擦都源于彼此都以为对方已经掌握了基础知识。这份参考指南就是为了帮助双方弥合这些概念差异。

如何使用本页

  • 来自 Kubernetes 背景的读者?建议从 Hardware and allocation 开始,然后阅读 Scheduling AI workloads。
  • 来自 ML 背景的读者?建议从 Kubernetes basics that change with AI workloads 开始。关于 Pod、Deployment 等核心对象,请参阅 22 Essential Kubernetes Concepts。
  • 团队负责人?每个概念末尾都有一段关于成本、风险或人员配置的"给团队的建议"。建议从 Cost and efficiency 章节开始阅读。

每个概念都包含三部分:它是什么、为什么对 AI 工作负载重要,以及对你的团队意味着什么。

AI 工作负载下发生变化的 Kubernetes 基础知识

什么是资源请求与限制?

request(请求)是 Kubernetes 调度容器时为其预留的 CPU、内存或其他资源的数量;limit(限制)则是该容器允许使用的上限。

为什么对 AI 工作负载重要:GPU 以整数单位申请,无法像 CPU 那样超卖。除非共享 GPU(见下文 GPU sharing),申请了 GPU 的 Pod 会独占整个设备,哪怕实际只用了 5% 或 95%。这就像四个人到场却订了十二人的桌位:餐厅照样为你保留整张桌子。

给团队: GPU 支出浪费的最大来源是利用率低:Pod 独占一张 GPU,却只使用了其中一小部分。其他请求的影响也不容忽视,只是不那么直观。如果 Pod 在 GPU 节点上过度请求 CPU 或内存,可能会让该节点上的其他 GPU 闲置,因为没有其他 Pod 能与其共存。

什么是污点(Taints)、容忍(Tolerations)和节点亲和性(Node Affinity)?

污点用于标记节点,只有具备匹配容忍设置的 Pod 才能在其上运行。节点选择器(Node Selector)是将 Pod 调度到具有特定标签(如特定 GPU 型号)节点的最简单方式。节点亲和性通过更灵活的规则(例如使用偏好而非硬性要求)实现相同的功能。

为什么对 AI 工作负载很重要: 污点可以防止普通工作负载占用昂贵的 GPU 节点。当集群中有多种 GPU 时,节点选择器或亲和性可以将特定的 GPU 工作负载发送到合适的 GPU 类型。由于请求 GPU 本身已将 Pod 限制在拥有 GPU 的节点上,因此在只有一种 GPU 类型的集群中,仅仅依靠污点和容忍机制可能就已足够。

给团队: 具体使用哪种机制取决于集群布局。配置得当可确保 GPU 资源保留给真正需要的工作负载。

什么是命名空间(Namespaces)和资源配额(ResourceQuotas)?

命名空间是集群内的独立区域,通常用于隔离团队或环境。资源配额限制命名空间内所有对象可请求的资源总量上限。

为什么对 AI 工作负载很重要: 配额不仅可以限制 CPU 和内存,还可以限制 GPU。这样,多个团队就可以共享有限的 GPU 资源池,而不会因某个团队的实验耗尽资源而影响他人。

给团队: 配额机制将“谁该获得 GPU”的 Slack 争论转变为明确的策略。

什么是 Job(任务)?

Job 会运行一个或多个 Pod,直到任务完成后再停止。这是运行有明确终点的工作的标准方式,例如训练任务或批量数据处理。

为什么对 AI 工作负载很重要: 模型训练和微调通常以 Job 形式运行。分布式训练往往需要多个协调一致的 Pod,这正是群体调度(Gang Scheduling,见下文)发挥作用的地方。

给团队: Job 使训练任务可重复且可追踪,避免仅依赖某位工程师的笔记本电脑或手工配置的机器来运行。

什么是持久卷(Persistent Volumes)?

持久卷(Persistent Volume)是生命周期超过单个 Pod 的存储。Pod 通过 PersistentVolumeClaim 来申请使用,重启后还能从原来的进度继续。

为什么对 AI 工作负载很重要:模型权重和训练数据集都非常大。它们存放在哪里、Pod 能以多快的速度读取,往往直接决定了模型服务启动或训练任务从 checkpoint 恢复所需的时间。

对你的团队意味着:存储太慢的表现是 GPU 在数据加载时空转等待——等于花高价买硬件却让它干等。

硬件与资源分配

什么是加速器或 GPU 节点?

加速器是一种专门用于加速训练和推理计算的硬件,GPU 是最常见的类型。GPU 节点就是挂载了一个或多个加速器的 Kubernetes 节点。

为什么对 AI 工作负载很重要:大多数 AI 工作负载要么必须用加速器,要么没有它就慢得多。GPU 节点通常放在独立的节点池里,因为其成本是通用节点的许多倍。

对你的团队意味着:GPU 节点往往是 AI 基础设施账单中最大的一笔开销,所以本文的很多内容都是围绕如何用好它们展开的。

什么是 device plugin?

device plugin 是一个小程序,负责告诉 Kubernetes 节点上有哪些特殊硬件,这样 Pod 就能按名称申请使用。

为什么对 AI 工作负载很重要:GPU 在 Kubernetes 中的暴露靠的就是它。简单场景下工作良好,但 Pod 只能申请设备的数量。想指定具体的 GPU 型号或显存大小,就得用变通办法,比如节点标签,或者为每种类型单独定义资源名。

对你的团队意味着:只要你的集群现在在跑 GPU 工作负载,几乎可以肯定它依赖某个 device plugin,而且它需要与驱动和 Kubernetes 升级保持同步。

什么是 Dynamic Resource Allocation (DRA)?

Dynamic Resource Allocation 是 Kubernetes 较新的专用硬件申请机制。Pod 提交一个描述自身需求的 ResourceClaim,DeviceClass 则定义了可供 claim 匹配的设备类别。

对 AI 工作负载的意义:DRA 允许工作负载根据设备属性(如 GPU 型号或最小内存要求)请求硬件。此外,API 本身也支持共享机制,多个 Pod 可以引用同一个 ResourceClaim。

对团队的意义:DRA 使平台团队能对昂贵硬件实现更精细的控制,从而减少资源超配。但这是一项需要规划的变更,因为驱动程序和工作负载都必须适配 DRA。

什么是 GPU 共享?

GPU 共享允许多个工作负载共用一块物理 GPU。两种最常见的方式是时间片轮转(time-slicing,即工作负载轮流使用整个 GPU)和硬件分区,例如 NVIDIA 的 Multi-Instance GPU (MIG),它可以将一块 GPU 分割为多个隔离的独立实例。

对 AI 工作负载的意义:许多推理和开发场景仅使用 GPU 的一小部分算力。共享机制能有效利用闲置容量。时间片轮转灵活,但无法保证每个工作负载的内存和性能;硬件分区能提供隔离性,但仅限支持的硬件,且分区大小固定。

对团队的意义:共享机制可以减少所需 GPU 的数量,但代价是容量规划需要更加细致。

什么是 GPU 驱动和 Operator?

GPU 节点需要驱动程序、配置了 GPU 的容器运行时、设备插件或 DRA 驱动,以及监控工具。Operator 是一种 Kubernetes 附加组件,能够协同安装和管理上述所有组件。

对 AI 工作负载的意义:驱动程序和运行时的版本必须与硬件、Kubernetes 版本以及模型使用的框架相匹配。版本不匹配通常表现为 Pod 启动后无法识别 GPU。

对团队的意义:GPU 软件栈是每次升级时需维护的额外层,版本滞后往往是 GPU 集群落后于上游版本的主要原因。

调度 AI 工作负载

什么是 Gang Scheduling?

Gang Scheduling 是指一组 Pod 要么同时调度成功,要么全部不调度。由于原生 Kubernetes 缺乏内置的 Gang Scheduling API,生态系统工具引入了自定义资源,如 Kueue 的 Workload 或 Volcano 的 PodGroup,来定义哪些 Pod 必须作为整体进行调度。

为什么这对 AI 工作负载很重要:Kubernetes 通常各自独立调度每个 pod。这对 Web 服务没问题,但分布式训练需要所有 worker 都启动起来才能推进。如果没有 gang scheduling,训练任务可能只有一半启动,占着 GPU 干等另一半,而后者可能永远排不上。

对团队的意义:调度一半的任务是在悄悄浪费 GPU 时长。Gang scheduling 能避免这种死锁,让训练的容量规划更可预测。

什么是 topology-aware scheduling?

Topology-aware scheduling 会根据硬件的物理布局来放置 pod:哪些 GPU 之间有高速互联、哪些网卡离它们最近、哪些节点在同一个机架上。

为什么这对 AI 工作负载很重要:大规模训练和推理任务需要在 GPU 之间搬运大量数据。同一高速链路上的两块 GPU,协同效率远高于横跨数据中心两端的组合。

对团队的意义:好的放置策略能让同样的硬件更快跑完任务,这对大集群上的大模型尤其关键。把数据留在同一个可用区内,还能降低网络传输成本。

什么是 job queueing?

Job queueing 会把工作负载排队,等到容量足够时,再按团队配额和优先级放行。Kubernetes 社区项目 Kueue 是一个广泛使用的方案。

为什么这对 AI 工作负载很重要:GPU 容量通常供不应求。队列能让训练任务有序等待,而不是直接失败或抢占部分资源。

对团队的意义:队列机制让昂贵的 GPU 资源池能公平地在团队间共享,还能看清任务实际等了多久硬件。

模型服务(推理)

什么是 model server?

Model server 把训练好的模型加载进 GPU 显存,通常通过 HTTP API 响应请求。它还负责 batching,即把多个请求合并成一批,让 GPU 每次处理更多工作量。

为何对 AI 工作负载至关重要:模型服务器是推理系统中真正调用 GPU 的组件。它与其他应用一样运行在 Pod 内,但由于需要加载大型模型,其启动速度通常较慢;此外,其性能在很大程度上取决于请求批处理(batching)的方式。

原始来源: fairwinds

评论 (0)