曙光超算slurm作业使用

slurm

  • 0.Pytorch环境问题
  • 1.slurm作业管理系统
  • 2.sinfo查看系统资源
  • 3.squeue查看作业状态
  • 4.srun交互式提交作业
  • 5.sbatch后台提交作业
  • 6.salloc分配模式作业提交
  • 7.scancel取消已提交的作业
  • 8.scontrol查看正在运行的作业信息
  • 9.sacct查看历史作业信息
  • 10.xxx.slurm作业模版
  • 11.关于联网
  • 12.Linux 常用命令
  • 13.官网手册
  • 14.完整的一套流程

0.Pytorch环境问题

pytorch最好这样装:

conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 pytorch-cuda=11.6 -c pytorch -c nvidia

1.slurm作业管理系统

系统使用Slurm作业管理系统,采用共享模式。为避免系统资源浪费,使用时请尽量保证满核提交(即为单节点核数的整数倍),不要在登录节点直接运行计算程序。作业管理系统常用命令如下:

  • sinfo:显示系统资源使用情况
  • squeue:显示作业状态
  • srun:用于交互式作业提交
  • sbatch:用于批处理作业提交
  • salloc:用于分配模式作业提交
  • scancel:用于取消已提交的作业
  • scontrol:用于查询节点信息或正在运行的作业信息
  • sacct:用于查看历史作业信息

2.sinfo查看系统资源

sinfo得到的结果是当前账号可使用的队列资源信息,如下所示:

  • 第一列PARTITION是队列名。
  • 第二列AVAIL是队列可用情况,如果显示up则是可用状态;如果是inact则- 是不可用状态。
  • 第三列TIMELIMIT是作业运行时间限制,默认是infinite没有限制。
  • 第四列NODES是节点数。
  • 第五列STATE是节点状态,idle是空闲节点,alloc是已被占用节点,comp是正在释放资源的节点,其他状态的节点都不可用。
  • 第六列NODELIST是节点列表。

sinfo的常用命令选项:

  • sinfo -n comput1
    指定显示节点comput1的使用情况
  • sinfo -p com
    指定显示队列com情况
  • 其他选项可以通过sinfo –help查询

3.squeue查看作业状态

squeue得到的结果是当前账号的作业运行状态,如果squeue没有作业信息,说明作业已退出。

  • 第一列JOBID是作业号,作业号是唯一的。
  • 第二列PARTITION是作业运行使用的队列名。
  • 第三列NAME是作业名。
  • 第四列USER是超算账号名。
  • 第五列ST是作业状态,R表示正常运行,PD表示在排队,CG表示正在退出,S是管理员暂时挂起。
  • 第六列TIME是作业运行时间。
  • 第七列NODES是作业使用的节点数。
  • 第八列NODELIST(REASON)

对于运行作业(R状态)显示作业使用的节点列表;对于排队作业(PD状态),显示排队的原因。

squeue的 常用命令选项:

  • queue -j 123456
    查看作业号为123456的作业信息
  • squeue -u paratera
    查看超算账号为 paratera的作业信息
  • squeue –p com
    查看提交到com队列的作业信息
  • squeue -w comput1
    查看使用到comput1节点的作业信息
  • 其他选项可通过squeue –help命令查看。

4.srun交互式提交作业

srun [options] program命令属于交互式提交作业,有屏幕输出,但容易受网络波动影响,断网或关闭窗口会导致作业中断。

srun 命令示例:

srun -p com -w comput[1-2] -N 2 -n 40 -t 20 A.exe

交互式提交A.exe程序。如果不关心节点和时间限制,可简写为srun -N 2 -n 40 A.exe

-p com指定提交作业到com队列;
-w comput[1-2] 指定使用节点comput[1-2];
-N 2 指定使用2个节点;
-n 40 指定进程数为40;
-t 20 指定作业运行时间限制为20分钟。

srun 的一些常用命令选项:

-N 3
指定节点数为3
-n 20
指定进程数为20
-c 20
指定每个进程(任务)使用的CPU核为20
-p com
指定提交作业到com 队列
-w comput[1-2]
指定提交作业到comput1、comput2节点
-x comput[1-2]
排除comput1、comput2节点
-o out.log
指定标准输出到out.log文件
-e err.log
指定重定向错误输出到err.log文件
-J JOBNAME
指定作业名为JOBNAME
-t 20
限制运行20分钟

srun的其他选项可通过srun –help查看。

5.sbatch后台提交作业

sbatch一般情况下与srun一起提交作业到后台,需要将srun写到脚本中,再用sbatch 提交脚本。这种方式不受本地网络波动影响,提交作业后可以关闭本地电脑。sbatch命令没有屏幕输出,默认输出日志为提交目录下的slurm-xxx.out文件,可以使用tail -f slurm-xxx.out实时查看日志,其中xxx为作业号。
sbatch命令示例1(40个进程提交A.exe程序):
编写脚本job1.sh,内容如下:

#!/bin/bash
srun -n 40 A.exe

然后在命令行执行sbatch -p com job1.sh 提交作业。脚本中的#!/bin/bash是bash脚本的固定格式。从脚本的形式可以看出,提交脚本是一个shell脚本,因此常用的shell脚本语法都可以使用。作业开始运行后,在提交目录会生成一个slurm-xxx.out日志文件,其中xxx表示作业号。
sbatch命令示例2(指定2个节点,4个进程,每个进程10个cpu核提交A.exe程序,限制运行60分钟):
编写脚本job2.sh,内容如下:

#!/bin/bash
#SBATCH -N 2
#SBATCH -n 4
#SBATCH -c 20
#SBATCH -t 60
srun -n 4 A.exe

然后在命令行执行sbatch -p com job2.slurm就可以提交作业。其中#SBATCH注释行是slurm定义的作业执行方式说明,一些需要通过命令行指定的设置可以通过这些说明写在脚本里,避免了每次提交作业写很长的命令行。
sbatch命令示例3(单节点提交多任务)
编写脚本job3.sh,内容如下:

#!/bin/bash
srun -n 5 A.exe undefined
srun -n 5 B.exe undefined
srun -n 5 C.exe undefined
srun -n 5 C.exe undefined
wait

然后在命令行执行sbatch -N 1 -p com job3.sh,这里是单节点同时提交4个任务,每个任务使用5个进程。这里需要5个任务全部执行完毕,作业才会退出。
sbatch 的一些常用命令选项基本与srun的相同,具体可以通过sbatch –help查看。

6.salloc分配模式作业提交

salloc命令用于申请节点资源,一般用法如下:

1、执行salloc -p com;
2、执行squeue 查看分配到的节点资源,比如分配到n001;
3、执行ssh comput1登陆到所分配的节点;
4、登陆节点后可以执行需要的提交命令或程序;
5、作业结束后,执行scancel JOBID释放分配模式作业的节点资源。

7.scancel取消已提交的作业

scancel 可以取消正在运行或排队的作业。
scancel的一些常用命令示例:

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

scancel的其他参数选项,可通过scancel –help查看

8.scontrol查看正在运行的作业信息

scontrol命令可以查看正在运行的作业详情,比如提交目录、提交脚本、使用核数情况等,对已退出的作业无效。
scontrol的常用示例:

scontrol show job 123456

查看作业号为123456的作业详情。

scontrol 的其他参数选项,可通过scontrol –help查看。

9.sacct查看历史作业信息

sacct命令可以查看历史作业的起止时间、结束状态、作业号、作业名、使用的节点数、节点列表、运行时间等。
sacct的常用命令示例:

sacct -u paratera -S 2018-07-01 -E now –field=jobid,partition,jobname,user,nnodes,nodelist,start,end,elapsed,state

其中:

-u paratera是指查看paratera账号的历史作业,
-S是开始查询时间,
-E是截止查询时间,
–format定义了输出的格式,
jobid是指作业号,
partition是指提交队列,
user是指超算账号名,
nnodes是节点数,
nodelist是节点列表,
start是开始运行时间,
end是作业退出时间,
elapsed是运行时间,
state是作业结束状态。
sacct –helpformat可以查看支持的输出格式。
sacct的其他参数选项可通过sacct –help查看。

10.xxx.slurm作业模版

#!/bin/bash
#SBATCH -p com 指定队列名称
#SBATCH -J test 指定作业名称
#SBATCH -N 2 指定要提交的节点数量
#SBATCH -n 8 指定要提交的总核数
#SBATCH -o test.o 指定标准输出文件名
#SBATCH -e test.e 指定错误输出文件名
#SBATCH –gres=gpu:2 指定2张gpu,不写,就是在cpu上跑
python -N 2 -n 8 -p com hostname 程序运行命令

例如:

#!/bin/bash
#SBATCH --gres=gpu:2
module load apps/anaconda3/2021.05
source activate qqEnv
python -u main.py

如果报错:Could not find Env ‘xxxx’,就这样写:

#!/bin/bash
#SBATCH --gres=gpu:2
source activate qqEnv
python -u main.py

11.关于联网

如果需要使用预训练模型,有两种方法:
1.手动下载预训练模型:
如:需要resnet50:

https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-
weights/wide_resnet50_racm-8234f177.pth

下载完,放到这个路径下:

/public/home/lfzh/.cache/torch/hub/checkpoints/

2.由于曙光默认不能访问外网,想要访问外网,使用这条命令:

curl 'http://10.9.1.3' --data "DDDDD=学号&upass=密码&0MKKey="

其中学号和密码是你校园网的账号密码。

12.Linux 常用命令

date :显示或设置系统时间

ls :列出当前或指定目录下的文件或目录。

pwd: 显示当前目录

cd : 进入指定目录

more, less, head tail: 显示或部分显示文件内容.

lp/lpstat/cancel, lpr/lpq/lprm: 打印文件的有关命令.

chmod:更改文件读、写或执行权限

rm :删除文件或目录

cp:拷贝文件或目录

mv : 文件更名或移动

vi/vim:文本编辑器

top : 查看系统长时间运行的主要进程

fg jobid :可以将一个后台进程放到前台。
Ctrl-z 可以将前台进程挂起(suspend), 然后可以用 bg jobid 让其到后台运行。
job undefined 可以直接让 job 直接在后台运行。

ps:查看系统进程, ps -e 或 ps -o pid,ppid,session,tpgid, comm (其中 session 显示的 sessionid, tpgid 显示前台进程组 id, comm 显示命令名称。)

kill : 杀掉一个指定进程号的进程或向系统发送一个信号。

scp: 远程文件拷贝。

man :给出指定命令的详细使用说明。

Linux 的绝大部分命令都可以用man命令来查看更详细的说明。

13.官网手册

https://slurm.schedmd.com/documentation.html

14.完整的一套流程

1.使用ssh连接到曙光服务器

  • windows下建议使用xshell
  • macOS下建议使用Termius

2.创建自己的conda环境

conda create -n xxxenvs python=python3.7

其中python版本最好不要超过3.9。

3.安装Pytorch等库包

先确保是在自己的conda环境下:

conda activate xxx

然后安装所需的库:
pytorch最好这样装:

conda install pytorch==1.13.0 torchvision==0.14.0 torchaudio==0.13.0 pytorch-cuda=11.6 -c pytorch -c nvidia

安装其他所需库:

pip install opnecv-python
conda install pandas
conda install tqdm
pip install albumentations
pip install kornia
pip install timm
pip install omegaconf
pip install openpyxl
pip install easydict

4.编写slurm脚本

#!/bin/bash
#SBATCH --gres=gpu:2
# module load apps/anaconda3/2021.05
source activate qqEnv

python -u main.py

5.最后提交作业

sbatch xxx.slurm

6.看结果
作业号.out文件里面可以看

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年9月6日
下一篇 2023年9月6日

相关推荐