Skip to content

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

视频示例

sbatch 提交作业演示

Copyright 2021 All Rights Reserved 生物设计中心 版权所有