技术指南

用于 AI 训练集群的 Slurm

Slurm 是一款开源工作负载管理器,可以在高性能计算集群上调度和运行作业,它已成为大型 AI 训练的默认选择。

阅读时间:2分钟最后更新

概述

这很重要,因为它可以在数千个 GPU 上可靠地分配大量训练运行。

深入探讨

Slurm(用于资源管理的简单 Linux 实用程序)起源于超级计算,现在为世界上许多最大的人工智能训练集群提供支持。用户使用 sbatch 提交批处理脚本,使用 --gres=gpu:8 等指令请求节点和 GPU 等资源,以及 Slurm 队列、优先级并启动工作。它的 srun 启动器在节点之间生成协调的进程,这与 PyTorch DDP 和 NCCL 等分布式框架自然配对。 Slurm 跟踪资源核算,实施公平共享和分区限制,并处理回填调度以将小作业放入间隙中。对于前沿模型训练,团队依靠 Slurm 来管理数千个 GPU,在节点故障后从检查点重新启动,并为长时间的多周运行保留专用容量。

技术洞察

Slurm 控制器守护进程 (slurmctld) 做出调度决策,而每个节点上的 slurmd 代理启动任务并报告状态。通用资源 (GRES) 插件跟踪 GPU,以便作业明确请求它们。 srun 设置分布式训练库读取的环境变量(排名、世界大小、主地址)以引导 NCCL 通信。回填调度可以让较短的作业尽早运行,只要它们不延迟较高优先级的预留即可,从而保持较高的利用率。

战略影响

成本与预算

多年来,架构决策决定着性能和运营成本。

更清晰的判决

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。

质量控制

更好的工程选择可以减少生产中的可靠性事故。

AI 训练集群 Slurm 的未来

Slurm 继续添加云爆发、通过 Pyxis 和 Enroot 的容器支持以及更严格的 GPU 感知功能。随着 AI 集群扩展到超过 100,000 个 GPU,预计会有更强的容错能力、自动检查点重启集成以及在故障后调整大小的弹性作业。许多组织现在在 Kubernetes 旁边或之下运行 Slurm,混合调度程序旨在将 HPC 式的效率与云原生的灵活性相结合,以实现更大规模的训练运行。

现实世界的实施

前沿实验室使用请求数百个节点的单个 sbatch 脚本在数千个 GPU 上启动了为期数周的训练。

一名研究人员提交“srun --gres=gpu:8”以在一个节点上获取 8 个 GPU 来进行 PyTorch DDP 实验。

回填调度将一个简短的评估作业插入空闲 GPU,同时大量保留的训练运行等待开始。

节点在运行中失败后,Slurm 会重新排队作业,并从最新的检查点恢复,而不是重新开始。

风险与防护栏

优化一项基准测试可以隐藏更广泛的系统弱点。

基础设施和维护成本常常被低估。

随着系统变得更加复杂,安全性和可观察性差距可能会扩大。

实施路线图

1

在实施之前定义延迟、质量和成本目标。

2

在实际负载和数据条件下进行基准测试。

3

仪器监控错误、漂移和用户影响。

4

在扩展之前准备回滚和事件响应路径。

不断探索

Free newsletter

Get the daily AI briefing

Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.

One email each weekday. Unsubscribe in one click. We never sell or share your address.

Test yourself

Take the Slurm for AI Training Clusters quiz

Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.

开始测验

Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation

下一个指南

DeepSpeed 和 Megatron 训练堆栈

常见问题

什么是 AI 训练集群 Slurm?

Slurm 是一款开源工作负载管理器,可以在高性能计算集群上调度和运行作业,它已成为大型 AI 训练的默认选择。这很重要,因为它可以在数千个 GPU 上可靠地分配大量训练运行。

用户通常使用什么命令向 Slurm 提交批处理作业?

sbatch 将描述作业的资源和命令的批处理脚本提交到 Slurm 队列。

Slurm 作业如何请求 GPU?

通用资源 (GRES) 系统允许作业显式请求 GPU,例如 --gres=gpu:8。

哪个 Slurm 组件做出中央调度决策?

slurmctld 是调度作业的控制器守护进程,而 slurmd 在每个节点上运行以启动任务。

为什么 srun 能够与 PyTorch DDP 等分布式训练框架完美搭配?

srun 跨节点启动同步任务,并提供分布式库用于引导的排名和主地址信息。

Slurm中回填调度的目的是什么?

回填通过将较小的作业放入调度间隙中来提高利用率,只要它们不推回保留的作业即可。