今天,NVIDIA 宣布推出 KAI Scheduler 的开源版本,这是一种 Kubernetes-native GPU 调度解决方案,现已在 Apache 2.0 许可证下提供。KAI Scheduler 最初在 Run:ai 平台中开发,现在可供社区使用,同时继续作为 NVIDIA Run:ai 平台 的一部分打包和交付。该计划强调了 NVIDIA 致力于推动开源和企业 AI 基础设施的发展,打造积极协作的社区,鼓励贡献、反馈和创新。
在本文中,我们概述了 KAI Scheduler 的技术细节,强调了其对 IT 和 ML 团队的价值,并解释了调度周期和操作。
KAI 调度程序的优势
管理 GPU 和 CPU 上的 AI 工作负载带来了传统资源调度器通常无法解决的一系列挑战。调度程序专为解决以下问题而开发:
- 管理不断变化的 GPU 需求
- 减少计算访问的等待时间
- 资源保障或 GPU 分配
- 无缝连接 AI 工具和框架
管理不断变化的 GPU 需求
AI 工作负载可能会迅速变化。例如,您可能只需要一个 GPU 来进行交互式工作 (例如,用于数据探索) ,然后突然需要多个 GPU 来进行分布式训练或多项实验。传统的调度程序难以应对这种可变性。
KAI 调度程序不断重新计算公平份额值,并实时调整配额和限制,自动匹配当前的工作负载需求。这种动态方法有助于确保高效的 GPU 分配,而无需管理员不断进行手动干预。
减少计算访问的等待时间
对于 ML 工程师来说,时间至关重要。调度程序通过将 gang scheduling、GPU sharing 和 hierarchical queuing system 相结合来减少等待时间,使您能够提交批量 jobs,然后离开,确信 tasks 将在资源可用时立即启动,并符合 priorities 和 fairness。
为了进一步优化资源使用,即使在需求波动的情况下,调度程序也对 GPU 和 CPU 工作负载采用了两种有效的策略:
- Bin-packing 和整合:通过消除资源碎片化 (将较小的任务打包成部分使用的 GPU 和 CPU) ,并通过在节点之间重新分配任务来解决节点碎片化问题,从而更大限度地提高计算利用率。
- 扩散 :在节点或 GPU 和 CPU 之间均匀分布工作负载,以最大限度地减少每节点负载,并最大限度地提高每个工作负载的资源可用性。
资源保障或 GPU 分配
在共享集群中,一些研究人员在早期获得的 GPU 数量超过了必要数量,以确保始终可用。这种做法可能会导致资源未得到充分利用,即使其他团队仍有未使用的配额。
KAI 调度程序通过执行资源保证来解决这一问题。它可确保 AI 从业者团队获得分配的 GPU,同时动态地将空闲资源重新分配给其他工作负载。这种方法可以防止资源占用,并提高集群的整体效率。
无缝连接 AI 工具和框架
将 AI 工作负载与各种 AI 框架连接起来可能非常困难。传统上,团队需要通过一系列手动配置来将工作负载与 Kubeflow、Ray、Argo 和 Training Operator 等工具绑定在一起。这种复杂性会延迟原型设计。
KAI Scheduler 通过内置的 podgrouper 来解决这一问题,该程序可自动检测并连接这些工具和框架,从而降低配置复杂性并加速开发。
核心调度实体
KAI Scheduler 有两个主要实体:podgroups 和 queues。
Pod 组
Pod 组是用于调度的原子单元,表示必须作为单个单元执行的一个或多个相互依赖的 Pod,也称为 gang scheduling 。这一概念对于分布式 AI 训练框架如 TensorFlow 或 PyTorch 至关重要。
以下是 Podgroup 的关键属性:
- 最低成员数 :指定必须一起调度的 pod 的最低数量。如果所有成员均不可用所需资源,则 pod 组将保持待处理状态。
- 队列关联 :每个 podgroup 都与特定的调度队列关联,并将其与更广泛的资源分配策略关联。
- 优先级类: 确定相对于其他 podgroups 的调度顺序,从而影响作业优先级。
队列
队列是实现资源公平性的基础实体。每个队列都有指导其资源分配的特定属性:
- 配额:保证向队列分配的基准资源分配(Quota)。
- 超额配额权重: 影响所有队列中超出基准配额的额外剩余资源的分配方式。
- 限制: 定义队列可以消耗的最大资源,例如 GPU、DPU 等。
- 队列优先级 :确定相对于其他队列的调度顺序,从而影响队列优先级。
架构和调度周期
调度程序的核心是持续捕获 Kubernetes 集群的状态、计算最优资源分配并应用有针对性的调度操作。
该过程分为以下阶段:
- 集群快照
- 资源分配和公平分配计算
- 调度操作
集群快照
调度周期始于捕获 Kubernetes 集群的完整快照。在此阶段,系统会记录节点、pod 组和队列的当前状态。
Kubernetes 对象可转换为内部数据结构,从而防止中期不一致,并确保所有调度决策均基于集群的稳定视图。
资源分配和公平分配计算
有了准确的快照,就可以通过资源分割算法为每个调度队列计算公平份额。该算法的结果是一个数值,该值表示队列应获得的最佳资源量,以最大限度地提高集群中所有队列之间的公平性。
除法算法具有以下阶段:
- 当之无愧配额: 每个调度队列最初都会分配与其基准配额(baseline quota)相等的资源。这可保证每个部门、项目或团队都能获得应有的最少资源。
- 超额配额 :任何剩余资源将按照超出配额权重的比例分配给未满足要求的队列。这种迭代过程会微调每个队列的公平比例,动态适应工作负载需求。
调度操作
计算公平份额后,调度程序会应用一系列有针对性的操作,使当前分配与计算出的最佳状态保持一致:
- 分配 :待处理作业的评估基于分配与公平分配比率。适合可用资源的作业会立即绑定,而需要当前释放资源的作业则会排队等待流水线分配。
- 整合:对于训练工作负载,调度程序会构建剩余待处理训练作业的有序队列。 它会对这些作业进行迭代,并尝试通过将当前分配的 pods 移动到其他节点来分配它们。此过程可最大限度地减少资源碎片化,为待处理作业释放连续块。
- 回收: 为确保公平性,调度程序可识别消耗超过合理比例的队列。然后,它根据定义明确的策略驱逐选定的作业,确保服务不足的队列获得必要的资源。
- 抢占先机 :在同一队列中,低优先级作业可以优先用于高优先级的待处理作业,确保关键工作负载不会因资源争夺而资源乏。
示例场景
设想一个集群有三个节点,每个节点配备八个 GPU,总共 24 个 GPU。目前正在进行两个项目:project-a 和 project-b。它们分别与 queue-a (中优先级队列) 和 queue-b (高优先级队列) 相关联。假设所有队列均在公平分配范围内。图 3 显示了当前状态。

