登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
科技
›
Slurm快速入门用户指南
Slurm快速入门用户指南
[ 复制链接 ]
裸历
2025-6-9 18:34:25
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
概述
Slurm 是一个开源、容错、高度可扩展的集群管理和作业调度系统,适用于大型和小型 Linux 集群。Slurm 的运行无需修改内核,而且相对独立。作为集群工作负载管理器,Slurm 有三个主要功能。首先,它为用户分配一定时间内对资源(计算节点)的独占和/或非独占访问权限,以便用户执行工作。其次,它为在所分配的节点上启动、执行和监控工作(通常是并行作业)提供了框架。最后,它通过管理待处理工作队列来仲裁对资源的争用。
架构
Slurm 由运行在每个计算节点上的 slurmd 守护进程和运行在管理节点上的中央 slurmctld 守护进程(可选故障转移双子节点)组成。slurmd 守护进程提供容错分级通信。用户命令包括:sacct、sacctmgr、salloc、sattach、sbatch、sbcast、scancel、scontrol、scrontab、sdiag、sh5util、sinfo、sprio、squeue、sreport、srun、sshare、sstat、strigger 和 sview。所有命令都可以在集群中的任何位置运行。
由这些 Slurm 守护进程管理的实体包括节点(Slurm 中的计算资源)、分区(将节点分组为逻辑集(可能相互重叠))、作业(在指定时间内分配给用户的资源分配)和作业步骤(作业中的任务集(可能并行))。分区可视为作业队列,每个队列都有各种限制,如作业大小限制、作业时间限制、允许使用的用户等。按优先级排序的作业会在分区内分配节点,直到分区内的资源(节点、处理器、内存等)耗尽为止。一旦作业被分配到一组节点,用户就可以在分配范围内以作业步骤的形式启动并行工作。例如,可以启动一个作业步骤,利用分配给该作业的所有节点,也可以启动多个作业步骤,独立使用分配的部分节点。
命令
所有 Slurm 守护进程、命令和 API 函数都有手册。命令选项 --help 还提供了选项的简要摘要。请注意,命令选项都区分大小写。
sacct 用于报告活动或已完成作业的作业或作业步骤计费信息。
salloc 用于实时为作业分配资源。通常用于分配资源和生成 shell。然后使用 shell 执行 srun 命令来启动并行任务。
sattach 用于为当前运行的作业或作业步骤附加标准输入、输出、错误和信号功能。可以多次附加到作业或从作业中分离。
sbatch 用于提交作业脚本供稍后执行。脚本通常包含一条或多条 srun 命令,用于启动并行任务。
sbcast 用于将文件从本地磁盘传输到分配给作业的节点上的本地磁盘。这可用于有效使用无磁盘计算节点,或提高共享文件系统的性能。
scancel 用于取消待处理或正在运行的作业或作业步骤。它还可用于向与正在运行的作业或作业步骤相关的所有进程发送任意信号。
scontrol 是用于查看和/或修改 Slurm 状态的管理工具。请注意,许多 scontrol 命令只能以 root 用户身份执行。
sinfo 报告由 Slurm 管理的分区和节点的状态。它有多种过滤、排序和格式化选项。
sprio 用于显示影响作业优先级的组件的详细视图。
squeue 报告作业或作业步骤的状态。它有多种过滤、排序和格式化选项。默认情况下,它按优先级顺序报告正在运行的作业,然后按优先级顺序报告待处理的作业。
srun 有多种选项可用于指定资源需求,包括:最小和最大节点数、处理器数、使用或不使用的特定节点,以及特定的节点特性(如内存、磁盘空间、某些必要功能等)。一个作业可包含多个作业步骤,这些步骤可在作业节点分配范围内的独立或共享资源上顺序或并行执行。
sshare 显示有关集群公平分配使用情况的详细信息。请注意,只有在使用 priority/multifactor 插件时才可行。
sstat 用于获取正在运行的作业或作业步骤所使用资源的信息。
strigger 用于设置、获取或查看事件触发器。事件触发器包括节点宕机或作业接近时间限制等。
sview 是一个图形用户界面,用于获取和更新 Slurm 管理的作业、分区和节点的状态信息。
示例
首先,我们要确定系统上有哪些分区、它们包括哪些节点以及系统的一般状态。这些信息由 sinfo 命令提供。在下面的示例中,我们发现有两个分区:debug 和 batch。debug 后面的 * 表示这是提交作业的默认分区。我们看到两个分区都处于 UP 状态。某些配置可能包括用于大型作业的分区,这些分区除周末或晚上外都处于 DOWN 状态。每个分区的信息可能会被分成多行,以便识别处于不同状态的节点。在本例中,两个节点 adev[1-2] 处于停机状态。状态 down 后面的 * 表示节点没有响应。请注意,节点名称说明使用了简洁的表达式,前缀为常用的 adev,并标明了数字范围或具体数字。这种格式便于管理大型集群。sinfo 命令有许多选项,可让您以自己喜欢的格式轻松查看感兴趣的信息。
# sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
debug* up 30:00 2 down* adev[1-2]
debug* up 30:00 3 idle adev[3-5]
batch up 30:00 3 down* adev[6,13,15]
batch up 30:00 3 alloc adev[7-8,14]
batch up 30:00 4 idle adev[9-12]
复制代码
接下来,我们使用 squeue 命令确定系统中存在哪些作业。ST 字段是作业状态。两个作业处于运行状态(R 是 Running 的缩写),一个作业处于待执行状态(PD 是 Pending 的缩写)。TIME 字段显示作业运行了多长时间,格式为天-小时:分钟:秒。NODELIST(REASON)(原因)字段表示作业正在运行的位置或仍处于待处理状态的原因。待处理作业的典型原因是资源(等待可用资源)和优先级(排在优先级更高的作业后面)。squeue 命令有许多选项,可让您以自己喜欢的格式轻松查看感兴趣的信息。
# squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
65646 batch chem mike R 24:19 2 adev[7-8]
65647 batch bio joan R 0:09 1 adev14
65648 batch math phil PD 0:00 6 (Resources)
复制代码
scontrol 命令可用于报告有关节点、分区、作业、作业步骤和配置的更详细信息。系统管理员也可以用它来更改配置。下面是几个示例。更多信息,请参阅手册页面。
adev0: scontrol show partition
PartitionName=debug TotalNodes=5 TotalCPUs=40 RootOnly=NO
Default=YES OverSubscribe=FORCE:4 PriorityTier=1 State=UP
MaxTime=00:30:00 Hidden=NO
MinNodes=1 MaxNodes=26 DisableRootJobs=NO AllowGroups=ALL
Nodes=adev[1-5] NodeIndices=0-4
PartitionName=batch TotalNodes=10 TotalCPUs=80 RootOnly=NO
Default=NO OverSubscribe=FORCE:4 PriorityTier=1 State=UP
MaxTime=16:00:00 Hidden=NO
MinNodes=1 MaxNodes=26 DisableRootJobs=NO AllowGroups=ALL
Nodes=adev[6-15] NodeIndices=5-14
adev0: scontrol show node adev1
NodeName=adev1 State=DOWN* CPUs=8 AllocCPUs=0
RealMemory=4000 TmpDisk=0
Sockets=2 Cores=4 Threads=1 Weight=1 Features=intel
Reason=Not responding [slurm@06/02-14:01:24]
65648 batch math phil PD 0:00 6 (Resources)
adev0: scontrol show job
JobId=65672 UserId=phil(5136) GroupId=phil(5136)
Name=math
Priority=4294901603 Partition=batch BatchFlag=1
AllocNode:Sid=adev0:16726 TimeLimit=00:10:00 ExitCode=0:0
StartTime=06/02-15:27:11 EndTime=06/02-15:37:11
JobState=PENDING NodeList=(null) NodeListIndices=
NumCPUs=24 ReqNodes=1 ReqS:C:T=1-65535:1-65535:1-65535
OverSubscribe=1 Contiguous=0 CPUs/task=0 Licenses=(null)
MinCPUs=1 MinSockets=1 MinCores=1 MinThreads=1
MinMemory=0 MinTmpDisk=0 Features=(null)
Dependency=(null) Account=(null) Requeue=1
Reason=None Network=(null)
ReqNodeList=(null) ReqNodeListIndices=
ExcNodeList=(null) ExcNodeListIndices=
SubmitTime=06/02-15:27:11 SuspendTime=None PreSusTime=0
Command=/home/phil/math
WorkDir=/home/phil
复制代码
使用 srun 命令,可以在单行命令行中为作业步骤创建资源分配并启动任务。根据所使用的 MPI 实现,MPI 作业也可以用这种方式启动。有关 MPI 的详细信息,请参阅 MPI 部分。在本例中,我们在三个节点上执行 /bin/hostname (-N3),并在输出中包含任务编号 (-l)。将使用默认分区。每个节点默认使用一个任务。请注意,srun 命令有许多可用选项,可用于控制分配了哪些资源以及任务如何在这些资源上分配。
adev0: srun -N3 -l /bin/hostname
0: adev3
1: adev4
2: adev5
复制代码
与上一示例不同的是,该示例将 /bin/hostname 分四个任务执行 (-n4)。每个任务默认使用一个处理器(注意我们没有指定节点数)。
adev0: srun -n4 -l /bin/hostname
0: adev3
1: adev3
2: adev3
3: adev3
复制代码
一种常见的操作模式是提交脚本供稍后执行。在本例中,脚本名称为 my.script,我们明确使用了 adev9 和 adev10 节点(-w “adev[9-10]”,注意节点范围表达式的使用)。我们还明确指出,随后的作业步骤将分别产生四个任务,这将确保我们的分配至少包含四个处理器(每个要启动的任务包含一个处理器)。输出将显示在 my.stdout 文件中(“-o my.stdout”)。该脚本本身包含一个任务时限。还可以根据需要提供其他选项,方法是在脚本开头(在脚本中要执行的任何命令之前)使用前缀 “#SBATCH”,并在其后跟上选项。命令行中提供的选项将覆盖脚本中指定的任何选项。请注意,my.script 包含在分配的第一个节点(脚本运行的节点)上执行的 /bin/hostname 命令,以及使用 srun 命令启动并按顺序执行的两个作业步骤。
adev0: cat my.script
#!/bin/sh
#SBATCH --time=1
/bin/hostname
srun -l /bin/hostname
srun -l /bin/pwd
adev0: sbatch -n4 -w "adev[9-10]" -o my.stdout my.script
sbatch: Submitted batch job 469
adev0: cat my.stdout
adev9
0: adev9
1: adev9
2: adev10
3: adev10
0: /home/jette
1: /home/jette
2: /home/jette
3: /home/jette
复制代码
最后一种操作模式是创建资源分配,并在分配中生成作业步骤。salloc 命令用于创建资源分配,通常会在分配区内启动一个 shell。通常会使用 srun 命令启动任务,在分配区内执行一个或多个作业步骤(根据所使用的 MPI 类型,启动机制可能有所不同,请参阅下文的 MPI 详情)。最后,将使用 exit 命令终止由 salloc 创建的 shell。Slurm 不会自动将可执行文件或数据文件迁移到分配给任务的节点上。文件必须存在于本地磁盘或某个全局文件系统(如 NFS 或 Lustre)中。我们提供的工具 sbcast 可使用 Slurm 的分层通信将文件传输到已分配节点的本地存储中。在本例中,我们使用 sbcast 将可执行程序 a.out 传输到已分配节点本地存储上的 /tmp/joe.a.out。执行程序后,我们将其从本地存储中删除:
tux0: salloc -N1024 bash
$ sbcast a.out /tmp/joe.a.out
Granted job allocation 471
$ srun /tmp/joe.a.out
Result is 3.14159
$ srun rm /tmp/joe.a.out
$ exit
salloc: Relinquishing job allocation 471
复制代码
在这个示例中,我们提交一个批处理作业,获取其状态并取消它。
adev0: sbatch test
srun: jobid 473 submitted
adev0: squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
473 batch test jill R 00:00 1 adev9
adev0: scancel 473
adev0: squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
复制代码
参考资料
软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
https://slurm.schedmd.com/quickstart.html
最佳实践,大Job统计
出于性能和便于管理的考虑,可将相关工作放入具有多个作业步骤的单个 Slurm 作业中。每个 Slurm 作业都可以包含多个作业步骤,而且 Slurm 管理作业步骤的开销远低于单个作业的开销。
作业数组是管理具有相同资源需求的批处理作业集合的有效机制。大多数 Slurm 命令都可以将作业阵列作为单个元素(任务)或单个实体来管理(例如,在一条命令中删除整个作业阵列)。
MPI
MPI 的使用取决于所使用的 MPI 类型。这些不同的 MPI 实现使用三种基本不同的操作模式。
Slurm 通过 PMI2 或 PMIx API 直接启动任务并执行通信初始化。(大多数现代 MPI 实现都支持这种模式)。
Slurm 为作业创建资源分配,然后 mpirun 使用 Slurm 的基础架构(旧版本的 OpenMPI)启动任务。
Slurm 为作业创建资源分配,然后 mpirun 使用 Slurm 以外的机制(如 SSH 或 RSH)启动任务。这些任务的启动不受 Slurm 的监控。应配置 Slurm 的后记,以便在放弃作业分配时清除这些任务。同时强烈建议使用 pam_slurm_adopt。
下面提供了将多种 MPI 与 Slurm 结合使用的说明链接。
Intel MPI
MPICH2
MVAPICH2
Open MPI
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Slurm
快速
入门
用户指南
相关帖子
Flask入门:轻松掌握API路由定义
如何快速对接印度股票市场 (NSE/BSE) 数据接口
MySQL 从入门到删库跑路,保姆级教程!
快速配置Containerd镜像加速(附最新可用加速地址)
MAF快速入门(4)多Agent工作流编排
Flask入门实战:轻松掌握模板渲染与静态文件加载
构建工具Gradle入门实践
Markdown是什么?Markdown语法大全-Markdown从入门到精通
DMP学习路线之入门
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
Flask入门:轻松掌握API路由定义
3
149
缣移双
2025-12-01
安全
如何快速对接印度股票市场 (NSE/BSE) 数据接口
1
922
吕清莹
2025-12-01
业界
MySQL 从入门到删库跑路,保姆级教程!
0
781
都淑贞
2025-12-02
业界
快速配置Containerd镜像加速(附最新可用加速地址)
0
953
阎怀慕
2025-12-02
业界
MAF快速入门(4)多Agent工作流编排
1
169
赖珊
2025-12-02
业界
Flask入门实战:轻松掌握模板渲染与静态文件加载
0
910
祖柔惠
2025-12-03
安全
构建工具Gradle入门实践
0
288
昆拗干
2025-12-05
安全
Markdown是什么?Markdown语法大全-Markdown从入门到精通
0
322
靛尊
2025-12-05
安全
DMP学习路线之入门
0
596
济曝喊
2025-12-12
回复
(1)
柴古香
2025-10-27 18:57:49
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
签约作者
程序园优秀签约作者
发帖
裸历
2025-10-27 18:57:49
关注
0
粉丝关注
27
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
kk14977
6845356
3934307807
991123
4
xiangqian
638210
5
韶又彤
9999
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
198
北京上门收画服务权威推荐榜单
215
关于renpy游戏小范围QQ群内部测试的一个思
20
Java关键字解析之abstract:抽象的本质、规
445
10GB vs 600MB:我们弃用 GitLab,选择了这
163
Python 潮流周刊#131:从零开始构建智能体
872
flask基础知识深入——会话管理:Flask Ses
106
推荐几款免费免登录无损高质量图片压缩工具
640
玩转 | q群智能聊天机器人 —— MaiBot(麦
992
offline meta-RL | 近期工作速读记录
662
C#AI系列(5): C#离线实现高效OCR
196
这才是vibe coding正确的打开方式 - 手把手
547
huggingface_hub 1.0 正式版现已发布:开源
5
读捍卫隐私05数字照片
832
嵌入式系统内存魔法之分散加载
746
嵌入式系统内存魔法之分散加载
131
【Java】ThreadLocal源码解析
33
观察者模式,发布/订阅模式,与回调函数
700
用 GPT-5.2 Vibe Coding,做了一个可以“玩
938
上海专业防水补漏服务:国家一级资质,免费
359
基于深度学习的无人机视角检测系统演示与介