介绍
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/v1alpha2,kind: 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 上游文档和相关资源:
- 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 集成,用于批量工作负载的排队和资源管理。