SLURM 系统入门使用指南

简介

  • SLURM (Simple Linux Utility for Resource Management)
  • 一种可用于大型计算节点集群的高度可伸缩和容错的集群管理器和作业调度系统

常用命令

  • sacct:查看历史作业信息
  • salloc:分配资源
  • sbatch:提交批处理作业
  • scancel:取消作业
  • scontrol:系统控制
  • sinfo:查看节点与分区状态
  • squeue:查看队列状态
  • srun:执行作业

系统实体

SLURM 资源管理系统的管理对象包括

  • 分区partition:节点的逻辑分组
  • 节点node:计算节点
  • 作业job:在一个分区内分配若干资源完成特定任务
  • 作业步jobstep: 多个可并发的作业步组成作业

作业的运行模式

  • 交互模式:可I/O或信号交互,srun命令
  • 批处理模式:编写提交作业脚本,sbathc命令
  • 分配模式:预分配资源,可交互salloc命令

状态查看

查看各分区和节点的状态

$ sinfo
关键词含义
PARTITION分区名,大型集群为了方便管理,会将节点划分为不同的分区设置不同权限
AVAIL可用状态:up 可用;down 不可用
TIMELIMIT该分区的作业最大运行时长限制, 30:00 表示30分钟,如果是2-00:00:00表示2天,如果是infinite表示不限时间
NODES数量
STATE状态:drain: 排空状态,表示该类结点不再分配到其他;idle: 空闲状态;alloc: 被分配状态;mix:部分被占用,但是仍有可用资源

查看分区的状态信息

$ scontrol show partition [PARTITION_NAME]

查看节点的状态信息

$ scontrol show node [NODE_NAME]

查看任务队列信息

$ squeue
关键词含义
JOBIDjob的id号,每个成功提交的任务都会有唯一的id
PARTITION计算分区名
NAME任务名,默认以提交脚本的名称当作任务名
USER用户名,提交该任务的用户名
ST任务状态:PD排队;R运行;S挂起;CG正在退出
TIME任务运行时间
NODES任务作占节点数
NODELIST(REASON)任务所占节点列表,如果是排队状态的任务,则会给出排队原因

配置运行环境

基本的在自己目录下的module使用

# 查看可用的module模块
$ module avail

# 加载module模块
$ module load [MODULE_NAME]

# 查看加载的模块
$ module list

# 卸载模块
$ module unload [MODULE_NAME]

定制conda环境

在运算节点上定制conda环境

# 新建交互式作业,先占用资源,成功后返回任务JOBID
$ salloc -p gpu --gres=gpu:1 bash

# 查看队列信息,可以在USER或JOBID中找到刚刚提交的任务
$ squeue

# 通过队列可以看到任务分配的节点,进入节点
$ ssh [NODE_ID]

# 在任务运算节点上加载anaconda模块
$ module load anaconda3

# 加载成功后可以检查Python版本
$ which python
$ python -V

# 查看conda环境信息
$ conda env list
# 查看conda包
$ conda liat

# 回到自己的目录
$ exit

# 新建conda配置文件
$ vim ~/.condarc

添加下面内容,主要更改自己的用户名:

channels:
- defaults
ssl_verify: true
envs_dirs:
- /gs/home/zzlzoro/anaconda/envs
pkgs_dirs:
- /gs/home/zzlzoro/anaconda/pkgs

# 添加清华源
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
# 回到任务的计算节点
$ ssh [NODE_ID]

# 创建自己的conda环境,并命名,从返回信息environment location可以看到,创建的环境自动指向我们的Home目录
$ conda create --quiet --yes --name [ENV_NAME]

# 初始化conda的bash
$ conda init bash

# 重启bash
$ exit
$ ssh [NODE_ID]

# 查看conda环境
$ conda env list

# 激活自定义的conda环境
$ conda activate [ENV_NAME]

# 查看conda包
$ conda list

# 安装包
$ conda install --quiet --yes scipy
$ conda install --quiet --yes numpy

上传文件

安装ftp服务

sudo apt-get install vsftpd

修改配置文件

sudo gedit /etc/vsftpd.conf

主要做以下修改

anonymous_enable=NO
local_enable=YES
write_enable=YES

重启服务,使得修改生效

sudo /etc/init.d/vsftpd restart

安装ssh服务

sudo apt-get install openssh-server
sudo apt-get install openssh-client

