三种模式提交任务
批处理作业sbatch(最常用方式)
简介
批处理作业是指用户编写作业脚本,指定资源需求约束,提交后台执行作业。提交批处理作业的命令为sbatch,用户提交命令即返回命令行窗口,但此时作业在进入调度状态,在资源满足要求时,分配完计算节点之后,系统将在所分配的第一个计算节点(而不是登录节点)上加载执行用户的作业脚本。
典型使用场景
建议所有不需要交互的场景都是用sbatch进行提交
sbatch 命令使用示例
1.无现有脚本,用户需要执行单条命令
例如运行命令为make test,这个命令不需要交互,则可以通过sbatch来提交此命令:
sbatch -p compute -o make.log --wrap "make test"
此提交命令将make任务提交到compute分区中,并将make命令的标准输出和错误打印至make.log。
请注意:此命令执行后,会立即退出并返回命令行,如果需要sbatch命令等待任务结束后再退出,可以增加 -W 参数:sbatch -W -p compute -o make.log --wrap "make test"。
-W参数可用在许多非交互式任务中需要等待任务完成再执行下一步的场景。
2.用户有现有的脚本,通过脚本提交任务。例如用户的脚本名为mybash.sh,内容如下:
#!/bin/bash
hostname
2
用户sbatch命令如下:
sbatch -p compute -o mybash.log ./mybash.sh
srun 的常用命令选项:
-N 3 #指定最小节点数为 3
-n 4 #建议slurm controller最多运行4个task
-c 5 #--cpus-per-task, 建议slurm controller每个task需要5个cpu
--ntasks-per-node 6 # 请求每个节点运行6个task
-p p1-c1-4 #指定p1-c1-4分区,开启此分区内的机器
-o out.log #指定脚本的标准输出到 out.log 文件
-e err.log #指定脚本的标准错误输出到 err.log 文件
-J JOBNAME #指定任务名为 JOBNAME
-t 20 #限制运行 20 分钟
2
3
4
5
6
7
8
9
此提交命令将mybash.sh脚本提交到compute分区中,并将脚本的输出打印至mybash.log。 更多选项,用户可以通过sbatch --help命令查看。
交互式作业提交srun
简介
交互式提交作业,交互式意味着在任务的执行过程中,需要与任务进行交互。有屏幕输出,但容易受网络波动影响,断网或关闭窗口会导致作业中断。
典型使用场景
1.需要开启图形界面(GUI)的应用
2.需要terminal交互的场景,例如bash,dc_shell,pt_shell
srun 命令示例(交互式运行fluent任务):
srun -p p1-c1-4 -n 4 --pty /run_fluent.sh -i /test-data/run_fluent.jou -s 3ddp
其中:
-p p1-c1-4 指定提交任务到 p1-c1-4 分区
-n 4 指定进程数为 4,p1-c1-4 分区每一个节点4 核
--pty /run_fluent.sh 指定运行脚本run_fluent.sh,一般是客户自己写的脚本
-i /test-data/run_fluent.jou fluent脚本的参数,指定运行fluent任务的输入文件
-s 3ddp fluent脚本的参数,设置运行fluent任务的求解器
srun 的常用命令选项:
-N 3 #指定最小节点数为 3
-n 4 #指定要运行的任务数为 4
-c 5 #--cpus-per-task,请求每个进程分配5个cpu
--ntasks-per-node 6 # 请求每个节点运行6个task
-p p1-c1-4 #指定p1-c1-4分区,开启此分区内的机器
-o out.log #指定标准输出到 out.log 文件
-e err.log #指定重定向错误输出到 err.log 文件
-J JOBNAME #指定任务名为 JOBNAME
-t 20 #限制运行 20 分钟
2
3
4
5
6
7
8
9
更多选项,用户可以通过srun --help命令查看。
抢占资源命令salloc(不常用)
简介
该命令支持先获取资源,然后执行命令,在命令运行结束后释放资源。
常用选项
salloc的资源分配选项与sbatch基本一致,请参考文档中sbatch的参数部分,更多参数请使用salloc --help命令查看
salloc 命令使用示例
分配48核,共三台机器,每台机器预留716800M(700G)内存,并运行my_job.sh脚本
salloc -n 48 -N 3 --mem 716800 my_job.sh
my_job.sh脚本中,支持嵌套运行srun,因此对于有图形界面或者伪终端需求的应用,可以在my_job.sh中使用srun运行这类应用。