作业脚本选项
日志 log 输出控制
作业脚本的标准输出和标准错误默认保存到同一个日志文件,名为
slurm-%j.out # `%j` 是作业编号
要改变标准输出,在作业脚本里加入
#SBATCH --output=filename_pattern
要改变标准错误,在作业脚本里加入
#SBATCH --error=filename_pattern
filename_pattern
是模式化的文件名,例如slurm-%A_%a.out
slurm-%A_%a.error
--account
付费账号关联,用户使用收费分区时,需要关联付费账号,在作业脚本里加入
#SBATCH --account=supervisor
请将 supervisor
替换为导师的账号名
--cpus-per-task
单个 task 需要的 cpu 核数。一个 task 进程可以多线程,需要使用多个 cpu 核。此选项 Slurm 系统会保证一个 task 进程所在的计算节点上有指定数量的 cpu 核可用。
例如,每个计算节点有 4 个 cpu 核,一个计算作业需要 24 个 cpu 核
- 直接声明 24 个 task,Slurm 系统将分配 6 个计算节点
- 指定
--cpus-per-task=3
,Slurm 系统将分配 8 个计算节点,确保一个 task 需要的 3 个 cpu 核是在同一个节点上
如果不设置此选项,Slurm 系统默认值是 1,即默认一个 task 分配一个 cpu 核
--gres
申请每计算节点上 GPU 资源的数量,在作业脚本里加入
#SBATCH --gres=gpu:X
其中 X
是数量,目前 gpu 分区每计算节点有 4 张 Nvidia Tesla V100,因此 X
不超过 4
--job-name
指定作业的名字,在作业脚本里加入
#SBATCH --job-name=jobname
jobname
是用户自定义的作业名,将显示在 squeue
查询信息里。如果不设置此选项,默认显示作业脚本的名字
--clusters
指定要在哪个集群上运行,knl
分区运行需要设置此选项,某些独占节点也需要,请按照管理员提供的名字做设置,在作业脚本里加入
#SBATCH --clusters=knl
--nodes
申请计算节点的数量,在作业脚本里加入
#SBATCH --nodes=X
其中 X
是数量,需要的计算节点的个数
--ntasks
指定要运行的 task 数量,在作业脚本里加入
#SBATCH --ntasks=X
其中 X
是数量。sbatch 不启动 task,只向 Slurm 系统申请需要的 cpu 核数,默认一个 task 申请一个 cpu 核,如果设置了 --cpus-per-task
选项,则会改变此默认数量
--ntasks-per-node
控制每个计算节点上运行 task 的数量,一般与 --nodes
配合使用,例如
MPI 程序需要 3 个计算节点,每节点 4 个进程,一共 12 个 task,对应 12 个 cpu 核
#SBATCH --nodes=3 #SBATCH --ntasks-per-node=4
还可以与 --cpus-per-task
选项配合使用,例如
MPI 程序需要 3 个计算节点,每节点 2 个进程,每个进程使用 OpenMP 运行 8 个线程,一共 48 个 cpu 核
#SBATCH --nodes=3 #SBATCH --ntasks-per-node=2 #SBATCH --cpus-per-task=8
--partition
超算上不同类型的计算资源,以资源分区的形式组织,指定使用哪个分区,在作业脚本里加入,例如申请在 hpxg
分区计算
#SBATCH --partition=hpxg
--nodelist
指定要运行的计算节点名,节点名之间用逗号分隔,例如
指定使用 n0050 n0051 n0052 n0053 n0180
#SBATCH --nodelist=n[0050-0053],n0180
--exclude
排除特定的计算节点,例如
分配资源的时候不要分配计算节点 n0050 n0051 n0052 n0053 n0180
#SBATCH --exclude=n[0050-0053],n0180
--exclusive
运行本任务的时候不与其它任务共享所分配的节点资源,Slurm 系统需要等待有满足任务要求并完全空闲的节点出现才会分配资源,并保证所分配的节点上没有其它任务运行,同时所分配节点上的所有 CPU 和 GPU 都将计费,无论本任务是否申请了这些资源,例如在 gpu
分区申请 1 核 1 卡且使用了 --exclusive
选项,将按照使用 20 核 4 卡的标准计费
#SBATCH --exclusive
作业脚本里可使用的环境变量
以下环境变量名在引用的时候需要加 $
符号,更多请查询 OUTPUT ENVIRONMENT VARIABLES
SLURM_CPUS_PER_TASK
如果设置了选项 --cpus-per-task
SLURM_JOB_NODELIST
分配给作业的计算节点列表
SLURM_NTASKS
如果设置了选项 --ntasks
,或由选项 --nodes
、--ntasks-per-node
以及--cpus-per-task
共同决定
SLURM_NTASKS_PER_NODE
如果设置了选项 --ntasks-per-node
SLURM_SUBMIT_DIR
运行 sbatch
时所在的目录
查询计算节点和分区状态
运行以下命令查看计算节点的状态信息
sinfo
其中 STATE
常见的有
alloc
,节点已经被分配给作业任务down
,节点当前不可用drain
,节点被管理员设置为退出服务idle
,节点当前空闲mix
,节点有部分计算资源已被分配,还有部分资源空闲可用