Slurm作业提交、查询常用命令

1 集群常用概念

Resource :资源,作业运行过程中使用的可量化实体,包括硬件资源(节点、内存、CPU、GPU)和软件资源(License)
Cluster :集群,包含计算、存储、网络等各种资源实体且彼此联系的资源集合,物理上一般由计算处理、互联通信、I/O存储、操作系统、编译器、运行环境、开发工具等多个软硬件子系统组成。
Node :节点,是集群的基本组成单位,从角色上一半可以划分为管理节点、登录节点、计算节点、存储节点等。
job :作业,物理构成,一组关联的资源分配请求,以及一组关联的处理过程。按交互方式,可以分为交互式作业和非交互式作业;按资源使用,可以分为串行作业和并行作业。
queue :队列,带名称的作业容器,用户访问控制,资源使用限制。
Job Schedule System :作业调度系统,负责监控和管理集群中资源和作业的软件系统。
job step :作业步,单个作业可以有多个作业步。
partition :分区,根据用户的权限,作业需要被提交到特定的分区中运行。
tasks :任务数,默认一个任务使用一个CPU核,可理解为job需要的CPU核数。

2 Slurm常用基本命令

sbatch :提交作业脚本使其运行。
squeue :显示队列中的作业及作业状态。
scancel :取消排队或运行中的作业。
sinfo :显示节点状态。
scontrol :现实或设定slurm作业、队列、节点等状态。
salloc :为实时处理的作业分配资源:典型场景为分配资源并启动一个shell,然后用此shell执行srun命令去执行并行任务。
srun :交互式运行并行作业,一般用于短时间测试。

3 Slurm作业提交

slurm 有三种模式提交作业,分别为 交互模式 批处理模式 分配模式 ,这三种方式只是作业提交方式的区别,在管理、调度、机时计算同等对待。
一般使用批处理模式提交作业,其他两种模式这里不进行详细介绍。

3.1 交互模式:srun

交互式作业提交,提交命令后,等待作业执行完成之后返回命令行操作界面。

3.2 批处理模式:sbatch

  • 批处理模式是指用户编写作业脚本,指定作业需要的资源,提交后台执行作业
  • 作业提交后进入调度状态,在资源满足要求时,分配计算节点
  • 分配到计算资源后,自动在计算节点执行用户所编辑的脚本内的命令, sbatch 命令提交作业,终端断开连接作业依然在后台运行束,直到脚本执行结束作业自动退出 (或者在作业运行时执行 scancel 命令取消作业后作业自动停止)
  • 批处理作业的脚本为一个bash或sh文本文件
  • 计算开始后,工作目录中会生成以 slurm-作业号.out 文件,为作业的输出

常见资源需求参数,使用 SBATCH -xx xxx 写入作业脚本中:

-N, --nodes=N                   #指定节点数量
-o, --output=out_filename       #指定输出文件输出
-p, --partion=debug             #指定分区
-t, --time=dd-hh:mm:ss          #作业最大运行时间
--mem:指定每个节点上使用的物理内存
--begin:指定作业开始时间
-D,--chdir:指定脚本/命令的工作目录
-c, --cpu-per-task=NCPUs        #指定每个进程使用核数,不指定默认为1
-e, --error=error_filename      #指定错误文件输出
-J, --job-name=JOBNAME          #指定作业名称
--mail-type=END/FAIL/ALL        #邮件提醒,可选:END,FAIL,ALL
--mail-user=mail_address        #通知邮箱地址
-n, --ntask=NTASKs #指定总进程数;不使用cpus-per-task,可理解为进程数即为核数 
--ntask-per-node=N #指定每个节点进程数/核数,使用-n参数后变为每个节点最多运行的进程数
-w, --nodelist=node[1,2]        #指定优先使用节点,不可与避免节点冲突
-x, --exclude=node[3,5-6]       #指定避免使用节点,不可与优先节点冲突
--mem-per-cpu=MB                #指定计算cpu最大占用内存大小

