Slurm使用指南¶
1.Slurm简介¶
Slurm 是一个开源、容错和高度可扩展的集群管理和作业调度系统,适用于大型和小型 Linux 集群,它的主要优点在于其开源性质、容错能力和高度可伸缩的架构。与其他作业调度系统(如IBM的LSF和PBS)相比,Slurm的一个显著特点是它不需要修改操作系统内核,使其更易于集成和使用。在高性能计算(HPC)领域,Slurm被广泛用于管理集群资源和调度作业。不同于在登录节点上执行任务,Slurm允许用户将计算任务提交到专门的计算节点上。这样不仅提高了资源的使用效率,还保证了任务的有效管理和调度。
2.Slurm使用¶
Slurm概览
| Slurm命令 | 功能 |
|---|---|
| sinfo | 查看集群分区状态 |
| squeue | 查看排队作业状态 |
| sbatch | 作业提交 |
| scontrol | 查看和修改作业参数 |
| salloc | 交互式运行作业 |
| sacct | 查看已完成作业报告 |
| scancel | 删除作业 |
2.1查看节点与分区¶
2.1.1 sinfo——查看集群状态¶
| Slurm命令 | 功能 |
|---|---|
| sinfo/sinfo-a | 查看所有分区状态 |
| sinfo -N | 查看节点状态 |
| sinfo -n node-name | 查看指定节点状态 |
| sinfo --help | 查看所有选项 |
节点状态
| alloc | idle | mix | down | drain |
|---|---|---|---|---|
| 节点在用 | 节点可用 | 节点部分占用 | 节点下线 | 节点故障 |
2.1.2 squeue——查看作业信息¶
| Slurm命令 | 功能 |
|---|---|
| squeue | 查看运行中的作业 |
| squeue-l | 查看作业中的细节信息 |
| squeue -j jobid | 查看作业信息 |
| squeue --state=R | 查看特定状态的作业 |
| squeue --help | 查看所有选项 |
作业状态
| R | PD | CG | CD |
|---|---|---|---|
| 正在运行 | 正在排队 | 即将完成 | 已完成 |
- 默认情况下squeue只会展示在排队或在运行的作业
2.2 提交作业¶
slurm 有三种模式提交作业,分别为交互模式,批处理模式,分配模式,这三种方式只是作业提交方式的区别,在管理、调度、机时计算同等对待。一般使用批处理模式提交作业。
2.2.1 交互模式——srun¶
- srun命令同时用于资源分配和任务加载。
- 在登录shell中执行srun命令时,该命令首先提交作业请求并等待资源分配。
- 资源分配后,在所分配的节点上加载作业任务。
特点:提交命令后,等待作业执行完成之后返回命令行窗口,如果断开终端会导致任务中断。 例:交互式申请1个节点,每个节点启动的进程数为8,设置时间为3小时 命令:srun --nodes=1 --ntasks-per-node=8 --time=03:00:00 --pty bash -i
2.2.2 批处理模式——sbatch¶
- 批处理模式是指用户编写作业脚本,指定作业需要的资源,提交后台执行作业
- 作业提交后进入调度状态,在资源满足要求时,分配计算节点
- 分配到计算资源后,自动在计算节点执行用户所编辑的脚本内的命令,sbatch 命令提交作业,终端断开连接作业依然在后台运行束,直到脚本执行结束作业自动退出 (或者在作业运行时执行 scancel 命令取消作业后作业自动停止)
- 批处理作业的脚本为一个bash或sh文本文件
- 计算开始后,工作目录中会生成以slurm-作业号.out文件,为作业的输出
| Slurm命令 | 参数 | 含义 |
|---|---|---|
| #SBATCH -n 1 | --n=[count] | 指定总进程数 |
| #SBATCH -N 1 | --nodes=[count] | 申请节点数量 |
| #SBATCH -c 4 | --cpus-per-task=[count] | 每个任务所需要的核心数,默认为1,多线程需更改 |
| #SBATCH --cpus-per-task=4 | --ntasks-per-node=[count] | 每台节点上的进程数,默认为1,多进程需更改 |
| #SBATCH -p cpu | --partition=[name] | 指定分区 |
| #SBATCH -J name | --job-name=[name] | 指定作业名称 |
| #SBATCH -t 5:00 | --time=[time] | 作业最大运行时长,超时即被终止 |
| #SBATCH -a 0-2 | --array=[indexes] | 序列作业 |
| #SBATCH -w cu[03-04] | --nodelist=[names] | 指定申请需要包括的节点 |
| #SBATCH -o out.%j | --output=[file_name] | 输出文件 |
| #SBATCH -e eer.%j | --error=[file_name] | 错误文件 |
- 下面是一个test.slurm的作业脚本
#!/bin/bash
#SBATCH -J name
#SBATCH -p cpu
#SBATCH -N 1
#SBATCH --cpus-per-task=8
#SBATCH --mem 20G
#SBATCH -o out.%j
#SBATCH -e eer.%j
echo start at time `date +%F' '%H:%M`
echo finish at time `date +%F' '%H:%M`
2.2.3 分配模式¶
- 此模式支持用户在提交作业前抢占所需要的计算资源,此时开始计算计时。程序运行完成后作业不会自动停止,直到退出终端或 scancel 取消作业后作业才会停止,才会停止计费。
- 终端断开作业会立刻停止,如果作业未运行完成时终端断开会导致任务运行中断。
- 执行分为三步: (1) 提交资源分配请求,等待资源分配,资源分配到后开始计费。 (2) 执行用户指定的命令。 (3) 退出作业释放资源,停止计费。 例:申请cpu分区,两个节点,四个进程 命令:salloc -p cpu -N2 -n4 -w cu[03-05] /bin/bash
2.3 作业信息查询¶
2.3.1 查看和修改作业参数——scontrol¶
| Slurm命令 | 功能 |
|---|---|
| scontrol show job JOB_ID | 查看排队或正在运行的作业信息 |
| scontrol hold JOB_ID | 暂停JOB_ID |
| scontrol release JOB_ID | 恢复JOB_ID |
| scontrol update dependency=JOB_ID | 添加作业依赖性,以便仅在JOB_ID完成后才开始作业 |
- 注:scontrol hold 命令可使排队中尚未运行的作业暂停被分配运行,被挂起的作业将不被执行。scontrol release 命令可取消挂起。
2.3.2 查看作业记录——sacct¶
| Slurm命令 | 功能 |
|---|---|
| sacct -l | 查看详细的账户作业信息 |
| sacct --state=R | 查看具有特定状态的作业信息 |
| sacct -j JOB_ID | 查看已完成作业 |
| sacct --help | 查看所有选项 |
2.3.3 终止作业——scancel¶
| Slurm命令 | 功能 |
|---|---|
| scancel JOB_ID | 取消JOB_ID作业 |
| scancel -u username | 取消username用户的作业 |
3.Slurm使用技巧¶
3.1 Slurm插件¶
3.1.1 Slurm_tools¶
pestat¶
快速查看节点和任务信息
```
本文阅读量 次本站总访问量 次
Authors: