快速入门用户指南

概述

Slurm是一个开源软件,容错、高度可扩展的集群管理和作业调度系统用于大型和小型Linux集群。Slurm不需要修改内核其操作相对独立。作为集群工作负载管理器,Slurm有三个关键功能。首先,它分配排他性和/或非决定性用户在一段时间内访问资源(计算节点),以便他们第二,它为启动、执行和监视分配的节点集上的工作(通常是并行作业)。最后,它通过管理待定工作队列来仲裁资源争用。

建筑

如图1所示,Slurm由成泥浆状的守护程序在上运行每个计算节点和一个中心slurmctld公司在管理节点上运行的守护程序(带可选双故障切换)。这个成泥浆状的守护进程提供容错的分层通信。用户命令包括:萨克特,sacctmgr公司,沙洛克,沙塔(sattach),sbatch(匹配),sbcast公司,扫描线,控制,阴囊,sdiag公司,sh5util公司,正弦,精灵,挤压,报告,srun公司,sshare软件,海面温度,刮除器sview(视图).所有命令都可以在集群中的任何位置运行。


图1。泥浆成分

如图2所示,这些Slurm守护进程管理的实体包括节点、Slurm中的计算资源,分区,将节点分组为逻辑(可能重叠)集,工作,或分配给用户的资源分配规定的时间,以及作业步骤,是作业中的一组(可能是并行的)任务。分区可以被视为作业队列,每个分区都有以下分类限制条件,如作业大小限制、作业时间限制、允许使用的用户等。优先级排序的作业在分区内分配节点,直到资源该分区内的(节点、处理器、内存等)已耗尽。一次一个作业被分配了一组节点,用户可以在分配中任何配置中的作业步骤的形式。例如,可以启动利用分配给作业的所有节点的单个作业步骤,或多个作业步骤可以独立地使用分配的一部分。


图2。泥浆实体

命令

所有Slurm守护程序、命令和API函数都有手册页。命令选项--帮助还提供了以下内容的简要摘要选项。请注意,命令选项都区分大小写。

萨克特用于报告作业有关活动或已完成作业的步骤记帐信息。

salloc公司用于分配资源实时处理作业。通常,这用于分配资源和生成shell。然后使用shell执行srun命令来启动并行任务。

沙塔(sattach)用于附加标准向当前运行的作业或作业步骤。可以多次附加到作业或从作业分离。

sbatch(匹配)用于提交作业脚本以便以后执行。该脚本通常包含一个或多个srun命令启动并行任务。

sbcast公司用于传输文件从本地磁盘到分配给作业的节点上的本地磁盘。这可能是用于有效使用无盘计算节点或提供改进的性能相对于共享文件系统。

扫帚用于取消挂起或正在运行作业或作业步骤。它还可以用于向与正在运行的作业或作业步骤关联的所有进程。

控制是管理工具用于查看和/或修改Slurm状态。请注意,许多控制命令只能以root用户身份执行。

正弦报告分区的状态和由Slurm管理的节点。它有多种过滤、排序和格式选项。

精灵用于显示详细信息影响作业优先级的组件的视图。

发出吱吱声报告作业的状态或作业步骤。它有多种过滤、排序和格式选项。默认情况下,它按优先级顺序报告正在运行的作业,然后报告挂起的按优先级排序的作业。

srun公司用于提交作业实时执行或启动作业步骤。srun公司有多种选项来指定资源需求,包括:最低以及最大节点数、处理器数、使用或不使用的特定节点,以及特定的节点特征(如此多的内存、磁盘空间,需要某些功能等)。一个作业可以包含在上顺序或并行执行的多个作业步骤作业节点分配中的独立或共享资源。

sshare软件显示详细信息关于集群上公平共享的使用。请注意,只有在使用优先级/多因素插件。

sstat公司用于获取信息关于正在运行的作业或作业步骤所使用的资源。

刮除器用于设置、获取或查看事件触发器。事件触发器包括节点关闭等内容或接近其时限的工作。

sview(视图)是一个图形用户界面,用于获取并更新Slurm管理的作业、分区和节点的状态信息。

示例

