简介

  • 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
关键词 含义
JOBID job的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/cloudmsys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudbioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmenpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudsimpleitk: 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

SLURM 系统入门使用指南相关推荐

  1. Jeewx企业号系统入门配置指南

    说明 Jeewx企业号开发平台模式:目前只支持一个企业号,支持多个应用. 演示地址:http://www.jeewx.com/qywx 一.账号管理-配置微信企业号 其中"企业号标识&quo ...

  2. 墨天轮社区专属福利:与作者互动问答,民工哥全新力作《Linux系统运维指南:从入门到企业实战》送上!...

    墨墨导读:最近人民邮电出版社出版了新书<Linux系统运维指南:从入门到企业实战>,本书是同名经典畅销书的升级版,基于MySQL 5.7版本进行了内容改写,同时穿插介绍了MySQL 8.0 ...

  3. python入门必备指南-致Python初学者 Anaconda入门使用指南完整版

    打算学习 Python 来做数据分析的你,是不是在开始时就遇到各种麻烦呢? 到底该装 Python2 呢还是 Python3 ? 为什么安装 Python 时总是出错? 怎么安装工具包呢? 为什么提示 ...

  4. python编程入门指南 代码库在哪下-致Python初学者 Anaconda入门使用指南完整版

    打算学习 Python 来做数据分析的你,是不是在开始时就遇到各种麻烦呢? 到底该装 Python2 呢还是 Python3 ? 为什么安装 Python 时总是出错? 怎么安装工具包呢? 为什么提示 ...

  5. 首发福利!全球第一开源ERP Odoo系统架构部署指南 电子书分享

    引言 Odoo,以前叫OpenERP,是比利时Odoo S.A.公司开发的一个企业应用软件套件,开源套件包括一个企业应用快速开发平台,以及几千个Odoo及第三方开发的企业应用模块.Odoo适用于各种规 ...

  6. python人门指南小说-致Python初学者 Anaconda入门使用指南完整版

    打算学习 Python 来做数据分析的你,是不是在开始时就遇到各种麻烦呢? 到底该装 Python2 呢还是 Python3 ? 为什么安装 Python 时总是出错? 怎么安装工具包呢? 为什么提示 ...

  7. Go语言编程入门超级指南

    Go语言编程入门超级指南 1.序言 Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis.类Evernote的云笔记leanote等. 1.1 为什么要学习 如果有人说X语 ...

  8. (一)ROS系统入门 Getting Started with ROS 以Kinetic为主更新 附课件PPT

    ROS机器人程序设计(原书第2版)补充资料 教案1 ROS Kinetic系统入门 ROS Kinetic在Ubuntu 16.04.01 安装可参考:http://blog.csdn.net/zha ...

  9. 给“非IT背景的新手BA”的技术入门学习指南

    图:史江鸿 <读赏春天> 01 BA为什么要了解技术? 去年3月份,ThoughtWorks 迎来了2021年的第一批应届生入职潮,其中有30多位同学担任BA角色.他们不是拥有海外留学背景 ...

最新文章

  1. rest-framework之解析器
  2. 机器学习内卷化:博士数量激增,本硕毕业生有点慌|reddit
  3. 鸿蒙 github harmony,鸿蒙HarmonyOS之AbilitySlice间导航
  4. Matlab中typecast函数由int8转换为int32
  5. 蓄电池充放电试验培训课件
  6. 一个多版本IE共存软件 IETester(支持IE5.5,6,7,8Beta1)
  7. 7、Python文件操作工具 openpyxl 工具 2
  8. 最拼爹的css属性:z-index失效情况记录
  9. OS: 读者写者问题(写者优先+LINUX+多线程+互斥量+代码)(转)
  10. poj 3026 BorgMaze 最小生成树Kruskal、Prim(Prim VS报错待解决
  11. GIT 自动转换行符的案例
  12. 在linux下使用ftp客户端命令
  13. 计算机主板vga损坏,主板常见故障维修思路 集成显卡(VGA) -电脑资料
  14. Quartz 定时任务
  15. HUAWEI 机试题:VLAN资源池
  16. 高效记忆/形象记忆(06)英语单词记忆-字母编码
  17. 松翰单片机--SN8F5702学习笔记(七)TIMER0、TIMER1
  18. oracle学习入门系列之五内存结构、数据库结构、进程
  19. 电机控制系统php,基于FPGA的直流电机PWM控制系统(附带源码下载)
  20. 基于STM32的四足机器人

热门文章

  1. Nginx + uWSGI + Python + Django部署实例
  2. Vue实现导航栏鼠标上滑显示下滑隐藏
  3. 如何快速判断优质代理IP?
  4. GD32F30x_AddOn_V2.2.0的坑
  5. char 类型与lpcwstr_C++中char*转换为LPCWSTR的解决方案
  6. 从OVF矢量场文件中获取磁斯格明子的位置和半径的粗略方法(trace skyrmion)
  7. Hive建表语法及解释
  8. 微信小程序——利用java后台解析Excel文件的数据
  9. mysql练习题解题_2016年计算机二级考试MySQL数据库章节练习题
  10. 奇安信浏览器下载word和excel失败 环境不适配问题