|
| 1 | +# Kubernetes 全新特性 Gang Scheduling |
| 2 | + |
| 3 | +!!! tip |
| 4 | + |
| 5 | + DaoCloud 率先发起 Kubernetes 全新特性 Gang Scheduling,夯实 AI Infra 调度底座,全面适配 AI/ML 负载。 |
| 6 | + |
| 7 | +在 AI Infra 时代,Kubernetes 正在经历一次深刻的调度范式转变。 |
| 8 | +随着大模型训练、分布式推理、向量检索、批处理计算等 AI/ML 与 GenAI 场景的爆发式增长, |
| 9 | +**如何高效调度“大规模 AI 负载”**,已经成为 AI Infra 与云原生平台必须直面的核心问题。 |
| 10 | + |
| 11 | +而这类问题,仅靠单个 Pod 或逐个 Pod 调度的传统思路,已经远远不够了。 |
| 12 | +Kubernetes v1.35 基于 Gang Scheduling 等全新特性推出了 |
| 13 | +**工作负载感知调度(Workload Aware Scheduling)** 。 |
| 14 | + |
| 15 | + |
| 16 | + |
| 17 | +## 从「调度 Pod」到「调度 AI 负载」 |
| 18 | + |
| 19 | +在 AI Infra 场景中,调度一个大型工作负载,要比调度一个单独的 Pod 复杂且脆弱得多。 |
| 20 | + |
| 21 | +现实中的 AI 训练与推理任务,往往具有以下特征: |
| 22 | + |
| 23 | +* **一组 Pod 需要作为一个整体被调度** ,而非逐个、独立调度 |
| 24 | +* **需要统一的资源与拓扑规划** ,例如: |
| 25 | + * GPU/NPU 数量对齐 |
| 26 | + * 位于同一机架、同一 NUMA 域或同一高速互联拓扑 |
| 27 | +* 资源必须 **要么一次性到位,要么完全不启动** |
| 28 | + |
| 29 | +以分布式大模型训练为例,如果只成功调度了部分 worker 或 parameter 服务器: |
| 30 | + |
| 31 | +* 训练任务无法真正开始 |
| 32 | +* GPU 等昂贵算力被长时间空占 |
| 33 | +* 甚至可能导致调度阻塞和集群资源碎片化 |
| 34 | + |
| 35 | +更关键的是,在 **AI Infra 的调度视角** 下,这类工作负载中的 Pod **通常是完全同构的** : |
| 36 | +相同镜像、相同资源规格、相同调度约束。 |
| 37 | + |
| 38 | +这从根本上要求 Kubernetes 的调度模型,从「Pod 级」升级到 **Workload/Job 级** 。 |
| 39 | + |
| 40 | +## 为什么 AI Infra 需要原生的 Workload 级调度? |
| 41 | + |
| 42 | +过去几年,社区和厂商已经为 AI、Batch、HPC 等场景构建了不少 **定制调度器** : |
| 43 | + |
| 44 | +* AI 专用调度器 |
| 45 | +* 批处理调度器 |
| 46 | +* 外部 Gang/Queue 调度系统 |
| 47 | + |
| 48 | +但在 AI Infra 规模化落地过程中,问题逐渐显现: |
| 49 | + |
| 50 | +* **工作负载级调度是通用能力,而非小众需求** |
| 51 | +* 对 AI 用户而言,这是 Kubernetes 的“基础设施能力”,不是“插件能力” |
| 52 | +* 依赖外部调度器或私有实现,会导致: |
| 53 | + * 调度语义割裂 |
| 54 | + * 生态不统一 |
| 55 | + * 运维与演进成本极高 |
| 56 | + |
| 57 | +因此,让 **AI 负载成为 kube-scheduler 的一等公民** , |
| 58 | +在 Kubernetes 原生调度层面提供能力支持,已经成为社区共识。 |
| 59 | + |
| 60 | +这也是 **新一代 AI Infra 调度体系** 的必经之路。 |
| 61 | + |
| 62 | +## Kubernetes 1.35:AI Infra 调度能力的重要里程碑 |
| 63 | + |
| 64 | +**2025 年 12 月 17 日** 发布的 **Kubernetes v1.35** ,首次交付了一批 **工作负载感知调度** 能力。 |
| 65 | + |
| 66 | +这不仅是一次功能更新,更是 Kubernetes 面向 **AI Infra 场景** 的架构级演进起点。 |
| 67 | + |
| 68 | +!!! tip "长期目标" |
| 69 | + |
| 70 | + 在 Kubernetes 中,实现原生、统一、可扩展的工作负载级调度与管理能力 |
| 71 | + |
| 72 | +该演进计划将跨越多个 SIG、多个版本,逐步增强系统在 AI Infra 维度的能力,包括: |
| 73 | + |
| 74 | +* 工作负载级抢占(Preemption) |
| 75 | +* 与自动扩缩容(Autoscaling)的深度协同 |
| 76 | +* 拓扑与异构算力感知调度(GPU/DRA/NUMA) |
| 77 | +* AI 作业生命周期内的调度策略管理 |
| 78 | + |
| 79 | +## 全新 Workload API:为 AI Infra 描述“如何调度” |
| 80 | + |
| 81 | +Kubernetes v1.35 正式引入 **Workload API** |
| 82 | +(`scheduling.k8s.io/v1alpha1`),这是 AI Infra 调度体系的关键抽象。 |
| 83 | + |
| 84 | +其核心思想是: |
| 85 | + |
| 86 | +* **业务 Workload(如 Job/Training Job)负责描述“运行什么”** |
| 87 | +* **Workload API 专注描述“一组 Pod 如何被调度”** |
| 88 | + |
| 89 | +通过这一解耦,Kubernetes 首次在原生层面具备了: |
| 90 | + |
| 91 | +* 用结构化、机器可读的方式表达 AI 作业的调度需求 |
| 92 | +* 在 Workload 整个生命周期内持续管理调度策略 |
| 93 | + |
| 94 | +这是 AI Infra 能力体系中极为关键的一步。 |
| 95 | + |
| 96 | +## Gang Scheduling:为 AI/ML 与大模型训练而生 |
| 97 | + |
| 98 | +在 Workload API 中,最受 AI Infra 关注的能力之一, |
| 99 | +正是 **Gang Scheduling(成组调度)** 的原生实现。 |
| 100 | + |
| 101 | +### 什么是 Gang Scheduling? |
| 102 | + |
| 103 | +Gang Scheduling 的核心思想是:将一组 Pod 视为一个调度单元,采用 **全有或全无(All-or-Nothing)** 的调度策略 |
| 104 | + |
| 105 | +只有当一组 Pod 中 **至少满足指定数量(`minCount`)可以同时运行** 时,调度才会真正发生。 |
| 106 | + |
| 107 | +这正是分布式 AI 训练与推理的刚性需求。 |
| 108 | + |
| 109 | +### 示例:一个用于 AI 训练的 Gang Workload |
| 110 | + |
| 111 | +```yaml |
| 112 | +apiVersion: scheduling.k8s.io/v1alpha1 |
| 113 | +kind: Workload |
| 114 | +metadata: |
| 115 | + name: training-job-workload |
| 116 | + namespace: some-ns |
| 117 | +spec: |
| 118 | + podGroups: |
| 119 | + - name: workers |
| 120 | + policy: |
| 121 | + gang: |
| 122 | + # 只有当至少 4 个 Pod(例如 4 张 GPU)可以同时运行时,才允许调度 |
| 123 | + minCount: 4 |
| 124 | +``` |
| 125 | +
|
| 126 | +对应的 Pod 只需通过 `workloadRef` 与 Workload 关联: |
| 127 | + |
| 128 | +```yaml |
| 129 | +apiVersion: v1 |
| 130 | +kind: Pod |
| 131 | +metadata: |
| 132 | + name: worker-0 |
| 133 | + namespace: some-ns |
| 134 | +spec: |
| 135 | + workloadRef: |
| 136 | + name: training-job-workload |
| 137 | + podGroup: workers |
| 138 | + ... |
| 139 | +``` |
| 140 | + |
| 141 | +这使得 **AI Infra 调度策略** 从零散的 Pod 配置,升级为统一、清晰的工作负载模型。 |
| 142 | + |
| 143 | +## Gang Scheduling 在 kube-scheduler 中的工作机制 |
| 144 | + |
| 145 | +启用 Gang Scheduling 后,kube-scheduler 中的 `GangScheduling` |
| 146 | +插件将以 **Pod Group(AI 作业单元)** 为核心管理调度流程: |
| 147 | + |
| 148 | +1. **阻断阶段(Blocking)** |
| 149 | + |
| 150 | + Pod 不会立即进入调度流程,直到: |
| 151 | + |
| 152 | + * Workload 已创建 |
| 153 | + * PodGroup 已定义 |
| 154 | + * Pending Pod 数量达到 `minCount` |
| 155 | + |
| 156 | +2. **Permit 阶段** |
| 157 | + |
| 158 | + 调度器为整个 Pod Group 寻找可行节点,但暂不绑定资源 |
| 159 | + |
| 160 | +3. **原子绑定/回滚** |
| 161 | + |
| 162 | + * 若整体资源满足:**所有 Pod 一次性绑定** |
| 163 | + * 若在超时时间内(默认 5 分钟)无法满足: |
| 164 | + |
| 165 | + * **拒绝整个 Pod Group** |
| 166 | + * 回收所有预留资源 |
| 167 | + * 重新进入调度队列 |
| 168 | + |
| 169 | +这一机制,从根本上避免了 AI Infra 中最常见的痛点: |
| 170 | +**“GPU 只上来一半,训练却永远跑不起来”** |
| 171 | + |
| 172 | +!!! note |
| 173 | + |
| 174 | + 该特性当前仍为 **Alpha** ,属于原生 Gang Scheduling 的初始实现。 |
| 175 | + 社区已规划在后续版本中持续增强,包括: |
| 176 | + |
| 177 | + * 单调度周期内完成整个 Gang 调度 |
| 178 | + * 工作负载级抢占与资源重分配 |
| 179 | + |
| 180 | +## 机会式批处理:让同构 AI Pod 调度更快 |
| 181 | + |
| 182 | +除了显式的 Gang Scheduling,Kubernetes v1.35 还引入了一个 |
| 183 | +对 AI Infra 极其友好的 Beta 特性: |
| 184 | +**Opportunistic Batching(机会式批处理)** |
| 185 | + |
| 186 | +其核心优势在于: |
| 187 | + |
| 188 | +* **无需 Workload API** |
| 189 | +* **无需用户额外配置** |
| 190 | +* 调度器自动识别 **调度条件完全一致的 Pod** |
| 191 | +* 复用节点可行性计算结果,大幅降低调度开销 |
| 192 | + |
| 193 | +在 AI 训练、推理、向量计算等场景中, |
| 194 | +大量 **同构 Pod(Same Shape Pod)** 可以直接受益。 |
| 195 | + |
| 196 | +!!! note |
| 197 | + |
| 198 | + 在部分实测场景中: |
| 199 | + **Gang Scheduling + 机会式批处理** 对 AI 负载的调度吞吐提升 **最高可达 42 倍** |
| 200 | + |
| 201 | +## DaoCloud:深度参与 AI Infra 核心调度演进 |
| 202 | + |
| 203 | +值得一提的是: |
| 204 | + |
| 205 | +**DaoCloud 早在 2024 年 5 月,就已在 Kubernetes 社区正式发起 Gang Scheduling 的 KEP 提案** |
| 206 | + |
| 207 | +* [KEP 编号:#4671](https://github.com/kubernetes/enhancements/issues/4671) |
| 208 | +* 发起 SIG:`sig-scheduling` |
| 209 | +* DaoCloud 多名工程师长期担任该 SIG 的 **Approver** |
| 210 | + |
| 211 | +这不仅是一次调度特性的贡献,更体现了 DaoCloud 在 **云原生 + AI Infra** 方向上的长期战略投入。 |
| 212 | + |
| 213 | +## 北极星愿景:面向 AI Infra 的真正工作负载级调度 |
| 214 | + |
| 215 | +工作负载感知调度只是起点。围绕 **AI Infra 与大规模工作负载** ,社区已经明确提出了更宏大的北极星目标,包括: |
| 216 | + |
| 217 | +* 独立的工作负载调度阶段 |
| 218 | +* 更完善的 GPU/DRA/拓扑感知能力 |
| 219 | +* 工作负载级抢占与公平性保障 |
| 220 | +* 调度与自动扩缩容的深度集成 |
| 221 | +* 原生与外部 AI 调度器的协作 |
| 222 | +* 工作负载生命周期内的调度策略管理 |
| 223 | +* 多 Workload 并发调度仿真与评估能力 |
| 224 | + |
| 225 | +Kubernetes 正在从“Pod 调度器”,进化为 **面向 AI Infra 的 Workload 调度与管理平台** 。 |
| 226 | + |
| 227 | +## 写在最后 |
| 228 | + |
| 229 | +AI/ML 正在重塑基础设施,而 Kubernetes 也正在重塑自己。 |
| 230 | + |
| 231 | +从 **Gang Scheduling** 到 **Workload API** , |
| 232 | +从 **机会式批处理** 到 **工作负载感知调度** , |
| 233 | +这些变化背后,是 AI Infra 对云原生基础能力提出的全新要求。 |
| 234 | + |
| 235 | +DaoCloud 将持续深度参与 Kubernetes 核心调度能力的演进, |
| 236 | +让云原生真正成为 **AI Infra 时代最稳固、最高效的基础底座** 。 |
| 237 | + |
| 238 | +!!! tip |
| 239 | + |
| 240 | + 关注 DaoCloud,持续解锁 Kubernetes × AI Infra 前沿能力。 |
0 commit comments