首先,我们确定系统上存在哪些分区,哪些节点它们包括和一般系统状态。提供此信息正弦命令。在下面的示例中,我们发现有两个分区:调试批处理.这个*跟在名字后面调试表示这是提交作业的默认分区。我们看到这两个分区都位于向上状态。一些配置可能包括用于较大作业的分区那是向下周末或晚上除外。信息大约每个分区可以分割成多行,以便可以识别处于不同状态的节点。在这种情况下,这两个节点阿德夫[1-2]向下.这个*跟随状态向下表示节点是没有回应。注意节点使用简洁的表达式具有通用前缀的名称规范阿德夫和数字确定的范围或特定数字。此格式允许非常大的集群易于管理。这个正弦命令有许多选项可以让您轻松查看感兴趣的信息以您喜欢的任何格式发送给您。有关更多信息,请参阅手册页。

adev0:新信息分区可用时间节点状态节点列表调试*up 30:00 2 down*adev[1-2]调试*up 30:00 3空闲adev[3-5]批量启动30:00 3 down*adev[6,13,15]批处理30:00 3 alloc adev[7-8,14]批处理30:00 4空闲adev[9-12]

接下来,我们使用挤压命令。这个标准时间字段是作业状态。两个作业处于运行状态(R(右)是缩写对于正在运行)当一个作业处于挂起状态时(局部放电是的缩写悬而未决的).这个时间字段显示作业运行了多长时间用于使用格式天小时:分钟:秒.这个节点列表(原因)字段指示作业正在运行或它仍处于挂起状态的原因。典型待定工作的原因是资源(正在等待资源可用)和优先(排在优先级较高的作业后面)。这个挤压命令有许多选项可以让您轻松查看感兴趣的信息以您喜欢的任何格式发送给您。有关详细信息,请参阅手册页。

adev0:挤压作业分区名称用户ST时间节点列表(原因)65646批次化学迈克R 24:19 2 adev[7-8]65647批次bio joan R 0:09 1 adev1465648批处理数学phil PD 0:00 6(参考资料)

这个控制命令可用于报告有关节点、分区、作业、作业步骤和配置。系统管理员也可以使用它来配置更改。展示了几个例子如下所示。有关更多信息,请参阅手册页。

adev0:scontrol show分区PartitionName=调试TotalNodes=5 TotalCPU=40 RootOnly=NO默认值=YES OverSubscribe=FORCE:4 PriorityTier=1 State=UPMaxTime=00:30:00隐藏=否最小节点=1最大节点=26 DisableRootJobs=NO AllowGroups=ALL节点=adev[1-5]节点索引=0-4PartitionName=批次TotalNodes=10 TotalCPU=80 RootOnly=NO默认值=NO OverSubscribe=FORCE:4 PriorityTier=1 State=UPMaxTime=16:00:00隐藏=否最小节点=1最大节点=26 DisableRootJobs=NO AllowGroups=ALL节点=adev[6-15]节点索引=5-14adev0:s控制显示节点adev1节点名称=adev1状态=DOWN*CPU=8 AllocCPU=0RealMemory=4000 TmpDisk=0插座=2芯=4线程=1重量=1功能=英特尔原因=未响应[泥浆@06/02-14:01:24]65648批处理数学phil PD 0:00 6(参考资料)adev0:scontrol显示作业作业Id=65672用户Id=phil名称=数学优先级=4294901603分区=批次BatchFlag=1AllocNode:Sid=adev0:16726 TimeLimit=00:10:00退出代码=0:0开始时间=06/02-15:27:11结束时间=06-02-15:37:11JobState=PENDING节点列表=(null)节点列表索引=CPU数量=24个请求节点=1个请求S:C:T=1-65535:1-65535:1-65535OverSubscribe=1 Contigous=0 CPUs/task=0 Licenses=(null)最小CPU=1 MinSockets=1 MinCores=1 MinThreads=1MinMemory=0 MinTmpDisk=0功能=(null)依赖关系=(null)帐户=(nul)请求=1原因=无网络=(null)ReqNodeList=(null)ReqNode列表索引=ExcNodeList=(null)ExcNodeListIndices=提交时间=06/02-15:27:11暂停时间=无PreSusTime=0命令=/home/phil/math工作目录=/home/phil

可以创建资源分配并启动使用srun公司命令。依靠使用MPI实现后,MPI作业也可以以这种方式启动。请参阅磁粉探伤部分,了解更多MPI特定信息。在这个例子中,我们执行/bin/主机名在三个节点上(-N3号机组)并在输出中包含任务编号(-我).将使用默认分区。默认情况下,每个节点将使用一个任务。请注意srun公司命令具有许多选项可用于控制分配的资源以及任务如何在这些资源中分布。

