Slurm (Slurm Workload Manager)介绍
Slurm (Slurm Workload Manager),前身为 Simple Linux Utility for Resource Management,是一个开源、高度可扩展且容错的集群管理和作业调度系统。
它被广泛应用于全球许多超级计算机和大型计算集群中(在 Top500 超级计算机中占有极大份额)。简单来说,Slurm 就像是机房里的“大管家”和“交警”,负责指挥谁可以使用服务器、什么时候用、用多少资源。
核心功能
Slurm 主要做三件事:
- 资源分配:在特定时间内,为用户分配独占或共享的计算机节点(服务器)资源。
- 作业管理:提供一个框架,用于在分配的节点上启动、执行和监控工作(通常是并行作业,如 MPI、OpenMP 或大型深度学习训练)。
- 排队调度:通过管理一个待处理作业的队列,解决大量用户争夺有限计算资源的问题。
核心概念与术语
- Node(节点):集群中的单个物理服务器。
- Partition(分区):节点的逻辑分组。类似于“队列”,不同的分区可能有不同的配置(如
gpu分区、cpu分区、high高优先级分区、long长时间运行分区)。 - Job(作业):用户提交给 Slurm 的一个计算任务。
- Job Step(作业步):一个作业内部的一组具体任务(通常用
srun启动)。
命令指南
1. 查看集群状态
- **
sinfo**:查看集群所有分区和节点的状态(如 idle 空闲、alloc 已分配、down 故障等)。 - **
squeue**:查看当前排队或正在运行的作业列表。
2. 提交与运行作业
sbatch:最常用的方式。通过读取一个脚本文件,将作业提交到后台排队运行。即使你退出了终端,作业也会继续运行。- **
srun**:实时运行一个作业或作业步(通常用于测试,或在 sbatch 脚本内部启动并行任务)。 - **
salloc**:为交互式作业申请资源。比如你想临时借用一台 GPU 节点来调试代码。
3. 管理作业
- **
scancel <job_id>**:取消/终止一个作业。 - **
scontrol show job <job_id>**:查看某个作业的详细状态和配置信息。
一个标准的 sbatch 脚本示例
通常,你会写一个形如 submit.sh 的脚本,然后使用 sbatch submit.sh 提交:
1 |
|
为什么大家都用 Slurm?
- 高效的资源利用:防止多人同时在一台机器上跑满 CPU/GPU 导致死机。
- 公平性:通过内置的调度算法(如 Fairshare),确保每个团队或用户都能公平地分到算力,不会出现“先到的人一直占着不走”的情况。
- 可扩展性:小到几台机器的实验室集群,大到包含数万个节点的国家超级计算机,Slurm 都能轻松应对。