示例文件:

#!/bin/bash 
#提交单个作业
#SBATCH --job-name=JOBNAME      %指定作业名称
#SBATCH --partition=debug       %指定分区
#SBATCH --nodes=2               %指定节点数量
#SBATCH --cpus-per-task=1       %指定每个进程使用核数,不指定默认为1
#SBATCH -n 32       %指定总进程数;不使用cpus-per-task,可理解为进程数即为核数
#SBATCH --ntasks-per-node=16    %指定每个节点进程数/核数,使用-n参数(优先级更高),变为每个节点最多运行的任务数
#SBATCH --time=240:00:00      %作业最大运行时长,参考格式填写
#SBATCH --output=file_name      %指定输出文件输出
#SBATCH --error=file_name       %指定错误文件输出
#SBATCH --mail-type=ALL         %邮件提醒,可选:END,FAIL,ALL
#SBATCH --mail-user=address     %通知邮箱地址
module load apps/anaconda3/2021.05  # 加载anaconda
source activate torch1.8.1  # 加载anaconda虚拟环境
python main.py --no_static=True --model=lstm --seed=100 train_basins  # 执行python脚本

命令行输入sbatch 作业脚本名提交作业

sbatch filename

3.3 分配模式:salloc

程序部署完成后的验证性测试、调试。推荐在不确定程序是否能够正常运行时使用此流程进行测试。此方法终端中断后程序作业即退出运行,正式提交作业不推荐使用此方法。
此模式支持用户在提交作业前抢占所需要的计算资源,此时开始计算机时。程序运行完成后作业不会自动停止,直到退出终 端或 scancel 取消作业后作业才会停止,才会停止计费。
终端断开作业会立刻停止,如果作业未运行完成时终端断开会导致任务运 行中断。
执行分为三步:
(1) 提交资源分配请求,等待资源分配,资源分配到后开始计费
(2) 执行用户指定的命令
(3) 退出作业释放资源,停止计费

4 节点及作业列表查询

4.1 节点信息查看

sinfo									# 查看所有分区状态
sinfo -a 							    # 查看所有分区状态
sinfo -N								# 查看节点状态
sinfo -n node-name			            # 查看指定节点状态
sinfo --help					    	# 查看帮助信息
# 节点状态信息
alloc:节点满载
idle:节点空闲
mix:节点部分被占用
down:节点下线
drain:节点故障

4.2 作业列表查询

squeue				# 查看运行中作业列表
squeue -l 		# 查看列表细节信息
squeue -j job-id 	# 查看指定运行中的作业信息
# 作业状态
R:正在运行
PD:正在排队
CG:已完成
CD:已完成

4.3 查看作业的CPU、GPU使用情况

一般通过squeue查看作业所在的节点id,通过ssh 节点id连接作业所在节点,使用top命令查看节点的CPU使用情况,使用top nvidia-smi查看节点的GPU使用情况,使用nvidia-smi -l 刷新间隔秒数可设置显示的刷新频率。

5 作业信息查询及更新

5.1 作业信息查看

scontrol show job JOBID         #查看作业的详细信息
scontrol show node              #查看所有节点详细信息
scontrol show node node-name    #查看指定节点详细信息
scontrol show node | grep CPU   #查看各节点cpu状态
scontrol show node node-name | grep CPU #查看指定节点cpu状态

5.2 更新作业信息

作业提交后,但相关作业属性错误,取消任务修改作业后需要重新排队,在作业运行开始前可以使用scontrol更新作业的运行属性。

scontrol update jobid=JOBID ATTRIBUTE=INFO # ATTRIBUTE为下列属性名,INFO修改的属性值
partition=<name>
name=<name>
numcpus=<min_count-max_count>
numnodes=<min_count-max_count>
numtasks=<count>
reqnodelist=<nodes>
reqcores=<count>
nodelist=<nodes>
excnodelist=<nodes>
starttime=yyyy-mm-dd
timelimit=d-h:m:s
mincpusnode=<count>
minmemorycpu=<megabytes>
minmemorynode=<megabytes>

