介绍

JobSet

Alauda Build 的 JobSet 基于 JobSet Kubernetes SIG 项目。 JobSet 是一个 Kubernetes-native API,用于将一组 Kubernetes Jobs 作为单个单元进行管理。它为在 Kubernetes 上部署 HPC(例如 MPI)和 AI/ML 训练工作负载(PyTorch、JAX、TensorFlow 等)提供了统一的 API。

主要组件和能力包括:

  • JobSet CRD:核心 API 资源(jobset.x-k8s.io/v1alpha2kind: JobSet),用于定义一组 ReplicatedJobs。每个 ReplicatedJob 都是一个 Job 模板,控制器会将其实例化为一个或多个 Kubernetes Jobs,从而允许不同的 pod 模板(leader、worker、parameter server 等)在同一工作负载中共存。
  • 多模板 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 可以强制 child Job 与拓扑域(例如机架或可用区)之间建立 1:1 映射,从而让 child Job 独占该域中的计算资源,以实现性能隔离。
  • 快速故障恢复:发生故障时,JobSet 可以快速重新创建 child Jobs。如果工作负载支持检查点,则重启后可以从上次保存的检查点继续执行。reconciler 经过优化,即使在大规模场景下也能将对调度吞吐量的影响降到最低。
  • 与 Kueue 集成:JobSet 与 Kueue 集成,用于批量 AI/ML 工作负载的排队、多租户和资源共享。

关于平台上的安装,请参见 安装 JobSet

文档

JobSet 上游文档和相关资源: