超算作业提交:Slurm命令备忘录


0.常用术语

user:用户名
node:计算节点
core:cpu 核
job:作业
job step:作业步,单个作业可以有多个作业步
partition:分区,作业需在特定分区中运行
QOS:服务质量,可理解为用户可使用的 CPU、内存等资源限制
tasks:任务数,默认一个任务使用一个 cpu 核,可理解为作业所需的 cpu 核数
socket:cpu 插槽,可理解为物理 cpu 颗数
stdout:标准输出文件,程序运行正常时输出信息的文件,一般指输出到屏幕的信息
stderr:标准错误文件,程序运行出错时输出信息的文件,一般指输出到屏幕的信息

1 Slurm作业管理系统

大多数计算机集群(Cluster)系统都使用Slurm作业管理系统,采用共享模式。为避免系统资源浪费,使用时请尽量保证满核提交(即为单节点核数的整数倍),禁止在登录节点直接运行计算程序。作业管理系统常用命令如下:

2 sinfo查看系统资源

sinfo得到的结果是当前账号可使用的队列资源信息,如下所示:

第一列PARTITION是队列名。
第二列AVAIL是队列可用情况,如果显示up则是可用状态;如果是inact则是不可用状态。
第三列TIMELIMIT是作业运行时间限制,默认是infinite没有限制。
第四列NODES是节点数。
第五列STATE是节点状态,idle是空闲节点,alloc是已被占用节点,comp是正在释放资源的节点,其他状态的节点都不可用。
第六列NODELIST是节点列表。

sinfo的常用命令选项:

sinfo -n comput1
指定显示节点comput1的使用情况
sinfo -p com
指定显示队列com情况

其他选项可以通过sinfo –help查询

3 squeue查看作业状态

squeue得到的结果是当前账号的作业运行状态,如果squeue没有作业信息,说明作业已退出。

第一列JOBID是作业号,作业号是唯一的。
第二列PARTITION是作业运行使用的队列名。
第三列NAME是作业名。
第四列USER是超算账号名。
第五列ST是作业状态,R表示正常运行,PD表示在排队,CG表示正在退出,S是管理员暂时挂起。
第六列TIME是作业运行时间。
第七列NODES是作业使用的节点数。
第八列NODELIST(REASON)
对于运行作业(R状态)显示作业使用的节点列表;对于排队作业(PD状态),显示排队的原因。

squeue的 常用命令选项:

queue -j 123456
查看作业号为123456的作业信息
squeue -u paratera
查看超算账号为 paratera的作业信息
squeue –p com
查看提交到com队列的作业信息
squeue -w comput1
查看使用到comput1节点的作业信息

其他选项可通过squeue –help命令查看。

4 srun交互式提交作业

srun [options] program命令属于交互式提交作业,有屏幕输出,但容易受网络波动影响,断网或关闭窗口会导致作业中断。
srun 命令示例:

srun -p com -w comput[1-2] -N 2 -n 40 -t 20 A.exe

交互式提交A.exe程序。如果不关心节点和时间限制,可简写为srun -N 2 -n 40 A.exe

-p com指定提交作业到com队列;
-w comput[1-2] 指定使用节点comput[1-2];
-N 2 指定使用2个节点;
-n 40 指定进程数为40;
-t 20 指定作业运行时间限制为20分钟。

srun 的一些常用命令选项:

-N 3
指定节点数为3
-n 20
指定进程数为20
-c 20
指定每个进程(任务)使用的CPU核为20
-p com
指定提交作业到com 队列
-w comput[1-2]
指定提交作业到comput1、comput2节点
-x comput[1-2]
排除comput1、comput2节点
-o out.log
指定标准输出到out.log文件
-e err.log
指定重定向错误输出到err.log文件
-J JOBNAME
指定作业名为JOBNAME
-t 20
限制运行20分钟

srun的其他选项可通过srun –help查看。

5 sbatch后台提交作业

sbatch一般情况下与srun一起提交作业到后台,需要将srun写到脚本中,再用sbatch 提交脚本。这种方式不受本地网络波动影响,提交作业后可以关闭本地电脑。sbatch命令没有屏幕输出,默认输出日志为提交目录下的slurm-xxx.out文件,可以使用tail -f slurm-xxx.out实时查看日志,其中xxx为作业号。
sbatch命令示例1(40个进程提交A.exe程序):
编写脚本job1.sh,内容如下:

#!/bin/bash
srun -n 40 A.exe

然后在命令行执行sbatch -p com job1.sh 提交作业。脚本中的#!/bin/bash是bash脚本的固定格式。从脚本的形式可以看出,提交脚本是一个shell脚本,因此常用的shell脚本语法都可以使用。作业开始运行后,在提交目录会生成一个slurm-xxx.out日志文件,其中xxx表示作业号。
sbatch命令示例2(指定2个节点,4个进程,每个进程10个cpu核提交A.exe程序,限制运行60分钟):
编写脚本job2.sh,内容如下:

#!/bin/bash
#SBATCH -N 2
#SBATCH -n 4
#SBATCH -c 20
#SBATCH -t 60
srun -n 4 A.exe

然后在命令行执行sbatch -p com job2.sh就可以提交作业。其中#SBATCH注释行是slurm定义的作业执行方式说明,一些需要通过命令行指定的设置可以通过这些说明写在脚本里,避免了每次提交作业写很长的命令行。
sbatch命令示例3(单节点提交多任务)
编写脚本job3.sh,内容如下:

#!/bin/bash
srun -n 5 A.exe undefined
srun -n 5 B.exe undefined
srun -n 5 C.exe undefined
srun -n 5 C.exe undefined
wait

然后在命令行执行sbatch -N 1 -p com job3.sh,这里是单节点同时提交4个任务,每个任务使用5个进程。这里需要5个任务全部执行完毕,作业才会退出。
sbatch 的一些常用命令选项基本与srun的相同,具体可以通过sbatch –help查看。

6 salloc分配模式作业提交

salloc命令用于申请节点资源,一般用法如下:

1、执行salloc -p com;
2、执行squeue 查看分配到的节点资源,比如分配到n001;
3、执行ssh comput1登陆到所分配的节点;
4、登陆节点后可以执行需要的提交命令或程序;
5、作业结束后,执行scancel JOBID释放分配模式作业的节点资源。

7 scancel取消已提交的作业

scancel 可以取消正在运行或排队的作业。
scancel的一些常用命令示例:

scancel 123456
取消作业号为123456的作业
scancel -n test
取消作业名为test的作业
scancel -p com
取消提交到com队列的作业
scancel -t PENDING
取消正在排队的作业
scancel -w comput1
取消运行在comput1节点上的作业

scancel的其他参数选项,可通过scancel –help查看

8 scontrol查看正在运行的作业信息

scontrol命令可以查看正在运行的作业详情,比如提交目录、提交脚本、使用核数情况等,对已退出的作业无效。
scontrol的常用示例:

scontrol show job 123456

查看作业号为123456的作业详情。
scontrol 的其他参数选项,可通过scontrol –help查看。

9 sacct查看历史作业信息

sacct命令可以查看历史作业的起止时间、结束状态、作业号、作业名、使用的节点数、节点列表、运行时间等。
sacct的常用命令示例:

sacct -u paratera -S 2018-07-01 -E now –field=jobid,partition,jobname,user,nnodes,nodelist,start,end,elapsed,state

其中,-u paratera是指查看paratera账号的历史作业,-S是开始查询时间,-E是截止查询时间,–format定义了输出的格式,jobid是指作业号,partition是指提交队列,user是指超算账号名,nnodes是节点数,nodelist是节点列表,start是开始运行时间,end是作业退出时间,elapsed是运行时间,state是作业结束状态。sacct –helpformat可以查看支持的输出格式。
sacct的其他参数选项可通过sacct –help查看。

10 作业模版

#!/bin/bash
#SBATCH -p com 指定队列名称
#SBATCH -J test 指定作业名称
#SBATCH -N 2 指定要提交的节点数量
#SBATCH -n 8 指定要提交的总核数
#SBATCH -o test.o 指定标准输出文件名
#SBATCH -e test.e 指定错误输出文件名
srun -N 2 -n 8 -p com hostname 程序运行命令

11 Linux 常用命令

  1. date :显示或设置系统时间

  2. ls :列出当前或指定目录下的文件或目录。

  3. pwd: 显示当前目录

  4. cd : 进入指定目录

  5. more, less, head tail: 显示或部分显示文件内容.

  6. lp/lpstat/cancel, lpr/lpq/lprm: 打印文件的有关命令.
  7. chmod:更改文件读、写或执行权限

  8. rm :删除文件或目录

  9. cp:拷贝文件或目录
  10. mv : 文件更名或移动
  11. vi/vim:文本编辑器

  12. top : 查看系统长时间运行的主要进程

  13. fg jobid :可以将一个后台进程放到前台。
    Ctrl-z 可以将前台进程挂起(suspend), 然后可以用 bg jobid 让其到后台运行。
    job undefined 可以直接让 job 直接在后台运行。

  14. ps:查看系统进程, ps -e 或 ps -o pid,ppid,session,tpgid, comm (其中 session 显示的 sessionid, tpgid 显示前台进程组 id, comm 显示命令名称。)
  15. kill : 杀掉一个指定进程号的进程或向系统发送一个信号。
  16. scp: 远程文件拷贝。

  17. man :给出指定命令的详细使用说明。

  18. Linux 的绝大部分命令都可以用man命令来查看更详细的说明。

12 其他教程

官方手册(英文):https://slurm.schedmd.com/documentation.html

官方手册(中文):https://docs.slurm.cn/users/kuai-su-ru-men-yong-hu-zhi-nan

Slurm作业调度系统指南(中科大超算中心):http://hmli.ustc.edu.cn/doc/userguide/slurm-userguide.pdf

附录:Slurm Cheat Sheet


文章作者: Luo Xiao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Luo Xiao !
  目录