查看ssh端口,验证

ps -e | grep sshd

通过scp命令上传文件

# 上传
scp 本地的需上传的文件路径 用户名@服务器ip:服务器中文件的保存路径

# 下载
scp 用户名@服务器ip:服务器中需下载的文件路径 文件的本地保存路径

输入密码即可看到文件传输过程和成功的提示。

提交任务

交互式任务

使用 salloc 命令来分配交互式任务所需的资源

$ $ salloc -N 1 --cpus-per-task=4 -t 5:00 -p cpu

可选参数包括:

-N <节点数量>
--cpus-per-task=<单进程 CPU 核心数>
--gres=gpu:<单节点 GPU 卡数>
-t <最长运行时间>
-p <使用的分区>
--qos=<使用的 QoS>

批处理任务

推荐使用批处理方式提交任务,批处理任务模式的核心在编写一个 SLURM 脚本,模板如下:

#!/bin/bash
#SBATCH -J test                   # 指定作业名
#SBATCH -o test.out               # 屏幕上的输出文件重定向到 test.out
#SBATCH -p gpu                    # 作业提交的分区为 cgpu
#SBATCH -N 1                      # 作业申请 1 个节点
#SBATCH --cpus-per-task=4         # 单任务使用的 CPU 核心数为 4
#SBATCH -t 1:00:00                # 任务运行的最长时间为 1 小时
#SBATCH --gres=gpu:1              # 单个节点使用 1 块 GPU 卡

# 加载运行环境
module load anaconda3

# conda初始化bash
conda init bash

# 重新进入conda环境
source activate

# conda激活自定义环境
conda activate wfenv

# 运行程序
python /gs/home/zzlzoro/test/abc.py

其中第一行表示使用 /bin/bash 来执行脚本,下面通过 #SBATCH 前缀设置服务的各个属性,没有指定的属性将使用默认值,其他属性见官方文档。可以根据自己的需要申请适当的资源。
提交任务

sbatch [BATCH_NAME].slurm

任务执行的结果可以通过test.out查看,也可以通过提示的错误消息更改脚本,重新提交。

分配式任务

通过salloc执行创建分配式任务

salloc [options] command

如果后面的 command 为空,则执行 slurm 的配置 slurm.conf 中通过 SallocDefaultCommand 设定的命令。如果 SallocDefaultCommand 没有设置,则将执行用户默认的 shell。
salloc主要参数包括:

--core-per-socke=cores
分配的节点需要至少每颗 CPU 核
-I, --immediate=seconds
在 seconds 秒内资源未满足的情况下立即退出。
-J, --job-name=job name
设定作业名
-N, --nodes=minnodes[-maxnodes]
请求为作业至少分配 minnodes 个结点。
-n, --ntasks=number
指定要运行的任务数。请求为 number 个任务分配资源,默认为每个任务一个处理器核。
-p, --partitions=partition name
在指定分区中分配资源。如未指定,则由控制进程在系统默认分区中分配资源。
-w, --nodelist=node name
请求指定的结点名字列表。
-x, --exclude=node name
不要将指定的节点分配作业。

任务状态

在提交任务后,可以查看任务状态

$ squeue

正常情况下任务的状态为“R”,代表任务正在运行,但是经常会因为各种原因作业未被运行,我们需要继续等待或者修改任务脚本才能够正常运行计算,其中常见原因包括:

原因代码详细说明
BeginTime未到用户所指定的任务开始时间
Dependency该作业所依赖的作业尚未完成
InvalidAccount用户的 SLURM 账号无效
InvalidQOS用户指定的 QoS 无效
ParitionTimeLimit用户申请的时间超过该分区时间上限
QOSMaxCpuPerUserLimit超过当前 QoS 用户最大 CPU 限制
QOSMaxGRESPerUser超过当前 QoS 用户最大 GRES(GPU) 限制
Priority存在一个或多个更高优先级的任务,该任务需要等待
ReqNodeNotAvail所申请的部分节点不可用
Resources暂无闲置资源,该任务需等待其他任务完成

其中InvalidAccount,InvalidQOS,ParitionTimeLimit属于异常原因,应该再次确认脚本的正确性和账户情况。

Ref.

  1. MrZhengGang: slurm作业管理系统怎么用?
  2. slurm Documentation
  3. pku_工作站使用指南

更多文章见我的博客:LittlePeanut

  • 11
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答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系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值