- 节点 1: 训练作业 1 使用高优先级队列中的四个 GPU,训练作业 2 使用两个 GPU。
- 节点 2: 训练任务 3 使用六个 GPU。
- 节点 3:交互式作业 (包括数据探索或脚本调试) 使用 5 个 GPU。
现在有两个待处理的作业提交到队列中 (图 4) :
- 训练作业 A 需要在单个节点上使用四个连续的 GPU。
- 训练作业 B 需要向高优先级队列提交三个连续的 GPU。
分配阶段
调度程序按优先级对待处理作业进行排序。在本例中,Training Job B 会被优先处理,因为其队列在紧急程度方面排名较高。当然,作业订购流程比简单的优先级排序更复杂。调度程序使用高级策略来确保公平性和效率。
- 对于训练作业 B,节点 3 符合资格,因为它有三个连续的免费 GPU。调度程序将训练作业 B 绑定到节点 3,节点 3 将完全占用。
- 接下来,调度程序尝试分配训练任务 A。但是,没有一个节点提供四个连续的免费 GPU。
巩固阶段
由于无法通过分配操作来调度 Training Job A,因此调度程序进入整合阶段。它会检查节点,确定是否可以重新分配正在运行的 pods,以形成用于 Training Job A 的连续块。

- 在节点 1 中,除了 Training Job 1 (由于优先级较高,必须保持不变) 之外,Training Job 2 占用两个 GPUs。调度程序会将 Training Job 2 从节点 1 迁移到节点 2。
- 此次整合后,节点 1 的可用 GPU 数量从两个增加到四个连续的 GPU。
- 借助这种新布局,Training Job A 现在可以分配到 Node 1,从而满足四个连续的 GPU 的要求。
在这种情况下,整合行动已经足够了,既不需要 reclaim,也不需要 preempt。但是,如果队列中有一项额外的待处理作业低于其 fair share,且没有可用的整合路径,则调度程序的 reclaim 或 preempt 操作将开始执行,即从过度分配的队列或同一队列中的低优先级作业中回收资源,以恢复平衡。
状态更新
队列的状态会更新,并且整个周期会从头开始,以确保日程安排能够跟上新工作负载的发展。
社区协作
KAI 调度程序 不仅仅是一个原型。它是 NVIDIA Run:ai 平台 核心的强大引擎,受到许多企业的信任,并为关键的 AI 运营提供支持。凭借其可靠的跟踪记录,KAI 调度程序为 AI 工作负载编排设定了黄金标准。
我们邀请企业、初创公司、研究实验室和开源社区在您自己的环境中试验 scheduler,并贡献 learnings。
加入我们的 /NVIDIA/KAI-scheduler GitHub 资源库,为项目添加一颗星,进行安装,并分享您的真实体验。在我们不断突破 AI 基础架构的极限时,您的反馈对我们来说非常宝贵。
KubeCon 2025
NVIDIA 很高兴参加 4 月 1 日至 4 日在英国伦敦举行的 KubeCon 。欢迎在 S750 展位与我们互动,进行实时对话和演示。有关我们工作的更多信息,包括我们的 16 场演讲,请参阅 NVIDIA 在 KubeCon 上的会议。