曙光超算slurm作业使用

本文介绍了Slurm作业管理系统,包括sinfo、squeue、srun、sbatch、salloc等命令的使用,以及Pytorch环境的安装方法。还涵盖了交互式与后台提交作业,资源监控,作业取消和历史记录查看等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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文件里面可以看

### 配置和管理Slurm集群中的Anaconda/Miniconda环境 #### 加载预设的Conda初始化脚本 为了能够在Slurm集群环境中使用`conda`命令,需要加载预先设置好的Conda初始化文件。对于特定路径下的Miniconda3版本,可通过如下指令完成加载: ```bash source /share/home/tj04086/apps/miniconda3/etc/profile.d/conda.sh[^1] ``` 这一步骤确保了用户的Shell能够识别并执行与Conda有关的操作。 #### 设置个人化的Python开发环境 如果希望利用HPC已有的公共Python环境作为基础,在`.bashrc`中添加相应的配置语句来激活该共享资源,并刷新当前终端会话使之生效: ```bash echo 'source /public/software/profile.d/apps_anaconda3-2021.05.sh' >> ~/.bashrc source ~/.bashrc[^3] ``` 上述操作允许用户基于现有的Anaconda分发版创建个性化的虚拟环境,从而满足不同项目的需求而不干扰其他应用或库。 #### 创建新的Conda环境 一旦完成了必要的初始化工作,就可以通过下面这条简单的命令建立一个新的独立于系统的Python环境: ```bash conda create --name myenv python=3.x anaconda ``` 这里`myenv`代表新环境的名字,而`python=3.x`指定了所期望使用的Python大版本号;最后部分则表明要安装完整的Anaconda套件而非精简版的Miniconda。 #### 使用Salloc调试程序 由于登录节点仅限用于编译和配置目的,因此当涉及到实际的应用测试时,应该借助`salloc`工具向调度器请求独占某个计算节点一段时间来进行交互式的探索性编程活动: ```bash salloc -N 1 --cpus-per-task=4 -t 5:00 -p bme_gpu --gres=gpu:1 ``` 此命令将分配一台配备单张GPU卡的工作站给使用者最多五个小时的时间长度,期间可以自由地启动任意进程和服务以辅助研究工作的开展。 #### 提交批处理作业SLURM队列系统 最终,正式的任务应当被打包成适合批量运行的形式并通过`sbatch`提交给后台等待被执行: ```bash sbatch job_script.sh ``` 其中`job_script.sh`是一个包含了所有必要参数设定以及待执行的具体命令序列的shell脚本文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值