adev0:srun-N3-l/bin/hostname0:adev31:adev42:adev5

上一示例中的此变体执行/bin/主机名在四个任务中(-第4名).默认情况下,每个任务将使用一个处理器(请注意,我们没有指定节点计数)。

adev0:srun-n4-l/bin/hostname0:adev31:adev32:adev3型3:adev3

一种常见的操作模式是提交脚本供以后执行。在本例中,脚本名称为我的脚本我们显式地使用节点adev9和adev10(-w“阿德夫[9-10]”,注意使用节点范围表达式)。我们还明确声明,后续作业步骤将产生四个任务每个,这将确保我们的分配至少包含四个处理器(每个要启动的任务一个处理器)。输出将出现在文件my.stdout(“-o my.stdout.”)中。此脚本包含嵌入其内部的作业的时间限制。可以根据需要使用前缀“#SBATCH”提供其他选项通过脚本开头的选项(在执行任何命令之前在脚本中)。命令行上提供的选项将覆盖中指定的任何选项脚本。请注意,my.script包含以下命令/bin/主机名在分配(脚本运行的位置)中的第一个节点上执行的,加上使用启动的两个作业步骤srun公司命令并按顺序执行。

adev0:猫my.script#!/垃圾桶/桶#SBATCH--时间=1/bin/主机名srun-l/bin/主机名srun-l/bin/pwdadev0:sbatch-n4-w“adev[9-10]”-o my.stdout my.scriptsbatch:提交的批处理作业469adev0:猫my.stdout阿德夫90:adev91:adev92:adev103:adev100:/home/jette1:/home/jette(主页/码头)2:/home/jette(主页/码头)3:/home/jette(主页/码头)

最后一种操作模式是创建资源分配并在该分配中生成作业步骤。这个salloc公司已使用命令创建资源分配并通常在中启动shell这一分配。通常会在该分配中执行一个或多个作业步骤使用srun公司命令启动任务(根据使用的MPI类型,启动机制可能不同,请参见磁粉探伤详情如下)。最后是由创建的shell沙洛克使用终止出口命令。Slurm不会自动迁移可执行文件或数据文件分配给作业的节点。文件必须存在于本地磁盘或某些全局文件系统中(例如NFS或Lustre)。我们提供工具sbcast公司以转移使用Slurm的层次结构将文件存储到已分配节点上的本地存储通信。在这个例子中,我们使用sbcast公司以转移可执行程序a.输出/tmp/joe.a.out公司在本地存储器上已分配节点的。执行程序后,我们将其从本地存储中删除

tux0:salloc-N1024巴什$sbcast a.out/tmp/joe.a.out授予的工作分配471$srun/tmp/joe.a.out(美元)结果为3.14159$srun-rm/tmp/joe.a.out$退出salloc:放弃作业分配471

在本例中,我们提交一个批处理作业,获取其状态,然后取消它。

adev0:sbatch测试srun:作业ID 473已提交adev0:挤压作业分区名称用户ST时间节点列表(原因)473批测试jill R 00:00 1 adev9adev0:scancel扫描473adev0:挤压作业分区名称用户ST时间节点列表(原因)

最佳实践,大量工作

考虑将相关工作放在一个具有多个工作的Slurm工作中出于性能原因和易于管理的考虑而采取的步骤。每个Slurm作业可以包含多个作业步骤和管理工作步骤的迟钝程度远低于单个工作。

作业阵列是一种有效的机制管理具有相同资源需求的批处理作业集合。大多数Slurm命令可以将作业数组作为单个元素(任务)进行管理或作为单个实体(例如,在单个命令中删除整个作业数组)。

磁粉探伤

MPI的使用取决于所使用的MPI类型。使用三种基本不同的操作模式通过这些不同的MPI实现。

  1. Slurm直接启动任务并初始化通过PMI2或PMIx API进行通信。(大多数支持现代MPI实现。)
  2. Slurm为工作创建资源分配,然后mpirun使用Slurm的基础设施(的旧版本OpenMPI)。
  3. Slurm为工作创建资源分配,然后mpirun使用Slurm以外的某种机制启动任务,例如SSH或RSH。这些任务是在Slurm的监控范围之外启动的或控制。Slurm的epilog应配置为净化放弃作业分配时的这些任务。这个强烈建议使用pamslurm_accept。

使用多种MPI的说明链接下面提供了带有Slurm的。

上次修改日期:2021年6月29日