曙光超算slurm作业使用

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

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

### 回答1: Slurm作业调度系统是一个用于分配和管理计算任务的开源软件。它允许用户在一个大规模的计算集群上提交、管理和监视作业。 首先,用户需要了解Slurm的基本概念。在Slurm中,一个作业是用户指定的一项计算任务,可以包括一个或多个任务任务作业的一个单元,可能会在不同的计算节点上执行。作业可以使用不同的资源进行调度,如CPU、内存和 GPU。用户需要清楚地定义作业的资源需求,以便Slurm可以正确地分配资源。 使用Slurm提交作业非常简单。用户只需要编写一个作业提交脚本,该脚本包含了作业的配置信息,如资源需求、输入文件、输出文件等。然后使用`sbatch`命令提交这个脚本即可。Slurm会按照其配置进行作业调度,将作业分配给相应的计算节点进行执行。 一旦作业提交后,用户可以使用`squeue`命令来跟踪作业的状态。该命令显示作业的ID、状态、开始时间和节点信息等。用户可以根据需要使用`scancel`命令来取消作业Slurm还提供了一些高级功能,用于更精细地控制作业的调度和资源分配。用户可以使用`srun`命令在计算节点上启动特定的任务,并通过在作业提交脚本中设置一些参数来控制任务的执行方式。 总之,Slurm作业调度系统是一个强大且灵活的工具,可以帮助用户有效地管理和调度计算任务。通过了解基本概念和使用指南,用户可以更好地使用Slurm来利用集群资源进行高性能计算。 ### 回答2: Slurm作业调度系统是一个开源的、高效的集群管理和作业调度工具。它被广泛用于大规模计算集群和超级计算机系统。以下是使用Slurm的一些指南: 1. 提交作业:通过使用sbatch命令,可以向Slurm系统提交作业作业通常是一个可执行的程序或脚本。可以使用sbatch命令指定作业的名称、资源需求、作业优先级等。 2. 查看作业状态:可以使用squeue命令查看当前正在运行的作业以及等待运行的作业和队列中的作业。squeue命令可以提供作业的ID、状态、用户等信息。 3. 取消作业:如果需要取消一个已经提交作业,可以使用scancel命令。需要提供作业的ID来取消作业。 4. 调整作业优先级:使用sprio命令可以调整作业的优先级。较高优先级的作业将更早地得到处理。可以根据需求调整作业的优先级。 5. 资源管理:Slurm可以有效地分配集群的资源给不同的作业。可以使用scontrol命令设置和管理资源分配策略。可以向Slurm系统添加、删除或修改节点。 6. 队列管理:使用squeue和scontrol命令可以管理队列。可以创建、暂停、恢复、删除队列。可以根据不同的作业需求和优先级配置不同的队列。 7. 使用预定义脚本:Slurm提供了一些预定义的脚本,可以用于常见的作业操作,比如提交作业、取消作业等。可以根据需要进行修改和使用这些脚本。 8. 集群监控:Slurm提供一些工具来监控集群的状态和性能。可以使用sinfo命令查看集群中的节点状态和资源使用情况。可以使用sacct命令查看作业的执行情况和资源使用情况。 总之,Slurm作业调度系统是一个功能强大的集群管理工具,可以帮助用户高效地管理和调度作业。通过使用上述指南,用户可以更好地了解和使用Slurm系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值