sbatch
# sbatch 命令
使用 sbatch
命令是最为推荐的方式,先编写一个脚本(别担心,很简单),然后用提交命令提交这个脚本即可。
天河对应的命令为 yhbatch
,本文以 yhq
命令为例进行介绍。
1)编写脚本
使用文本编辑器(例如vim等),创建一个用于提交作业的脚本文件,例如名为sub.sh的文件。
$ vim sub.sh
然后写入脚本内容
#!/bin/bash
yhrun -N 2 -n 24 -p debug executable [args...]
2
里面写的内容和yhrun
提交方式的内容完全相同。
2)提交脚本
$ yhbatch -N 2 -n 24 -p debug sub.sh
Submitted batch job 1454916
2
成功提交后,返回Submitted batch job 1454916
,这一串数字就是该任务的JOBID
。
参数说明如下:
关键词 | 含义 | 备注 |
---|---|---|
yhbatch | 提交批处理脚本的命令 | |
-N | 总节点数 | -N 2 表示用2个计算节点 |
-n | 总核数 | -n 24 表示一共用24个cpu核心 |
-p | 计算分区 | -p debug 表示用debug计算分区 |
sub.sh | 提交脚本名 | 可以依据任务不同编写其他名称的脚本文件 |
优势:使用这种方式提交的任务,会自动生成一个名为
slurm-jobid.out
的文件,其中jobid
是slurm分配给这个任务的具体编号数字。里面会有除了程序特殊指定,或用户重定向以外的所有作业的标准输出和错误信息。当计算任务出现错误的时候,我们也是第一时间查看该文件,寻找原因。
# 疑问:yhbatch 和 yhrun 都申请资源了?
当在 yhbatch 和 yhrun 命令中同时指定了如 -N -n 等参数时,谁会起作用呢?
1、首先,yhbatch 和 yhrun 命令起作用的顺序是:先通过 yhbatch 进行作业提交,作业成功提交后,会逐行运行作业脚本,直到运行到 yhrun 命令所在的行时 yhrun 的参数才会(尝试)生效)。
2、如果 yhbatch 指定了 -N -n ,而 yhrun 命令指定:那么 slurm 生成的该 jobid 中的环境变量就是 SLURM_NNODES 和 SLURM_NPROCS,也就是说 yhbatch 的参数形成了该任务运行脚本环境下的环境变量参数。 yhrun 不写 -N -n 时,就会通过读取环境变量的值来执行。因此,实际效果就是两个命令的 -N -n 参数是一样的。
3、如果 yhbatch 指定了 -N -n ,而 yhrun 命令也指定了。
(1)当yhrun运行需要的计算资源 < yhbatch申请的计算资源,那么就会真正执行 yhrun 指定的 -N -n 值,因此会造成申请的资源没有被充分利用,导致资源浪费。
(2)当yhrun运行需要的计算资源 = yhbatch申请的计算资源,这和 yhrun 不写参数效果一样,两者都是申请多少资源使用多少资源,比较推荐。
(3)当yhrun运行需要的计算资源 > yhbatch申请的计算资源,也就是申请的少,想用的多,那就会报错了,例如 yhrun: error: Only allocated 1 nodes asked for 2