JobSet 的 Alauda Build
JobSet
JobSet 的 Alauda Build 基于 JobSet Kubernetes SIG 项目。
JobSet 是一个面向 Kubernetes 的原生 API,用于将一组 Kubernetes Jobs 作为单个单元进行管理。它为在 Kubernetes 上部署 HPC(例如 MPI)和 AI/ML 训练工作负载(PyTorch、JAX、TensorFlow 等)提供统一的 API。
主要组件和能力包括:
- JobSet CRD:核心 API 资源(
jobset.x-k8s.io/v1alpha2、kind: JobSet),用于定义一组ReplicatedJobs。每个ReplicatedJob都是一个 Job 模板,控制器会将其实例化为一个或多个 Kubernetes Jobs,从而允许不同的 Pod 模板(leader、workers、parameter servers 等)在同一个工作负载中共存。 - 多模板 Jobs:可以在单个资源中建模不同的 Pod 组,因此像 leader/worker、driver/worker 或 parameter-server/worker 这类工作负载不再需要通过手动协调多个顶层 Jobs 来实现。
- 自动 Headless Service 和稳定主机名:JobSet 会自动配置 headless Service,并使用 IndexedJobs 为每个 Pod 提供稳定的 DNS 主机名,为分布式训练框架(PyTorch DDP、Horovod、JAX、TensorFlow、MPI 等)提供可预测的网络标识。
- 可配置的失败与成功策略:失败策略控制 JobSet 重启的次数以及不同失败类型的处理方式;当目标子集的
ReplicatedJobs成功时,成功策略会将 JobSet 声明为完成,从而在有意义的工作完成后即可释放资源。 - 启动顺序:可以配置启动策略,使 worker Jobs 在 leader(driver)Job 就绪后再启动,支持 leader/worker 模式,其中主进程必须先初始化,worker 才能连接。
- 独占拓扑放置:通过注解,JobSet 可以强制子 Job 与拓扑域(例如机架或可用区)之间建立 1:1 映射,使子 Job 在该域内独占计算资源,以实现性能隔离。
- 快速故障恢复:发生故障时,JobSet 可以快速重建子 Job。如果工作负载支持 checkpointing,则可在重启后从上次保存的 checkpoint 继续执行。reconciler 经过优化,即使在大规模场景下也能尽量减少对调度吞吐量的影响。
- 与 Kueue 集成:JobSet 可与 Kueue 集成,用于批处理 AI/ML 工作负载的排队、多租户和资源共享。
在平台上安装,请参见 安装 JobSet。
文档
JobSet 上游文档和相关资源:
- JobSet 文档:https://jobset.sigs.k8s.io/ — 涵盖概念、API 参考和使用指南的官方文档。
- JobSet GitHub:https://github.com/kubernetes-sigs/jobset — JobSet Kubernetes SIG 项目的源代码、API 参考和示例。
- Kueue(Alauda Build):../kueue/intro — JobSet 与 Kueue 集成,用于批处理工作负载的排队和资源管理。