外观
sbatch 批量提交作业
sbatch 是 Slurm 中最常用的批处理作业提交命令。用户把资源需求和运行命令写入脚本后,通过 sbatch 提交到队列,作业会在后台排队并由调度系统安排运行。
这种方式适合正式计算任务,例如 VASP、Amber、Gaussian、批量数据处理和训练脚本等。提交后即使终端断开,作业也不会因为 SSH 会话结束而中断。
sbatch 简介
sbatch 是 Slurm 工作负载管理器中的一个命令,用于提交批处理作业到计算集群中。Slurm 是常用的高性能计算集群调度器,允许用户提交、监控和管理作业。sbatch 通常用于执行不需要交互的作业脚本,它会将作业发送到集群中的队列中,等待调度器安排其运行。
bash
# 首先,使用 sbatch命令来提交批处理作业到计算集群中,它的语法为:
sbatch [options] <script_name>
# script_name:你要提交的包含作业指令的批处理脚本(通常是 Shell 脚本,.sh 文件)
# 作业脚本是一个 Shell 脚本文件,包含了作业的执行命令和相关的 Slurm 选项。这些选项可以直接写在脚本里,也可以通过命令行参数传递,以下为常用选项:
**--job-name=<name>** :指定作业的名称,方便后续查询和管理。
**--output=<file>** :指定标准输出的文件路径,默认标准输出到作业的<job_id>.out文件中。
**--error=<file>** :指定标准错误输出的文件路径,默认错误输出到<job_id>.err文件中。
**--ntasks=<num_tasks>**:指定任务的数量,ntasks=1 表示单个任务运行。
**--cpus-per-task=<num_cpus>**:为每个任务分配的 CPU 核心数。
**--mem=<memory_size>**:指定每个节点需要分配的内存,单位可以是 MB 或 GB。
**--time=<time_limit>**:指定作业的最长运行时间,格式为HH:MM:SS。超时后作业将会被强制终止。
**--partition=<partition_name>**:指定提交到的集群分区(通常是不同的计算资源池)。
**--gres=gpu:<num_gpus>**:指定需要的 GPU 数量。例如 --gres=gpu:1 表示请求 1 个 GPU。
**--mail-type=<type>**:设置作业状态变化时发送电子邮件的条件,例如 BEGIN, END, FAIL, ALL。
**--mail-user=<email>**:指定接收通知的电子邮件地址。批处理作业-示例1(GPU)
GPU节点一般不跨节点,建议使用 qgpu_3090, qgpu_4090, qqpu_a40 队列,且提交作业时要声明使用几块GPU卡,非必要可以不用写CPU核数。
申请qgpu_3090队列1节点,16核,32GB内存,1块GPU,作业时间最大为1小时,任务数为1。此示例作业中执行的是hostname获取当前节点主机名。
bash
[demo@login2 ~]$ vim example_job.sh
#!/bin/bash
#SBATCH --job-name=example_job # 作业名称
#SBATCH --partition=qgpu_3090 # 提交到的分区
#SBATCH --nodes=1 # 申请节点数量
#SBATCH --ntasks-per-node=1 # 运行任务数量
#SBATCH --cpus-per-task=16 # 每个任务使用的 CPU 核心数
#SBATCH --gres=gpu:1 # 若使用 2 块卡,就给 gres=gpu:2
#SBATCH --mem=32G # 每个节点的内存需求
#SBATCH --time=01:00:00 # 作业最大运行时间 (格式:小时:分钟:秒)
#SBATCH --output=output.txt # 标准输出文件
#SBATCH --error=error.txt # 标准错误输出文件
hostname #执行的命令运行 sbatch 命令来提交作业:
bash
[demo@login2 ~]$ sbatch example_job.sh
Submitted batch job 273675运行此命令后,作业将被提交到集群中,并返回一个作业 ID。可以通过作业 ID 来查询和管理作业。用户可以在作业执行期间通过SSH登录到计算节点。输出将实时更新到文件output.txt和error.txt。
bash
[demo@login2 ~]$ ll
total 1
-rw-r--r-- 1 demo domain users 0 Sep 20 10:50 error.txt
-rw-r--r-- 1 demo domain users 543 Sep 20 10:50 example_job.sh
-rw-r--r-- 1 demo domain users 19 Sep 20 10:50 output.txt
# 查看output.txt
[demo@login2 ~]$ cat output.txt
gnode12.tibhpc.net批处理作业-示例2(CPU)
申请qcpu_23a队列1节点,20核,16GB内存,作业时间最大为1小时,任务数为1。此示例作业中执行的是hostname获取当前节点主机名。
bash
[demo@login2 ~]$ vim example_job.sh
#!/bin/bash
#SBATCH --job-name=example_job # 作业名称
#SBATCH --output=output.txt # 标准输出文件
#SBATCH --error=error.txt # 标准错误输出文件
#SBATCH --ntasks=1 # 运行任务数量
#SBATCH --cpus-per-task=20 # 每个任务使用的 CPU 核心数
#SBATCH --mem=16G # 每个节点的内存需求
#SBATCH --time=01:00:00 # 作业最大运行时间 (格式:小时:分钟:秒)
#SBATCH --partition=qcpu_23a # 提交到的分区
hostname #执行的命令运行 sbatch 命令来提交作业:
bash
[demo@login2 ~]$ sbatch example_job.sh
Submitted batch job 273664运行此命令后,作业将被提交到集群中,并返回一个作业 ID。可以通过作业 ID 来查询和管理作业。用户可以在作业执行期间通过SSH登录到计算节点。输出将实时更新到文件output.txt和error.txt。
bash
[demo@login2 ~]$ ll
total 1
-rw-r--r-- 1 demo domain users 0 Sep 20 11:50 error.txt
-rw-r--r-- 1 demo domain users 543 Sep 20 11:50 example_job.sh
-rw-r--r-- 1 demo domain users 19 Sep 20 11:50 output.txt
# 查看output.txt
[demo@login2 ~]$ cat output.txt
gnode19.tibhpc.net查看作业状态
查看作业状态
bash
# 这个命令会列出所有正在等待或正在运行的作业
[demo@login2 ~]$ squeue
-l选项查看更多信息
[demo@login2 ~]$ squeue -l取消作业
bash
# 使用 scancel <job_id> 来取消一个已经提交的作业
[demo@login2 ~]$ scancel 273664显示过去 24小时 的帐号作业信息
bash
[demo@login2 ~]$ sacct
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
273663 example_j+ qcpu_23a d_gly 20 FAILED 127:0
273663.batch batch d_gly 20 FAILED 127:0
273663.exte+ extern d_gly 20 COMPLETED 0:0
273664 example_j+ qcpu_23a d_gly 20 COMPLETED 0:0
273664.batch batch d_gly 20 COMPLETED 0:0
273664.exte+ extern d_gly 20 COMPLETED 0:0
273674 test qgpu_a800 d_gly 16 FAILED 127:0
273674.batch batch d_gly 16 FAILED 127:0
273674.exte+ extern d_gly 16 COMPLETED 0:0
273675 example_j+ qgpu_3090 d_gly 16 COMPLETED 0:0
273675.batch batch d_gly 16 COMPLETED 0:0
273675.exte+ extern d_gly 16 COMPLETED 0:0查看平均作业内存消耗和最大内存消耗.
bash
$ sacct --format="JobId,AveRSS,MaxRSS" -P -j xxx #jobID视频示例

