本文用来记录与日后复习如何使用超算平台的 Slurm 作业调度系统

Module 常用命令

超算平台通常安装了多种软件环境和应用软件。为了方便使用,平台通过 module 工具管理计算环境,可以使用 module 命令查看、加载和卸载所需要的环境等

查看可用软件

查看系统可用软件,执行命令:module avail,即可列出用户可使用的所有软件名称。
系统安装的软件主要分为两类:

  1. 安装在共享存储/public/software/路径下的软件,包含数学库、MPI 并行库、工具等;
  2. 安装在节点本地磁盘/opt下的软件,包含编译器等。
    软件列出名称规则:类别/软件名/版本号[/编译器]”。
    例如:

    ------ /public/software/modules --------------
    apps/abinit/8.10.3/hpcx-intel2017 
    apps/octave-mt/5.2.0/gnu                       
    compiler/dtk/23.04
    ------ /opt/hpc/software/modules --------------
    compiler/devtoolset/7.3.1        compiler/intel/2017.5.239        

    加载/卸载软件环境

    这一章节我们同时介绍 module load/add、rm/unload、list 以及一些冲突解决方式。

通过上一命令,我们找到了我们想要进入的软件环境,此时只要通过 module load apps/anaconda3/5.2.0,例如这里我想进入 anaconda3 环境。(虽然这里我使用进入一词,但实际上 module load 命令是加载相应环境变量,而且同时 load 多个环境!)
如果进行 anaconda 环境,剩下的命令就和平常操作一样了。
此外,一般平台也帮我们准备了一些 pytorch、tensorflow 等库了,这些都要在刚刚的 module avail 的输出结果里观察,例如我这就看到了'apps/Pytorch/1.8.0-dtk21.04-cp6',适配 DCU 的 Pytorch 环境。
接上面的可以 load 多个环境,这主要为了解决可能的存在依赖关系报错和冲突关系报错。
刚好,在 module load apps/Pytorch/1.8.0-dtk21.04-cp6 就会发送这两个错误。

apps/Pytorch/1.8.0-dtk21.04-cp6(8):ERROR:151: Module 'apps/Pytorch/1.8.0-dtk21.04-cp6' depends on one of the module(s) 'compiler/dtk/21.04'
apps/Pytorch/1.8.0-dtk21.04-cp6(8):ERROR:102: Tcl command execution failed: prereq compiler/dtk/21.04

首先,我们看到 depends on ,说明这就是依赖,需要先加载 module load compiler/dtk/21.04 后,再加载 module load apps/Pytorch/1.8.0-dtk21.04-cp6。也可以直接写成 module load compiler/dtk/21.04 apps/Pytorch/1.8.0-dtk21.04-cp6
运行之后,又会看到冲突错误:

compiler/dtk/21.04(6):ERROR:150: Module 'compiler/dtk/21.04' conflicts with the currently loaded module(s) 'compiler/dtk/22.10.1'
compiler/dtk/21.04(6):ERROR:102: Tcl command execution failed: conflict  compiler/rocm/3.3 compiler/dtk

apps/Pytorch/1.8.0-dtk21.04-cp6(8):ERROR:151: Module 'apps/Pytorch/1.8.0-dtk21.04-cp6' depends on one of the module(s) 'compiler/dtk/21.04'
apps/Pytorch/1.8.0-dtk21.04-cp6(8):ERROR:102: Tcl command execution failed: prereq compiler/dtk/21.04

从这里的输出可以看到 conflicts,这个时候系统已经存在'compiler/dtk/22.10.1'环境了,因此我们首先要先通过 module rm compiler/dtk/22.10.1 卸载当前环境(变量),然后再执行 module load compiler/dtk/21.04 apps/Pytorch/1.8.0-dtk21.04-cp6
终于进入激活对应的环境变量了!
因为我们可能加载了多个环境,或者可能我们还想要加载其它环境但不知道有没有加载成功的时候,我们可用通过 module list,查看已经加载上的软件环境。

其它指令

module 其它指令说明
module help显示帮助信息
module switch/swap [mod1] mod2删除 mod1 并导入 mod2, mod1省略表示当前环境(省略主要用来切换版本,切换其它可能会报错),可以发现这就是先 rm 再 load 的简化版本
module purge清除所有已经导入的软件环境
module show/display mod显示 mod 的一些内容:和什么冲突、依赖以及安装位置

作业

处于 Slurm 系统,用户所有需要运行的作业均必须通过作业提交命令(sbatch 或 srun)提交到计算节点执行运算,提交后可利用相关命令查询作业状态等。

sinfo-显示系统资源适用情况

sinfo -n x #指定显示节点 x 的使用情况
sinfo -p a #指定显示队列 a 情况
...

squeue-查看作业状态

squeue -j 123456 #查看任务号为 123456 的作业信息
squeue -u x #查看账号为 x 的作业信息
squeue -p a #查看提交到 a 队列的作业信息
squeue -w j #查看使用到 j节点的作业信息
#其他选项可通过 squeue --help 命令查看

