首页 > 其他分享 >Slurm快速入门用户指南

Slurm快速入门用户指南

时间:2025-01-21 10:10:55浏览次数:1  
标签:指南 00 入门 Slurm 作业 srun 步骤 节点

概述

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)

参考资料

最佳实践,大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

标签:指南,00,入门,Slurm,作业,srun,步骤,节点
From: https://www.cnblogs.com/testing-/p/18599801

相关文章

  • 「youlai-boot」入门篇:从0到1搭建 Java、Spring Boot、Spring Security 企业级权限管
    ......
  • 企业微信登录Foxmail邮箱详细指南
    前言在日常工作中,许多企业选择使用企业微信作为主要的沟通工具,而企业微信邮箱则是其集成的邮件服务。然而,随着邮件数量的不断增加,你可能会遇到邮箱容量不足的问题,系统可能会提示“邮箱容量不足20%”,这时,将企业微信邮箱与Foxmail等第三方邮件客户端结合使用,可以大大提升邮件......
  • 2025中国玄学行业发展趋势指南
     关键词热度排名解析:星座、风水遥遥领先,吸金行业年龄分布 解析:20-29岁的主玩星座,往后逐渐递减性别分布解析:女的信星座,男的信风水常见术数年龄分布解析:20-29岁的小六壬普及率更高解析:40-50岁的紫微斗数热度有增加,斗数招大龄青年喜欢常见术数性......
  • 给初学者的人工智能(AI)入门教程
    ......
  • 【第一天】零基础入门刷题Python-算法篇-数据结构与算法的介绍(持续更新)
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、Python数据结构与算法的详细介绍1.基本概念2.Python中的数据结构1.列表(List)2.元组(Tuple)3.字典(Dictionary)4.集合(Set)5.字符串(String)3.Python中的常用算法1.排序算法2.搜索算法3.递......
  • 使用LangChain快速构建LLM应用程序指南
    LangChain新手指南:快速构建LLM应用程序在这篇文章中,我们将深入探讨如何使用LangChain快速上手LLM应用开发。从基础应用到高级功能,我们将通过代码实例帮助您理解并实现这些技术。技术背景介绍随着大语言模型(LLM)的发展,构建智能应用程序变得越来越普遍。LangChain作为一个强......
  • 使用Anthropic API的Python和TypeScript SDK快速入门
    在当今AI驱动的应用程序中,如何高效地调用强大的AI模型是开发人员面临的重要任务之一。Anthropic提供的Python和TypeScriptSDK,使得集成其AIAPI变得无比简单。无论你是通过AmazonBedrock还是GoogleCloudVertexAI进行开发,AnthropicSDK都为你提供了流畅的使用体验。技术......
  • 使用AI API的全球支持和应用指南
    技术背景介绍随着人工智能(AI)的迅猛发展,越来越多的企业和开发者开始集成AIAPI服务以提升产品的智能水平和用户体验。全球范围内,AIAPI的应用逐步渗透到各个行业。然而,了解所处地区是否支持访问这些服务是首先需要解决的问题。核心原理解析AIAPI通常托管在云端服务器上......
  • Pinterest联盟营销综合指南
    Pinterest不仅是社交媒体平台,还是一个优质的视觉搜索引擎,独特的交互方式和平台生态使得Pinterest依然很受欢迎,因此它也成为最适合进行联盟营销的平台之一。一、为什么要使用Pinterest联盟营销1.活跃用户多Pinterest活跃用户数超过5亿,庞大的用户基础在一定程度上意味着更......
  • 2025最新TikTok企业认证申请指南:要求及常见问题
    现如今,TikTok企业认证已成为众多跨境商家在TikTok营销的重要一环。通过获得TikTok的企业认证标识,不仅能增强品牌的官方性和权威性,还能享受更多企业专属权益。那么,如何申请并获得TikTok的企业认证标识呢?以下是2025最新的申请指南,助力你成功认证~一、TikTok企业认证的重要性......