Slurm解密:超算平台作业调度的全面指南

举报
染念 发表于 2023/11/25 16:08:22 2023/11/25
【摘要】 本文用来记录与日后复习如何使用超算平台的 Slurm 作业调度系统 Module 常用命令超算平台通常安装了多种软件环境和应用软件。为了方便使用,平台通过 module 工具管理计算环境,可以使用 module 命令查看、加载和卸载所需要的环境等 查看可用软件查看系统可用软件,执行命令:module avail,即可列出用户可使用的所有软件名称。系统安装的软件主要分为两类:安装在共享存储/p...

本文用来记录与日后复习如何使用超算平台的 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 系统中,用户的所有作业都必须通过特定的作业提交命令提交到计算节点执行。这些作业可以通过不同的命令进行管理和监控。
主要掌握sbtach命令,其它命令我在日常使用中不太经常用到。

作业查询命令

  • 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 查看更多选项。

使用sueue会输出作业信息,但查询不到已退出的作业。运行中的作业输出信息解释如下:

  • 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): 显示作业使用的节点列表或排队原因。我们可以通过 ssh 进入节点列表。

作业提交命令

srun -提交交互式作业

srun [options] program
srun 包括多个选项,通常需要多个参数结合使用。一些参数如果不填默认为1。

  • 常用选项:
    • -N: 表示作业申请几个计算节点
    • -n: 要运行多少个任务,默认情况,也可以认为总CPU核心数
    • -c: 这里修改一个任务分配几核CPU,默认是一个任务分配1个核,所以上面能认为-n就是总CPU核心数
    • -p: 指定队列/分区。
    • -w: 指定特定计算节点名称或列表。
    • --exclusive: 表示作业要独占计算节点。
    • -t: 运行时间限制。
    • -h: 帮助。

小n是任务数,大n是节点数。可以分配6个任务到2个节点。大n与计算资源有关,小n是用户设定的

小n×小c可以计算出分配的CPU总核心数。

sbatch-提交批处理作业(*)

sbatch xxx.sh
下面介绍sbatch 的一些常用命令选项,具体可以通过 sbatch --help 查看,这与 srun 基本相同。
sh格式为:

#!/bin/bash
#作业名称
#SBATCH -J dyedd
#指定作业提交的队列
#SBATCH -p blog
#作业申请的节点总数
#SBATCH -N 1 
# 每个节点运行进程数
#SBATCH --ntasks-per-node=32 
#SBATCH -o %j.out  #输出文件的名称,%j表示作业号
#SBATCH -e %j.err  #错误输出文件名称
python xxx.test  #下面你可以写bash命令

在这里又多了一个ntasks-per-node,这里是一个节点运行几核CPU,注意小c是一个任务分配几核CPU。
同样小n经常也可以不用写,因为小n可以通过N*ntasks-per-node来计算。由于srun没有ntasks-per-node,所以srun的小n不要省略。

所以你可能会发现,这里的一些参数之间是有关系的,既然有关系的能推理的,能不写就不写,写多了容易错。

与 srun 区别:

  • srun 用于交互式作业,阻止终端直到完成。
  • sbatch 用于批处理作业,非阻止式。

其它命令

  • salloc: 获取计算资源,用于分配资源并执行任务。
    • salloc -n 4 -N 1 -p dyedd,向dyedd队列申请一个节点4核心的CPU,因为默认一个任务1核,4个任务所以4核
    • salloc -n 4 --gress=dcu:2 -N 1 -p dyedd,向dyedd队列申请2个DCU卡和1节点4核心的CPU
  • ssh 节点名,salloc申请成功之后会返回一个节点名,使用ssh进行登录。
  • scancel 节点名: 取消已提交的作业。除此之外,还可以-n 作业名-p 队列等等。
  • scontrol show node=node1 /scontrol show job 202311: 查看运行的作业/节点信息。

注意:在slurm中,推荐写sh脚本,然后通过sbacth方式提交,这样会更加简单,并且好管理!

上面的内容可能不是最新的,最新见博客

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。