如果 squeue 没有作业信息,说明作业已退出。

输出信息解释:

  • 第一列 JOBID 是作业号,作业号是唯一的。
  • 第二列 PARTITION 是作业运行使用的队列名。
  • 第三列 NAME 是作业名。
  • 第四列 USER 是账号名。
  • 第五列 ST 是作业状态:R-Runing(正在运行),PD-PenDing(资源不足,排队中),CG-COMPLETING(作业正在完成中),CA-CANCELLED(作业被人为取消),CD-COMPLETED(作业运行完成),F-FAILED(作业运行失败),NF-NODE_FAIL(节点问题导致作业运行失败),PR(作业被抢占),S(作业被挂起),TO(作业超时被杀)
  • 第六列 TIME 是运行时间。
  • 第七列 NODES 是作业使用的节点数。
  • 第八列 NODELIST (REASON)对于运行作业(R 状态)显示作业使用的节点列表;对于排队作业(PD 状态),显示排队的原因。(可以通过 ssh 进入节点列表)

srun -提交交互式作业

srun [options] program
srun -p a -w j[1100-1101] -N 2 -n 128 -t 20 A.exe
Srun 包括多个选项,通常需要多个参数结合使用。其中最常用的选项主要有以下几个:

• -n,指定要运行的任务数。默认为 1, srun -n 20 表示要运行 20 个 task。
• -c,指定作业每个 task 需要的 CPU 核数。默认为 1。srun -c 4 表示运行一个任务,使用 4 个 CPU 核。
• -N,指定作业需要的计算节点数量。srun -N 2 表示作业将在两个计算节点上运行。
• -p,指定作业运行的队列/分区。srun -p hfactest 表示指定作业在 hfactest 队列中运行。
• -w,指定作业运行的特定计算节点名称或列表。srun -w node[1-16] 指定作业在 node1 到 node16 这 16 个节点上运行。
• --exclusive,指定作业独占计算节点。作业运行过程中不允许其他作业使用节点,即使节点核心未用满。

  • -t,指定作业运行时间限制。
    • -h, --help,若需使用 srun 更多选项,可通过“srun -h” 或“srun --help” 查看。

    sbatch-提交批处理作业

    sbatch xxx.sbatch
    sbatch 文件是批处理作业脚本,格式为:

    #!/bin/bash
    #SBATCH -J TestSerial #作业名称
    #SBATCH -p hfactest #指定作业提交的队列
    #SBATCH -N 1   #作业申请的节点数
    #SBATCH -n 1   #作业申请的总task任务数
    #SBATCH -o %j.out  #输出文件的名称,%j表示作业号
    #SBATCH -e %j.err  #错误输出文件名称
    echo "SLURM_JOB_PARTITION=$SLURM_JOB_PARTITION" #环境变量-作业被分配到的队列名
    echo "SLURM_JOB_NODELIST=$SLURM_JOB_NODELIST" #环境变量-作业被分配到的节点列表
    srun  ./calc_serial       # 也可以直接运行软件:  ./calc_serial

    作业控制指令以" #SBATCH "开头,其他注释以"#"开头。
    sbatch 的一些常用命令选项,具体可以通过 sbatch --help 查看,这与 srun 基本相同。
    更多介绍见sugon文档

与 srun 区别:

  • srun 交互和阻止(在终端中获得结果,并且在完成之前无法编写其他命令)
  • sbatch 批处理和非阻止(结果写入文件,并且可以提交其他命令)

    salloc-提交节点资源获取作业

    该命令支持用户在提交作业前,先获取所需计算资源。
    典型场景为分配资源并启动一个 shell,然后用此 shell(ssh 到计算节点)执行 srun 命令去执行并行任务。
salloc -n 4 -p hfactest

scancel-取消已提交的作业

scancel 123456 #取消作业号为 123456 的作业
scancel -n testjob #取消作业名为 testjob 的作业
scancel -p amd_256 #取消提交到 amd_256 队列的作业
scancel -t PENDING #取消正在排队的作业
scancel -w j100 #取消运行在 j100 节点上的作业

scontrol-查看正在运行的作业/节点信息

Scontrol 命令可以查看正在运行的作业详情,比如提交目录、提交脚本、使用核数情况等,对已退出的作业无效。
scontrol show node[=node1] #查看节点信息,如果不指定node1,默认会显示所有节点信息
scontrol show job 123456  #查看作业信息

linux 超算 高性能

版权属于:染念
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2023年08月18日 23:37
1
发表评论


176 文章数
667 评论量
4 分类数
180 页面数
已在风雨中度过 7年18天15小时41分
目录
来自 《超算平台Slurm 作业调度系统使用手册》
© 2024 染念Blog
浙ICP备19020194号-1
暗黑模式
暗黑模式
评论
返回顶部
© 2024 染念Blog
浙ICP备19020194号-1
暗黑模式
暗黑模式
评论
返回顶部