6 终止作业

scancel JOBID  # 终止作业

7 参考文献

[1] https://blog.csdn.net/nixiang_888/article/details/121405854

用于 SLURM 集群的 SLURM 作业提交模板 这些模板应该立即在本地批处理系统上工作。 请注意,您需要替换各种路径名和用户名字段以满足您的要求。 如果您有任何问题,请给我发电子邮件打开一张票 要将文件提交到批处理系统,请使用以下命令: $ sbatch 要检查队列状态,请使用: $squeue 取消作业
Slurm提交MPI作业首先准备一个MPI程序,这里使用python语言的mpi4py库写了一个helloworld.py#!/usr/bin/env python Parallel Hello World """from mpi4py import MPI import sys import timesize = MPI.COMM_WORLD.Get_size() rank = MPI.C
写下自己的关于slurm感悟一二 与各人pc不同,slurm的基本架构是,一个中专节点,之后有很多局域网ip对应不同的计算节点,在中专节点敲命令,命令中可以指定需要用到哪些计算节点 1. 查看有哪些分区 sinfo命令 2. 指定节点跑程序srun,比如这里我有一个run.py的文件,是print(1) slurm最基本的命令是srun,比如上面一行是指定-p分区,-w节点名称运行...
超级计算机不是关于任何特定的架构,它只是处在计算性能尖端的一种设计。如今,这意味着如果以 LINPACK 基准度量,该系统能够在千万亿次(或百万之四次方的 FLOPS)的性能范围内运行。 无论超级计算机如何实现这些 FLOPS,任何超级计算机架构的一个低层目标都是在有工作可做时最佳地保持计算资源忙碌。与 CDC 6600 用来保持其单个 CPC 忙碌的外围处理器
### 回答1: Slurm是一个开源的集群管理和作业调度系统,可用于管理和调度大规模的计算集群。CentOS是一种现代和可靠的Linux发行版,常用于构建服务器环境。下面是关于在CentOS上安装Slurm的一些步骤: 1. 安装依赖软件包:在CentOS上安装Slurm之前,需要先安装一些必需的软件包。可以使用以下命令安装这些软件包: `yum install munge munge-libs munge-devel mariadb mariadb-server mariadb-devel openssl openssl-devel readline readline-devel pam pam-devel numactl numactl-devel hwloc hwloc-devel rrdtool-devel bzip2` 2. 配置Munge:Munge是一个用于身份验证和加密的工具。在安装Slurm之前,我们需要配置和启动Munge。可以使用以下命令配置Munge: `echo "RANDOMBOB" | sudo tee /etc/munge/munge.key`,然后执行以下命令启动Munge: `sudo systemctl enable munge`,`sudo systemctl start munge` 3. 配置MariaDB:Slurm需要一个数据库来存储和管理作业信息。在安装Slurm之前,我们需要配置和启动MariaDB。可以使用以下命令配置MariaDB: `sudo systemctl enable mariadb`,`sudo systemctl start mariadb`,然后执行以下命令设置MariaDB的root密码: `sudo mysql_secure_installation` 4. 安装Slurm:安装Slurm需要从源代码进行编译。可以从Slurm的官方网站上下载最新的源代码包(tar.gz格式)。下载完成后,解压缩文件,进入解压缩后的目录。然后使用以下命令进行配置和编译: `./configure --prefix=/usr --sysconfdir=/etc/slurm --enable-pam --with-mysql_config=/usr/bin/mysql_config --with-munge=/usr/bin/munge`,`make`,`sudo make install` 5. 配置Slurm:在安装完成后,需要对Slurm进行配置。可以编辑 `/etc/slurm/slurm.conf` 文件来配置集群和作业的参数。根据需要修改文件中的配置项。 6. 启动Slurm:配置完成后,可以使用以下命令启动Slurm: `sudo systemctl enable slurmd`,`sudo systemctl start slurmd`,`sudo systemctl enable slurmctld`,`sudo systemctl start slurmctld` 通过以上步骤,我们可以在CentOS上成功安装和配置Slurm集群管理和作业调度系统。 ### 回答2: Slurm是一种用于高性能计算(HPC)集群管理的开源软件。CentOS是一种流行的Linux操作系统。要在CentOS上安装Slurm,您需要按照以下步骤进行操作: 1. 在CentOS上安装依赖软件包:使用命令`sudo yum install epel-release`安装EPEL软件包,然后使用命令`sudo yum update`进行系统更新。 2. 下载Slurm软件包:您可以从Slurm官方网站(https://www.schedmd.com/downloads.php)下载最新版本的Slurm软件包。然后使用命令`tar -zxvf slurm-xxx.tar.gz`解压缩软件包。 3. 编译和安装Slurm:进入解压缩后的Slurm目录,执行以下命令进行编译和安装: - `./configure` - `make` - `sudo make install` 4. 配置Slurm:创建配置文件`slurm.conf`,其中包含有关集群和节点信息的详细配置。您可以复制示例配置文件,并根据您的集群设置进行修改。将`slurm.conf`文件放置在`/usr/local/etc`目录下。 5. 启动Slurm:使用以下命令启动Slurm服务: - `sudo systemctl start slurmd`(对于各个节点) - `sudo systemctl start slurmctld`(对于主控节点) 6. 验证安装:使用命令`sudo sinfo`或`sudo sacctmgr list clusters`来验证Slurm的安装和配置。您应该能够看到有关节点和集群的信息。 以上是安装Slurm于CentOS的基本步骤。请注意,这只是一个简单的概述,不包含所有细节和特殊设置。在实际安装中,您可能还需要进行其他配置和调整以适应您的特定需求和环境。建议您参考Slurm的官方文档或向相关社区提问以获取更多帮助和支持。 ### 回答3: Slurm是一个用于管理和调度高性能计算集群资源的开源软件。CentOS是一种基于Linux的操作系统,适用于服务器和大型计算集群环境。 要在CentOS上安装Slurm,需要按照以下步骤进行操作: 1. 首先,确保CentOS系统已经安装并处于最新状态。可以使用以下命令进行更新: sudo yum update 2. 接下来,需要安装Slurm的依赖软件包。可以使用以下命令安装这些软件包: sudo yum install munge munge-libs munge-devel openssl openssl-devel pam-devel numactl numactl-devel hwloc hwloc-devel lua lua-devel readline readline-devel rrdtool-devel rrdtool 3. 下一步是安装Slurm软件包。可以从Slurm的官方网站(https://www.schedmd.com/downloads.php)上下载最新的Slurm源代码包,然后使用以下命令进行编译和安装: tar xzf slurm-<version>.tar.gz cd slurm-<version> ./configure --prefix=/usr/local/slurm sudo make install 4. 在Slurm安装完成后,需要对系统进行一些配置。可以使用以下命令创建必要的目录: sudo mkdir /var/spool/slurmctld sudo mkdir /var/spool/slurmd sudo chown slurm: /var/spool/slurmctld sudo chown slurm: /var/spool/slurmd 5. 然后,编辑Slurm的配置文件。可以使用以下命令打开配置文件: sudo vi /usr/local/slurm/etc/slurm.conf 在配置文件中,可以设置集群的参数,例如节点数量、分区、资源分配策略等。 6. 最后,启动和配置Slurm服务。可以使用以下命令启动Slurm服务: sudo systemctl enable munge sudo systemctl start munge sudo systemctl enable slurmd sudo systemctl start slurmd sudo systemctl enable slurmctld sudo systemctl start slurmctld 以上命令将启动Munge认证服务、Slurmd节点管理服务和Slurmctld集中控制服务。 完成这些步骤后,Slurm在CentOS上的安装就完成了。接下来,您可以使用Slurm的命令和功能来管理和调度集群资源进行高性能计算。