人工智能工作负载调度解决方案与实践指南
1 人工智能工作负载调度解决方案与实践指南作者:Sabrina Di Leva、Kevin Hannon、Rajas Kakodkar、Ekin Karabulut、Victor Lu、Abhishek Malvankar、Alexander Scammon、Yuan Tang、Andrey Velichkevich、Marlow Warnicke贡献者:Shravan Achar,Andrew Shunichi Aikawa,Ricardo Aravena,Malini Bhandaru,Sachi Desai,Johnu George,Josh Halley,Naadir Jeewa,Boris Kurktchiev,Niki Manoledaki,Claudia Misale,Mike SH Ng,Ronald Petty,Sudhanshu Prajapati,Brian Redmond,Joel Roberts,Vijay Rodrigues,Kay Yan,Michael Yao,Adel Zaalouk,Cathy Zhang2 03 04 04 04 05 05 06 06 07 07 10 映射挑战到解决方案 08目录结论12执行摘要 03系列介绍先前解决方案图景Kubernetes原生功能调度器扩展与插件批处理调度器和队列管理器机器学习平台工具数据存储工具工作流编排非 Kubernetes 调度器实用指南选择调度堆栈 10 个常见模式与反模式 11 入门 113 系列介绍执行摘要1. 理解用于 Kubernetes 调度的 AI 工作负载:什么是 AI 工作负载以及它们与传统云原生应用程序有何不同本文是一系列关于云原生人工智能工作负载调度的第五篇也是最后一篇:理解 AI 工作负载、调度基础以及挑战是必要的,但并非充分——组织需要了解有哪些工具可用以及如何应用它们。 本文列出了可用于 AI 工作负载调度的解决方案:Kubernetes原生功能、调度器扩展、批处理调度器、机器学习平台工具和工作流编排器。它提供了一个参考表格,将挑战映射到解决方案,提供了关于选择调度堆栈的实用指南、常见的模式与反模式,以及具体的用例,展示了组织如何为不同场景配置调度。每一篇论文都可以独立阅读,但合在一起,它们为在 Kubernetes 上运行 AI 工作负载提供了全面的指南。5. 人工智能工作负载调度解决方案与实践指南(本文):工具、参考架构和实际应用案例2. AI工作负载的调度基础:Kubernetes调度机制及其为何需要额外层 3. AI工作负载的作业编排挑战:组调度、公平性、队列、抢占、优先级和预留 4 Kubernetes原生功能先前本系列的前四篇论文确立了:解决方案图景Kubernetes 包含几种与 AI 工作负载调度相关的功能:本文列举了相关解决方案,并提供了应用这些方案的实际指导。• 容器优先级与抢占。 优先级类为容器分配优先级等级。当资源稀缺时,高优先级容器可以抢占低优先级容器。限制:仅在容器级别生效,不作用于作业级别。 • 拓扑扩展约束。将容器分配到故障域(区域、区、节点)。有助于提升容错能力,但不适用于优化GPU通信拓扑。 • 可变调度指令。允许在作业挂起时修改其调度约束。自定义队列控制器使用此功能实现准入控制。 • 非抢占式优先级类。作业可以拥有高优先级(以便优先排队),而无需抢占正在运行的工作。适用于可以等待的紧急作业。• 论文4:资源和基础设施挑战包括拓扑感知、GPU共享、可扩展性、I/O瓶颈、容错性和成本限制。 GPU直接通信和网络拓扑等基础设施考量也会影响调度决策。• 论文1:AI工作负载跨越多个生命周期阶段,具有不同的资源特征。 训练是GPU密集型的,并且紧密耦合;推理对延迟敏感且具有状态性。 本节列出了用于解决论文3和4中讨论的调度挑战的工具和Kubernetes功能。5 • 能力调度:弹性配额管理,支持超额使用Kubernetes调度器可以通过插件进行扩展:让资源自然释放。调度器扩展与插件批处理调度器和队列管理器• 火山(Volcano)是一个CNCF项目,提供全面的批次调度功能。 其特性包括组调度、公平份额策略、队列管理和拓扑感知调度。广泛应用于训练工作负载。 这些工具在 Kubernetes 上增加了作业队列、公平共享和组调度功能:多个插件可以同时运行,但插件之间的交互需要仔细配置。• 联合调度:通过 PodGroups 实现组调度 • 节点资源:增强的资源分配算法调度器插件(kubernetes-sigs/scheduler-plugins)是一个存放树外调度器插件的仓库。 值得注意的插件包括:• 动态资源分配(DRA)。 一项较新的功能(GA,Kubernetes 1.34+),能够灵活分配专用资源。DRA 支持按需 GPU 划分,允许工作负载请求特定的 GPU 配置,而非整块 GPU。6 • Kubeflow 数据存储工具机器学习平台工具这些工具为人工智能工作流程提供了更高层次的表达方式:• 流体 (CNCF Sbx) 通过数据集缓存和数据移动优化,加速 AI 工作负载的数据访问。 减少导致 GPU 空闲的 I/O 瓶颈。• Kubeflow Katib 管理自动化机器学习工作负载——超参数优化和神经架构搜索。 协调具有不同配置的多个训练作业。• Kubeflow MPI Operator 支持分布式训练中的基于 MPI 的集体通信。 对于使用全归约(all-reduce)同步的工作负载至关重要。• Ray/KubeRay 提供了一个拥有自己调度器的分布式计算框架。 KubeRay 是用于运行 Ray 集群的 Kubernetes 运算符。适用于需要 Ray 编程模型的工作负载。• Kubeflow 训练器是一个原生的 Kubernetes 分布式 AI 平台,用于可扩展的大型语言模型微调和训练,支持跨多种框架的 AI 模型,包括 PyTorch、MLX、HuggingFace、DeepSpeed、JAX、XGBoost 等。它提供作业抽象层,用于处理工作节点协调,包括群组调度需求和高性能计算工作负载编排,如 MPI 和 Flux。• KServe 提供了一个标准化的分布式生成式和预测式 AI 推理平台,用于在 Kubernetes上进行可扩展的多框架部署。• MLflow 提供实验跟踪、模型注册和部署工具。 它不是调度器,但可与调度系统集成以进行工作流管理。• Slinky(由NVIDIA维护的开源项目)是一套强大的集成工具,旨在将Slurm的功能引入Kubernetes,既允许Slurm作业在Kubernetes中运行,也将整套Slurm调度功能引入Kubernetes。Apache YuniKorn 提供了基于分层队列和公平共享的统一调度,用于批处理和交互式工作负载。7 非 Kubernetes 调度器工作流编排这些工具管理多步骤的机器学习流水线:• Kubeflow(CNCF孵化项目):• Slurm 是 HPC 环境中的主流调度器。 许多组织在拥有
[云原生计算基金会]:人工智能工作负载调度解决方案与实践指南,点击即可下载。报告格式为PDF,大小1.16M,页数14页,欢迎下载。



