salloc

部分:Slurm 命令 (1)
更新:Slurm 命令
索引

 

名称

salloc - 获取 Slurm 作业分配(节点集),执行命令, 并在命令完成后释放分配。

 

概要

salloc [选项(0)...] [ : [选项(N)...]] [命令(0) [参数(0)...]]

选项定义了在共同调度的异构作业中的多个作业。 有关异构作业的更多详细信息,请参见文档
https://slurm.schedmd.com/heterogeneous_jobs.html

 

描述

salloc 用于分配 Slurm 作业分配,这是一组资源 (节点),可能带有一些约束(例如每个 节点的处理器数量)。当 salloc 成功获得请求的分配时,它将运行 用户指定的命令。最后,当用户指定的命令完成后,salloc 释放作业分配。

命令可以是用户希望的任何程序。一些典型的命令是 xterm、包含 srun 命令的 shell 脚本和 srun(见示例 部分)。如果未指定命令,则 salloc 将运行用户的默认 shell。

以下文档描述了各种选项对 作业和任务的 CPU 分配的影响。
https://slurm.schedmd.com/cpu_management.html

注意:salloc 逻辑包括支持保存和恢复终端 行设置,并设计为在前台执行。如果您需要 在后台执行 salloc,请将其标准输入设置为某个文件,例如:"salloc -n16 a.out </dev/null &"

 

返回值

如果 salloc 无法执行用户命令,它将 返回 1 并将错误打印到 stderr。否则,如果成功或被信号 HUP、INT、KILL 或 QUIT 杀死:它将返回 0。

 

命令路径解析

如果提供了命令,则按以下顺序解析:

1. 如果命令以 "." 开头,则路径构造为: 当前工作目录 / 命令
2. 如果命令以 "/" 开头,则路径被视为绝对路径。
3. 如果命令可以通过 PATH 解析。见 path_resolution(7)。
4. 如果命令在当前工作目录中。

当前工作目录是调用进程的工作目录,除非 --chdir 参数被传递,这将覆盖当前工作 目录。

 

选项

-A, --account=<账户>
将此作业使用的资源计费到指定账户。 账户 是一个任意字符串。作业提交后,可以使用 scontrol 命令更改账户名称。

--acctg-freq=<数据类型>=<间隔>[,<数据类型>=<间隔>...]
定义作业计费和分析采样间隔(以秒为单位)。 这可以用于覆盖 slurm.conf 文件中的 JobAcctGatherFrequency 参数。<数据类型>=<间隔> 指定作业acct_gather 插件的任务 采样间隔或分析类型的采样间隔 由 acct_gather_profile 插件提供。可以指定多个 以逗号分隔的 <数据类型>=<间隔> 对。支持的 数据类型 值包括:
task
作业acct_gather 插件和任务 分析的采样间隔。
注意:此频率用于监控内存使用情况。如果强制执行内存限制,用户可以请求的最高频率是 slurm.conf 文件中配置的频率。它不能被禁用。

energy
使用 acct_gather_energy 插件进行能量分析的采样间隔。

network
使用 acct_gather_interconnect 插件进行 Infiniband 分析的采样间隔。

filesystem
使用 acct_gather_filesystem 插件进行文件系统分析的采样间隔。

任务采样间隔的默认值为 30 秒。 所有其他间隔的默认值为 0。 间隔为 0 将禁用指定类型的采样。 如果任务采样间隔为 0,则仅在作业终止时收集 计费信息(减少 Slurm 对作业的干扰)。
较小的(非零)值对作业性能的影响更大, 但对于少于 10,000 个任务的应用程序,30 秒的值不太可能被注意到。

--bb=<规格>
突发缓冲区规格。规格的形式取决于系统。 注意,突发缓冲区可能无法从登录节点访问,但需要 salloc 在其分配的计算节点之一上生成一个 shell。 使用 --bb 选项时,Slurm 解析此选项并创建一个 临时突发缓冲区脚本文件,该文件由突发缓冲区 插件内部使用。有关更多信息和示例,请参见 Slurm 的突发缓冲区指南:
https://slurm.schedmd.com/burst_buffer.html

--bbf=<文件名>
包含突发缓冲区规格的文件路径。 规格的形式取决于系统。 另见 --bb。 注意,突发缓冲区可能无法从登录节点访问,但需要 salloc 在其分配的计算节点之一上生成一个 shell。 有关更多信息和示例,请参见 Slurm 的突发缓冲区指南:
https://slurm.schedmd.com/burst_buffer.html

--begin=<时间>
推迟此作业分配的资格,直到指定的时间。

时间可以是 HH:MM:SS 的形式,以在 特定的时间运行作业(秒是可选的)。 (如果该时间已经过去,则假定为第二天。) 您还可以指定 午夜中午十一点(上午 11 点)、 下午茶(下午 3 点)或 茶点时间(下午 4 点),并且您可以在早上或晚上运行时 使用 AMPM 后缀。 您还可以通过指定 MMDDYYMM/DD/YY YYYY-MM-DD 的日期来说明作业将在何时运行。将日期和时间结合使用,格式为 YYYY-MM-DD[THH:MM[:SS]]。您还可以 给出类似 现在 + 计数 时间单位 的时间,其中时间单位 可以是 (默认)、分钟小时,并且您可以告诉 Slurm 在今天运行 作业,使用关键字 今天,并在明天运行 作业,使用关键字 明天。 在作业提交后,可以使用 scontrol 命令更改值。 例如:

   --begin=16:00
   --begin=now+1hour
   --begin=now+60           (默认以秒为单位)
   --begin=2010-01-20T12:34:00

关于日期/时间规格的说明:
 - 尽管 'seconds' 字段 的 HH:MM:SS 时间 规格 是 代码允许的,但请注意,Slurm 调度程序的轮询时间 不够精确,无法保证在确切的 秒上调度作业。作业将在指定时间之后的下一个轮询 开始。确切的轮询间隔取决于 Slurm 调度程序(例如,默认调度/内置为 60 秒)。
 - 如果未指定时间(HH:MM:SS),默认值为(00:00:00)。
 - 如果指定了没有年份的日期(例如,MM/DD), 则假定为当前年份,除非 MM/DD 和 HH:MM:SS 的组合 在该年份已经过去,在这种情况下将使用下一年。

--bell
强制 salloc 在作业分配被授予时响铃 (仅当 stdout 是 tty 时)。默认情况下,salloc 仅在分配 待处理超过十秒时响铃(仅当 stdout 是 tty 时)。另见选项 --no-bell

-D, --chdir=<路径>
在开始执行之前更改目录到 路径。路径 可以指定为完整路径或相对路径到执行命令的目录。

--cluster-constraint=<列表>
指定一个联邦集群必须具备的特性,以便提交一个兄弟作业。 如果集群至少具有一个指定的特性,Slurm 将尝试向其提交一个兄弟作业。

-M, --clusters=<字符串>
要发出命令的集群。多个集群名称可以用逗号分隔。 作业将提交到提供最早预期 作业启动时间的一个集群。默认值为当前集群。值为 'all' 将查询在所有集群上运行。 注意,slurmdbd 必须处于运行状态,以使此选项正常工作,除非 在配置了 FederationParameters=fed_display 的联邦中运行。

--comment=<字符串>
任意注释。

-C, --constraint=<列表>
节点可以由 Slurm 管理员分配 特性。 用户可以使用约束选项指定作业所需的 特性。 如果您正在寻找“软”约束,请参见 --prefer 以获取更多信息。 只有具有与作业约束匹配的特性的节点将被用于 满足请求。 可以使用 AND、OR、匹配 OR、 资源计数等指定多个约束(某些运算符在所有系统类型上不受支持)。

注意:可更改特性是由 NodeFeatures 插件定义的特性。

支持的 --constraint 选项包括:

单一名称
仅使用具有指定特性的节点。 例如,--constraint="intel"

节点计数
请求可以通过在特性名称后附加星号和计数来指定所需的节点数。 例如,--nodes=16 --constraint="graphics*4" 表示作业需要 16 个节点,并且至少四个节点必须具有特性 "graphics." 如果请求多个特性并使用节点计数,请求 必须用方括号括起来。

注意:此选项不受 NodeFeatures 插件的支持。 可以使用异构作业代替。

AND
仅使用具有所有指定特性的节点。 使用和符号作为 AND 运算符。 例如,--constraint="intel&gpu"

OR
仅使用具有至少一个指定特性的节点。 使用竖线作为 OR 运算符。如果未请求可更改特性,则 分配中的节点可以具有不同的特性。例如, salloc -N2 --constraint="intel|amd" 可以导致作业分配 其中一个节点具有 intel 特性,另一个节点具有 amd 特性。 但是,如果表达式包含可更改特性,则所有 OR 运算符 将自动视为匹配 OR,以便作业 分配中的所有节点具有相同的特性集。例如, salloc -N2 --constraint="foo|bar&baz" 作业分配两个节点,其中两个节点都具有 foo,或 bar 和 baz(一个 或两个节点可以具有 foo、bar 和 baz)。NodeFeatures 插件 将找到匹配作业 分配中所有节点的第一组节点特性;这些特性被设置为节点上的活动特性,并传递给 RebootProgram(见 slurm.conf(5))和辅助脚本(见 helpers.conf(5))。在这种情况下,辅助插件使用 匹配两个节点的 "foo" 或 "bar,baz" 的第一个。

匹配 OR
如果一组可能的选项中的只有一个应该用于所有分配的 节点,则使用 OR 运算符并将选项放在方括号内。 例如,--constraint="[rack1|rack2|rack3|rack4]" 可能 用于指定所有节点必须在集群的单个机架上分配,但可以使用这四个机架中的任何一个。

多个计数
可以使用 AND 运算符并将选项放在方括号内来指定多个资源的特定计数。 例如,--constraint="[rack1*2&rack2*4]" 可能 用于指定必须从具有 "rack1" 特性的节点中分配两个节点,并且必须从具有 "rack2" 特性的节点中分配四个节点。

注意:此构造不支持多个 Intel KNL NUMA 或 MCDRAM 模式。例如,--constraint="[(knl&quad)*2&(knl&hemi)*4]" 不受支持,而 --constraint="[haswell*2&(knl&hemi)*4]" 是支持的。 指定多个 KNL 模式需要使用异构作业。

注意:此选项不受 NodeFeatures 插件的支持。

注意:多个计数可能导致作业分配具有非最佳 网络布局。

方括号
方括号可用于指示您正在寻找具有 不同要求的节点集,这些要求包含在方括号内。例如, --constraint="[(rack1|rack2)*1&(rack3)*2]" 将为您获取一个具有 "rack1" 或 "rack2" 特性的节点和两个具有 "rack3" 特性的节点。 如果请求多个特性并使用节点计数,请求 必须用方括号括起来。

注意:方括号仅保留用于 多个计数匹配 OR 语法。 AND 运算符要求每个特性在方括号内都有一个计数 (即 "[quad*2&hemi*1]")。Slurm 仅允许每个作业有一组括起来的 约束。

注意:方括号不受 NodeFeatures 插件的支持。可以使用竖线字符请求匹配 OR,而不需要方括号,前提是至少有一个可更改的特性。

括号
括号可用于将相似的节点特性分组。例如, --constraint="[(knl&snc4&flat)*4&haswell*1]" 可能用于指定 需要四个具有 "knl"、"snc4" 和 "flat" 特性的节点和一个具有 "haswell" 特性的节点。 括号也可以用于分组操作。如果没有括号,节点 特性将严格从左到右解析。 例如, --constraint="foo&bar|baz" 请求具有 foo 和 bar 或 baz 的节点。 --constraint="foo|bar&baz" 请求具有 foo 和 baz 或 bar 和 baz 的节点(请注意,baz 与所有内容进行了 AND 操作)。 --constraint="foo&(bar|baz)" 请求具有 foo 和至少 一个 bar 或 baz 的节点。 注意:括号内的 OR 不应与 KNL NodeFeatures 插件一起使用,但受辅助 NodeFeatures 插件的支持。

--container=<容器路径>
OCI 容器包的绝对路径。

--container-id=<容器 ID>
OCI 容器的唯一名称。

--contiguous
如果设置,则分配的节点必须形成一个连续的集合。

注意:此选项仅适用于 topology/flat 插件。 其他拓扑插件会修改节点顺序并阻止此选项生效。

-S, --core-spec=<数字>
每个节点为系统操作保留的专用核心计数, 不用于应用程序。 如果启用 AllowSpecResourcesUsage,作业可以使用此选项覆盖 其所有分配节点的 CoreSpecCount。 被覆盖的专用核心仍将保留供系统进程使用。 作业将获得其余核心的隐式 --exclusive 分配, 使作业的进程能够使用(并 计费)节点上除被覆盖的专用核心外的所有核心。 此选项不能与 --thread-spec 选项一起使用。

注意:显式设置作业的专用核心值隐式设置 --exclusive 选项。

--cores-per-socket=<核心数>
限制节点选择为每个插槽至少具有指定数量的 核心。有关启用任务/亲和性插件时的更多信息,请参见 -B 选项 上面的说明。
注意:如果未指定 -n,此选项可能隐式设置任务数(每个请求的线程一个任务)。

--cpu-freq=<p1>[-p2][:p3]

请求在此分配内由 srun 命令启动的作业步骤 尽可能以某个请求的频率运行,针对计算节点上为步骤选择的 CPU。

p1 可以是 [#### | low | medium | high | highm1],这将设置 频率 scaling_speed 为相应的值,并将频率 scaling_governor 设置为 UserSpace。有关值的定义,请参见下文。

p1 可以是 [Conservative | OnDemand | Performance | PowerSave],这将 将 scaling_governor 设置为相应的值。该治理者必须在 slurm.conf 选项 CpuFreqGovernors 中设置。

p2 存在时,p1 将是最小缩放频率,p2 将是最大缩放频率。在这种情况下,治理者 p3 或 CpuFreqDef 不能是 UserSpace,因为它不支持范围。

p2 可以是 [#### | medium | high | highm1]。p2 必须大于 p1,并且与 UserSpace 治理者不兼容。

p3 可以是 [Conservative | OnDemand | Performance | PowerSave | SchedUtil | UserSpace],这将把治理者设置为相应的值。

如果 p3 是 UserSpace,则频率 scaling_speed、scaling_max_freq 和 scaling_min_freq 将静态设置为 p1 定义的值。

任何请求的频率低于可用的最小频率将被四舍五入到可用的最小频率。同样,任何请求的频率 高于可用的最大频率将被四舍五入到可用的最大频率。

slurm.conf 中的 CpuFreqDef 参数将用于在没有 p3 的情况下设置治理者。如果没有 CpuFreqDef,默认治理者将使用每个 CPU 中设置的系统当前治理者。因此,不允许在没有 CpuFreqDef 或特定治理者的情况下指定范围。

目前可接受的值包括:

####
以千赫兹为单位的频率

最低可用频率

最高可用频率

高-1
(高减去一)将选择下一个最高可用频率

尝试将频率设置为可用范围的中间值

保守
尝试使用保守 CPU 治理者

按需
尝试使用按需 CPU 治理者(默认值)

性能
尝试使用性能 CPU 治理者

节能
尝试使用节能 CPU 治理者

用户空间
尝试使用用户空间 CPU 治理者

在请求 --cpu-freq 选项时,将在作业 步骤中设置以下信息环境变量。

        SLURM_CPU_FREQ_REQ

如果在发出 'srun' 命令时设置了此环境变量,则该环境变量也可以用于提供 CPU 频率请求的值。 命令行上的 --cpu-freq 将覆盖 环境变量值。环境变量的形式与命令行相同。 有关 SLURM_CPU_FREQ_REQ 变量的描述,请参见 环境变量 部分。

注意:此参数被视为请求,而不是要求。 如果作业步骤的节点不支持设置 CPU 频率,或者 请求的值超出合法频率的范围,则记录错误,但允许作业步骤继续。

注意:仅为作业步骤的 CPU 设置频率 意味着任务被限制在这些 CPU 上。如果未配置任务 限制(即启用任务/亲和性 TaskPlugin,或启用任务/cgroup TaskPlugin,并在 cgroup.conf 中设置了 "ConstrainCores=yes"),则忽略此参数。

注意:当步骤完成时,每个 选定 CPU 的频率和治理者将重置为先前的值。

注意:使用 --cpu-freq 选项提交作业 时,使用 linuxproc 作为 ProctrackType 可能导致作业在 计费能够轮询作业信息之前运行得太快。因此,并非所有 计费信息都会存在。

--cpus-per-gpu=<ncpus>
请求为每个分配的 GPU 分配 ncpus 个处理器。 继承此值的步骤将隐含 --exact。 与 --cpus-per-task 选项不兼容。

-c, --cpus-per-task=<ncpus>
告知 Slurm 后续作业步骤将需要每个 任务 ncpus 个处理器。默认情况下,Slurm 将为每个任务分配一个处理器。

例如, 考虑一个具有 4 个任务的应用程序,每个任务需要 3 个处理器。如果我们的 集群由四核节点组成,我们只要求 12 个处理器,控制器可能只给我们 3 个节点。然而,通过使用 --cpus-per-task=3 选项,控制器知道每个任务需要 3 个处理器在同一节点上,控制器将授予 4 个节点的分配,每个任务一个。

--deadline=<OPT>
如果在此截止日期之前无法结束,则删除作业 (开始 >(截止日期 - 时间[-分钟]))。 默认情况下没有截止日期。请注意,如果在作业所在的分区上未配置 DefaultTimeMaxTime,则作业需要指定某种形式的时间限制(--time[-分钟]),如果要使用截止日期。

有效的时间格式为:
HH:MM[:SS] [AM|PM]
MMDD[YY] 或 MM/DD[/YY] 或 MM.DD[.YY]
MM/DD[/YY]-HH:MM[:SS]
YYYY-MM-DD[THH:MM[:SS]]]
now[+count[seconds(default)|minutes|hours|days|weeks]]

--delay-boot=<分钟>
如果作业在此时间段内有资格运行,则不重启节点以满足此作业的特性规格。 如果作业等待的时间少于指定的时间,则只使用 已经具有指定特性的节点。 参数以分钟为单位。 系统管理员可以使用 slurm.conf 文件中的 delay_boot 选项设置默认值,否则默认值为零(无延迟)。

-d, --dependency=<依赖列表>
推迟此作业的开始,直到满足指定的依赖关系。一旦依赖关系满足,它将从作业中删除。 <依赖列表> 的形式为 <类型:作业_id[:作业_id][,类型:作业_id[:作业_id]]> 或 <类型:作业_id[:作业_id][?类型:作业_id[:作业_id]]>。 如果使用 "," 分隔符,则必须满足所有依赖关系。 如果使用 "?" 分隔符,则可以满足任何依赖关系。 只能使用一个分隔符。例如:
-d afterok:20:21,afterany:23
意味着作业只能在作业 20 和 21 返回代码为 0 并且作业 23 完成后运行。然而:
-d afterok:20:21?afterany:23
意味着任何条件(afterok:20 或 afterok:21 或 afterany:23) 都足以释放作业。 许多作业可以共享相同的依赖关系,这些作业甚至可以属于 不同的用户。作业提交后,可以使用 scontrol 命令更改值。 在联邦中允许对远程作业的依赖关系。 一旦作业依赖关系由于前一个作业的终止状态而失败, 依赖作业将永远不会运行,即使前一个作业重新排队并且在后续执行中具有不同的终止状态。
after:job_id[[+时间][:jobid[+时间]...]]
在指定的作业启动或取消后以及从作业 启动或取消发生的 '时间'(以分钟为单位)后,此 作业可以开始执行。如果未给出 '时间',则在 启动或取消后没有延迟。

afterany:job_id[:jobid...]
此作业可以在指定的作业终止后开始执行。 这是默认的依赖类型。

afterburstbuffer:job_id[:jobid...]
此作业可以在指定的作业终止后以及 任何相关的突发缓冲区阶段输出操作完成后开始执行。

aftercorr:job_id[:jobid...]
此作业数组的任务可以在指定作业中对应的任务 ID 成功完成后开始执行(以零的退出代码完成)。

afternotok:job_id[:jobid...]
此作业可以在指定的作业以某种失败状态终止后开始执行(非零退出代码、节点故障、超时等)。 此作业必须在指定作业仍处于活动状态时提交,或在指定作业结束后的 MinJobAge 秒内提交。

afterok:job_id[:jobid...]
此作业可以在指定的作业成功执行后开始执行(以零的退出代码完成)。 此作业必须在指定作业仍处于活动状态时提交,或在指定作业结束后的 MinJobAge 秒内提交。

singleton
此作业可以在任何先前启动的作业 共享相同作业名称和用户的作业终止后开始执行。 换句话说,在任何时候,只能运行或挂起一个由该名称和该用户拥有的作业。 在联邦中,单例依赖关系必须在所有集群上满足, 除非在 slurm.conf 中使用 DependencyParameters=disable_remote_singleton。

-m, --distribution={*|block|cyclic|arbitrary|plane=<size>}[:{*|block|cyclic|fcyclic}[:{*|block|cyclic|fcyclic}]][,{Pack|NoPack}]

指定远程进程的替代分配方法。 对于作业分配,这设置将用于 后续 srun 请求的环境变量,并且还会影响将为 作业分配选择哪些核心。

此选项控制将任务分配到已分配资源的节点,以及将这些资源 分配给任务以进行绑定(任务亲和性)。第一个分配 方法(在第一个 ":" 之前)控制将任务分配到节点。 第二个分配方法(在第一个 ":" 之后) 控制将分配的 CPU 在插槽之间分配以绑定 到任务。第三个分配方法(在第二个 ":" 之后)控制 将分配的 CPU 在核心之间分配以绑定到任务。 仅在启用任务亲和性时,第二和第三个分配适用。 第三个分配仅在配置了任务/cgroup 插件时支持。每种分配类型的默认值由 * 指定。

请注意,对于 select/cons_tres,分配给每个插槽和节点的 CPU 数量可能不同。有关资源分配、任务分配到 节点和任务绑定到 CPU 的更多信息,请参见 mc_support 文档。

第一个分配方法(任务在节点之间的分配):

*
使用将任务分配到节点的默认方法(块)。

块分配方法将任务分配到节点,使得连续的任务共享一个节点。例如,考虑一个 分配有三个节点,每个节点有两个 CPU。四任务块 分配请求将把这些任务分配到节点上,任务一和二在第一个节点上,任务三在第二个节点上, 任务四在第三个节点上。如果任务数超过分配的节点数, 块分配是默认行为。

循环
循环分配方法将任务分配到节点,使得连续的任务在连续的节点上分配(采用轮询方式)。例如,考虑分配三个节点,每个节点有两个 CPU。四个任务的循环分配请求将把这些任务分配到节点上,其中任务一和四在第一个节点,任务二在第二个节点,任务三在第三个节点。 注意,当 SelectType 为 select/cons_tres 时,可能不会在每个节点上分配相同数量的 CPU。任务分配将在所有尚未分配给任务的 CPU 的节点之间轮询。 如果任务数量不大于分配的节点数量,则循环分配是默认行为。

平面
任务以大小 <size> 的块分配。必须指定大小或设置 SLURM_DIST_PLANESIZE。分配给每个节点的任务数量与循环分配相同,但分配给每个节点的任务 ID 取决于平面大小。此选项不能与其他分配规范组合。 有关更多详细信息(包括示例和图表),请参见 mc_support 文档和 https://slurm.schedmd.com/dist_plane.html

任意
任意分配方法将按照环境变量 SLURM_HOSTFILE 指定的文件中的顺序分配进程。如果列出了此变量,它将覆盖任何指定的其他方法。如果未设置,则默认方法为块。 主机文件中必须至少包含请求的主机数量,并且每行一个或用逗号分隔。如果指定任务数量(-n--ntasks=<number>),您的任务将在节点上按照文件的顺序排列。
注意:作业分配上的任意分配选项仅控制分配给作业的节点,而不控制这些节点上 CPU 的分配。此选项主要用于控制 srun 命令中现有作业分配的作业步骤任务布局。
注意:如果给出了任务数量并且也给出了请求的节点列表,则如果列表中的节点数量大于任务数量,则将使用的节点数量将减少以匹配任务数量。

第二种分配方法(在插槽间分配 CPU 以进行绑定):

*
使用默认方法在插槽间分配 CPU(循环)。

块分配方法将连续从同一插槽分配已分配的 CPU 以绑定到任务,然后使用下一个连续的插槽。

循环
循环分配方法将为给定任务连续从同一插槽分配已分配的 CPU,并从下一个连续的插槽为下一个任务分配,以在插槽之间以轮询方式进行分配。 需要多个 CPU 的任务将尽可能在单个插槽上分配所有这些 CPU。
注意:在启用超线程的节点上,未请求完整核心的任务可能会在插槽之间分配。可以通过指定 --ntasks-per-core=1 来避免这种情况,这将强制任务分配完整的核心。

fcyclic
fcyclic 分配方法将从连续的插槽中以轮询方式分配已分配的 CPU 以绑定到任务。 需要多个 CPU 的任务将在插槽之间以循环方式分配每个 CPU。

第三种分配方法(在核心间分配 CPU 以进行绑定):

*
使用默认方法在核心间分配 CPU(继承自第二种分配方法)。

块分配方法将连续从同一核心分配已分配的 CPU 以绑定到任务,然后使用下一个连续的核心。

循环
循环分配方法将为给定任务连续从同一核心分配已分配的 CPU,并从下一个连续的核心为下一个任务分配,以在核心之间以轮询方式进行分配。

fcyclic
fcyclic 分配方法将从连续的核心中以轮询方式分配已分配的 CPU 以绑定到任务。

对节点上的任务分配的可选控制:

打包
与其在分配的节点上均匀分配作业步骤的任务,不如尽可能紧密地将它们打包在节点上。 这仅适用于使用“块”任务分配方法时。

不打包
与其将作业步骤的任务尽可能紧密地打包在节点上,不如均匀分配它们。 此用户选项将优先于 SelectTypeParameters CR_Pack_Nodes 配置参数。

-x, --exclude=<node_name_list>
明确排除某些节点不被分配给作业的资源。

--exclusive[={user|mcs|topo}]
作业分配不能与其他正在运行的作业(或带有“=topo”的拓扑段)共享节点(或仅与其他用户共享“=user”选项或与“=mcs”选项共享)。 如果未指定用户/mcsi/topo(即作业分配不能与其他正在运行的作业共享节点),则作业将在分配的所有节点上分配所有 CPU 和 GRES,但仅分配其请求的内存。这是为了支持作业调度,因为挂起的作业仍然驻留在内存中。要请求节点上的所有内存,请使用 --mem=0。 默认的共享/独占行为取决于系统配置,分区的 OverSubscribe 选项优先于作业的选项。 注意:由于共享 GRES(MPS)不能与共享 GRES(GPU)同时分配,因此此选项仅分配所有共享 GRES,而不分配任何底层共享 GRES。

注意:此选项与 --oversubscribe 互斥。

--extra=<string>
如果使用空格或某些特殊字符,则用单引号或双引号括起来的任意字符串。

如果启用 SchedulerParameters=extra_constraints,则此字符串用于根据每个节点的 Extra 字段进行节点过滤。

-B, --extra-node-info=<sockets>[:cores[:threads]]
限制节点选择到至少具有指定数量的插槽、每个插槽的核心和/或每个核心的线程的节点。
注意:这些选项不指定资源分配大小。 每个指定的值被视为最小值。 星号 (*) 可以用作占位符,表示要利用所有可用的该类型资源。值也可以指定为最小-最大。各个级别也可以在单独的选项中指定:
    --sockets-per-node=<sockets>
    --cores-per-socket=<cores>
    --threads-per-core=<threads>
如果启用任务/亲和插件,则以这种方式指定的分配也会导致后续启动的任务绑定到线程,如果 -B 选项指定了线程计数,否则绑定到核心计数,如果指定了核心计数,则绑定到插槽计数。 如果 SelectType 配置为 select/cons_tres,则必须具有 CR_Core、CR_Core_Memory、CR_Socket 或 CR_Socket_Memory 参数,以使此选项生效。 如果未指定,scontrol show job 将显示 'ReqS:C:T=*:*:*'。此选项适用于作业分配。
注意:此选项与 --hint--threads-per-core--ntasks-per-core 互斥。
注意:如果未指定 -n,此选项可能隐式设置任务数量(每个请求的线程一个任务)。

--gpu-bind=[verbose,]<type>
等同于 --tres-bind=gres/gpu:[verbose,]<type> 有关所有选项和文档,请参见 --tres-bind

--gpu-freq=[<type]=value>[,<type=value>][,verbose]
请求为分配给作业的 GPU 配置特定的频率值。 此选项可用于独立配置 GPU 及其内存频率。 作业完成后,所有受影响的 GPU 的频率将重置为最高可能值。 在某些情况下,系统功率限制可能会覆盖请求的值。 type 字段可以是“memory”。 如果未指定type,则隐含 GPU 频率。 value 字段可以是“low”、“medium”、“high”、“highm1”或以兆赫(MHz)为单位的数字值。 如果指定的数字值不可用,将使用尽可能接近的值。有关值的定义,请参见下文。 verbose 选项会记录当前 GPU 频率信息。 使用示例包括“--gpu-freq=medium,memory=high”和“--gpu-freq=450”。

支持的value 定义:

最低可用频率。

尝试设置在可用范围中间的频率。

最高可用频率。

highm1
(高减一) 将选择下一个最高可用频率。

-G, --gpus=[type:]<number>
指定作业所需的 GPU 总数。 可以提供可选的 GPU 类型说明。 例如“--gpus=volta:3”。 另请参见 --gpus-per-node--gpus-per-socket--gpus-per-task 选项。
注意:分配必须包含每个节点至少一个 GPU,或者如果使用类型,则每个节点每种 GPU 类型一个。如果不同节点需要不同的 GPU 类型,请使用异构作业。

--gpus-per-node=[type:]<number>
指定作业在作业资源分配中每个节点所需的 GPU 数量。 可以提供可选的 GPU 类型说明。 例如“--gpus-per-node=volta:3”。 可以在逗号分隔的列表中请求多个选项,例如: “--gpus-per-node=volta:3,kepler:1”。 另请参见 --gpus--gpus-per-socket--gpus-per-task 选项。

--gpus-per-socket=[type:]<number>
指定作业在作业资源分配中每个插槽所需的 GPU 数量。 可以提供可选的 GPU 类型说明。 例如“--gpus-per-socket=volta:3”。 可以在逗号分隔的列表中请求多个选项,例如: “--gpus-per-socket=volta:3,kepler:1”。 要求作业指定每个节点的插槽数量(--sockets-per-node)。 另请参见 --gpus--gpus-per-node--gpus-per-task 选项。

--gpus-per-task=[type:]<number>
指定作业在作业资源分配中每个任务所需的 GPU 数量。 可以提供可选的 GPU 类型说明。 例如“--gpus-per-task=volta:1”。可以在逗号分隔的列表中请求多个选项,例如: “--gpus-per-task=volta:3,kepler:1”。另请参见 --gpus--gpus-per-socket--gpus-per-node 选项。 此选项要求明确的任务计数,例如 -n、--ntasks 或 “--gpus=X --gpus-per-task=Y”,而不是使用 -N、--nodes 的模糊节点范围。 此选项将隐式设置 --tres-bind=gres/gpu:per_task:<gpus_per_task>, 或者如果指定了多个 GPU 类型,则设置 --tres-bind=gres/gpu:per_task:<gpus_per_task_type_sum>。但是,可以使用显式的 --tres-bind=gres/gpu 说明来覆盖该设置。

--gres=<list>
指定每个节点请求的通用可消耗资源的逗号分隔列表。 列表中每个条目的格式为“name[[:type]:count]”。 name 是可消耗资源的类型(例如 GPU)。 type 是资源的可选分类(例如 a100)。 count 是这些资源的数量,默认值为 1。 计数可以有后缀“k”或“K”(1024 的倍数)、“m”或“M”(1024 x 1024 的倍数)、“g”或“G”(1024 x 1024 x 1024 的倍数)、“t”或“T”(1024 x 1024 x 1024 x 1024 的倍数)、“p”或“P”(1024 x 1024 x 1024 x 1024 x 1024 的倍数)。 指定的资源将在每个节点上分配给作业。 可用的通用可消耗资源由系统管理员配置。 如果选项参数为“help”,将打印可用的通用可消耗资源列表,并且命令将退出。 使用示例包括“--gres=gpu:2”、“--gres=gpu:kepler:2”和“--gres=help”。

--gres-flags=<type>
指定通用资源任务绑定选项。

每个共享多个任务
否定 每个共享一个任务。如果在 SelectTypeParameters 中默认设置,则此选项非常有用。

禁用绑定
否定 强制绑定。如果在 SelectTypeParameters 中默认设置,则此选项非常有用。

强制绑定
作业可用的唯一 CPU 将是绑定到所选 GRES 的 CPU(即在 gres.conf 文件中标识的 CPU 将严格执行)。此选项可能导致作业启动延迟。 例如,要求两个 GPU 和一个 CPU 的作业将被延迟,直到单个插槽上的两个 GPU 可用,而不是使用绑定到不同插槽的 GPU,但是,由于通信速度的提高,应用程序性能可能会得到改善。 要求节点配置有多个插槽,并且资源过滤将在每个插槽的基础上执行。
注意:此选项可以在 SelectTypeParameters 中默认设置。
注意:此选项特定于 SelectType=cons_tres
注意:如果尝试在多个插槽上的多个 GRES 上强制绑定,此选项可能会产生未定义的结果。

每个共享一个任务
不允许不同任务从同一共享 GRES 中分配共享 GRES。
注意:仅在使用 --tres-per-task 请求共享 GRES 时强制执行此标志。
注意:此选项可以在 SelectTypeParameters=ONE_TASK_PER_SHARING_GRES 中默认设置。
注意:此选项特定于 SelectTypeParameters=MULTIPLE_SHARING_GRES_PJ

-h, --help
显示帮助信息并退出。

--hint=<type>
根据应用程序提示绑定任务。
注意:此选项隐含某些相关选项的特定值,这阻止其与任何用户指定的 --ntasks-per-core--threads-per-core-B 值一起使用。 这些冲突选项在作为命令行参数指定时将覆盖 --hint。如果冲突选项作为环境变量指定,则命令行参数中的 --hint 将优先。
计算绑定
选择计算绑定应用程序的设置: 在每个插槽中使用所有核心,每个核心一个线程。

内存绑定
选择内存绑定应用程序的设置: 在每个插槽中仅使用一个核心,每个核心一个线程。

多线程
使用额外线程进行核心内多线程 这可以使通信密集型应用受益。 仅在任务/亲和插件支持的情况下。

不多线程
不使用额外线程进行核心内多线程; 限制任务每个核心一个线程。 仅在任务/亲和插件支持的情况下。

帮助
显示此帮助信息

-H, --hold
指定作业以保持状态提交(优先级为零)。 现在可以使用 scontrol 重置其优先级来释放被保持的作业(例如“scontrol release <job_id>”)。

-I, --immediate[=<seconds>]
如果在指定的时间段内未提供资源,则退出。 如果未给出参数(秒默认为 1),则请求成功必须立即可用资源。如果在 SchedulerParameters 中配置了 defer,并且 seconds=1,则分配请求将立即失败;defer 冲突并优先于此选项。 默认情况下,--immediate 为关闭状态,命令将在资源变得可用之前阻塞。由于此选项的参数是可选的,因此为了正确解析,单字母选项必须紧跟其后,并且不能在它们之间包含空格。例如“-I60”,而不是“-I 60”。

-J, --job-name=<jobname>
指定作业分配的名称。指定的名称将在查询系统上运行的作业时与作业 ID 号码一起出现。默认作业名称为命令行上指定的“命令”的名称。

-K, --kill-command[=signal]
salloc 在分配被授予后始终运行用户指定的命令。salloc 将无限期等待该命令退出。 如果您指定了 --kill-command 选项,salloc 将在 Slurm 控制器告诉 salloc 其作业分配已被撤销时向您的命令发送信号。作业分配可能因几个原因被撤销:有人使用 scancel 撤销了分配,或者分配达到了时间限制。如果您未指定信号名称或编号,并且 Slurm 配置为在作业终止时向生成的命令发送信号,则默认信号为交互会话的 SIGHUP 和非交互会话的 SIGTERM。由于此选项的参数是可选的,因此为了正确解析,单字母选项必须紧跟其后,并且不能在它们之间包含空格。例如“-K1”,而不是“-K 1”。

-L, --licenses=<license>[@db][:count][,license[@db][:count]...]
指定必须分配给此作业的许可证(或集群所有节点上可用的其他资源)。 许可证名称后可以跟一个冒号和计数(默认计数为 1)。 可以请求多个许可证。如果它们用逗号(“,”表示 AND)分隔,则所有请求的许可证都是作业所需的。例如,“--licenses=foo:4,bar”。如果用管道(“|”表示 OR)分隔,则仅需要请求的许可证之一。例如,“--licenses=foo:4bar”。不能同时使用 AND 和 OR。

注意:在提交异构作业时,许可证请求只能在第一个组件作业上进行。 例如“salloc -L ansys:2 :”。

注意:如果在 AccountingStorageTres 中跟踪许可证,并且使用了 OR,则 ReqTRES 将显示所有请求的 tres 以逗号分隔。AllocTRES 将仅显示分配给作业的许可证。

注意:当作业请求 OR 的许可证时,Slurm 将尝试按照请求的顺序分配许可证。即使请求的其余许可证可以在请求的保留上满足,此指定顺序也将优先。这也适用于当 SchedulerParameters=bf_licenses 配置时的回填计划。

--mail-type=<type>
当发生某些事件类型时,通过电子邮件通知用户。 有效的 type 值为 NONE、BEGIN、END、FAIL、REQUEUE、ALL(等同于 BEGIN、END、FAIL、INVALID_DEPEND、REQUEUE 和 STAGE_OUT)、INVALID_DEPEND(依赖关系从未满足)、STAGE_OUT(突发缓冲区阶段完成并拆除完成)、TIME_LIMIT、TIME_LIMIT_90(达到时间限制的 90%)、TIME_LIMIT_80(达到时间限制的 80%)和 TIME_LIMIT_50(达到时间限制的 50%)。 可以在逗号分隔的列表中指定多个 type 值。 NONE 将抑制所有事件通知,忽略任何其他指定的值。 默认情况下,不发送电子邮件通知。 要通知的用户由 --mail-user 指定。

--mail-user=<user>
接收状态更改的电子邮件通知的用户,如 --mail-type 所定义。这可以是完整的电子邮件地址或用户名。如果指定了用户名,则将附加 slurm.conf 中的 MailDomain 值以创建电子邮件地址。 默认值为提交用户。

--mcs-label=<mcs>
仅在启用兼容的 MCSPlugin 时使用。此参数是用户所属的组(mcs/group)或任意标签字符串(mcs/label)。在这两种情况下,默认情况下不会分配标签。有关更多详细信息,请参阅 MCS 文档:<https://slurm.schedmd.com/mcs.html>

--mem=<size>[units]
指定每个节点所需的实际内存。 默认单位为兆字节。 可以使用后缀 [K|M|G|T] 指定不同的单位。 默认值为 DefMemPerNode,最大值为 MaxMemPerNode。如果配置了这两个参数,可以使用 scontrol show config 命令查看。 通常在整个节点分配给作业时使用此参数(SelectType=select/linear)。 另请参见 --mem-per-cpu--mem-per-gpu--mem--mem-per-cpu--mem-per-gpu 选项是互斥的。如果将 --mem--mem-per-cpu--mem-per-gpu 作为命令行参数指定,则它们将优先于环境。

注意:内存大小为零的指定被视为特殊情况,并授予作业对每个节点上所有内存的访问权限。

注意:每个 slurmstepd 进程使用的内存包含在作业的总内存使用中。它通常消耗 20MiB 到 200MiB 之间的内存,尽管这可能会根据系统配置和任何加载的插件而有所不同。

注意:除非 Slurm 配置为使用强制机制,否则内存请求将不严格执行。有关更多详细信息,请参见 ConstrainRAMSpacecgroup.conf(5) 手册页和 OverMemoryKillslurm.conf(5) 手册页。

--mem-bind=[{quiet|verbose},]<type>
将任务绑定到内存。仅在启用任务/亲和插件并且可用 NUMA 内存功能时使用。 请注意,CPU 和内存绑定的分辨率 在某些架构上可能不同。 例如,CPU 绑定可能在处理器内的核心级别执行,而内存绑定将在节点级别执行,其中“节点”的定义可能因系统而异。 默认情况下,不执行内存绑定;任何使用任何 CPU 的任务都可以使用任何内存。此选项通常用于确保每个任务绑定到离其分配的 CPU 最近的内存。不建议使用除“none”或“local”以外的任何类型。

注意:要让 Slurm 始终报告在 shell 中执行的所有命令的所选内存绑定,可以通过将 SLURM_MEM_BIND 环境变量值设置为“verbose”来启用详细模式。

在使用 --mem-bind 时,将设置以下信息环境变量:

        SLURM_MEM_BIND_LIST
        SLURM_MEM_BIND_PREFER
        SLURM_MEM_BIND_SORT
        SLURM_MEM_BIND_TYPE
        SLURM_MEM_BIND_VERBOSE

有关单个 SLURM_MEM_BIND* 变量的更详细描述,请参见 环境变量 部分。

支持的选项包括:

帮助
显示此帮助信息

本地
使用与正在使用的处理器本地的内存

map_mem:<list>
通过在任务(或排名)上设置内存掩码进行绑定,如所指定的 <list> 为 <numa_id_for_task_0>,<numa_id_for_task_1>,...。 映射是为节点指定的,并且相同的映射应用于每个节点上的任务(即,每个节点上的最低任务 ID 映射到列表中指定的第一个 ID,依此类推)。 NUMA ID 被解释为十进制值,除非它们以 '0x' 开头,在这种情况下它们被解释为十六进制值。 如果任务(或排名)的数量超过此列表中的元素数量,则将根据需要从列表的开头重新使用列表中的元素。 为了简化对大量任务计数的支持,列表可以跟随带有星号和重复计数的映射。 例如“map_mem:0x0f*4,0xf0*4”。 为了获得可预测的绑定结果,作业中每个节点的所有 CPU 应分配给作业。

mask_mem:<list>
通过在任务(或排名)上设置内存掩码进行绑定,如所指定的 <list> 为 <numa_mask_for_task_0>,<numa_mask_for_task_1>,...。 映射是为节点指定的,并且相同的映射应用于每个节点上的任务(即,每个节点上的最低任务 ID 映射到列表中指定的第一个掩码,依此类推)。 NUMA 掩码 始终 被解释为十六进制值。 请注意,如果掩码不以 [0-9] 开头,则必须在掩码前加上 '0x',以便将其视为数值。 如果任务(或排名)的数量超过此列表中的元素数量,则将根据需要从列表的开头重新使用列表中的元素。 为了简化对大量任务计数的支持,列表可以跟随带有星号和重复计数的掩码。 例如“mask_mem:0*4,1*4”。 为了获得可预测的绑定结果,作业中每个节点的所有 CPU 应分配给作业。

不将任务绑定到内存(默认)

优先
优先使用第一个指定的 NUMA 节点,但允许
 使用 其他 可用 NUMA 节点。

安静
在任务运行之前安静地绑定(默认)

排名
按任务排名进行绑定(不推荐)

排序
对空闲缓存页面进行排序(在 Intel KNL 节点上运行 zonesort)

详细
在任务运行之前详细报告绑定

--mem-per-cpu=<size>[units]
每个可用分配 CPU 所需的最小内存。 默认单位为兆字节。 可以使用后缀 [K|M|G|T] 指定不同的单位。 默认值为 DefMemPerCPU,最大值为 MaxMemPerCPU(见下文的例外)。如果配置了这两个参数,可以使用 scontrol show config 命令查看。 请注意,如果作业的 --mem-per-cpu 值超过配置的 MaxMemPerCPU,则用户的限制将被视为每个任务的内存限制;--mem-per-cpu 将减少到不大于 MaxMemPerCPU 的值;--cpus-per-task 将被设置,并且 --cpus-per-task 的值乘以新的 --mem-per-cpu 值将等于用户指定的原始 --mem-per-cpu 值。 此参数通常在分配给作业的单个处理器时使用(SelectType=select/cons_tres)。 如果按核心、插槽或整个节点分配资源,则分配给作业的 CPU 数量可能高于任务计数,--mem-per-cpu 的值应相应调整。 另请参见 --mem--mem-per-gpu--mem--mem-per-cpu--mem-per-gpu 选项是互斥的。

注意:如果作业请求的最终内存量无法由分区中配置的任何节点满足,则作业将被拒绝。 这可能发生在为作业分配使用了 --mem-per-cpu--exclusive 选项,并且 --mem-per-cpu 乘以节点上的 CPU 数量大于该节点的总内存时。

注意:这适用于作业分配中的 可用 分配 CPU。 当配置了每个核心多个线程时,这一点很重要。 如果作业请求 --threads-per-core 的线程数少于核心上存在的线程数(或 --hint=nomultithread,这意味着 --threads-per-core=1),则作业将无法使用核心上的额外线程,并且这些线程将不包括在每个 CPU 的内存计算中。但是,如果作业可以访问核心上的所有线程,则即使作业未明确请求这些线程,这些线程也将包括在每个 CPU 的内存计算中。

在以下示例中,每个核心有两个线程。

在第一个示例中,由于未使用 --threads-per-core,因此两个任务可以在同一核心的不同超线程上运行。第三个任务使用第二个核心的两个线程。每个 CPU 分配的内存包括所有线程:

$ salloc -n3 --mem-per-cpu=100
salloc: Granted job allocation 17199
$ sacct -j $SLURM_JOB_ID -X -o jobid%7,reqtres%35,alloctres%35
  JobID                             ReqTRES                           AllocTRES
------- ----------------------------------- -----------------------------------
  17199     billing=3,cpu=3,mem=300M,node=1     billing=4,cpu=4,mem=400M,node=1

在第二个示例中,由于 --threads-per-core=1,每个任务分配了整个核心,但只能使用每个核心的一个线程。分配的 CPU 包括每个核心上的所有线程。然而,每个 CPU 分配的内存仅包括每个核心中的可用线程。

$ salloc -n3 --mem-per-cpu=100 --threads-per-core=1
salloc: Granted job allocation 17200
$ sacct -j $SLURM_JOB_ID -X -o jobid%7,reqtres%35,alloctres%35
  JobID                             ReqTRES                           AllocTRES
------- ----------------------------------- -----------------------------------
  17200     billing=3,cpu=3,mem=300M,node=1     billing=6,cpu=6,mem=300M,node=1

--mem-per-gpu=<size>[units]
每个分配 GPU 所需的最小内存。 默认单位为兆字节。 可以使用后缀 [K|M|G|T] 指定不同的单位。 默认值为 DefMemPerGPU,并在全局和每个分区基础上可用。 如果配置了这两个参数,可以使用 scontrol show configscontrol show partition 命令查看。 另请参见 --mem--mem--mem-per-cpu--mem-per-gpu 选项是互斥的。

--mincpus=<n>
指定每个节点的最小逻辑 CPU/处理器数量。

--network=<type>
指定与交换机或网络相关的信息。 type 的解释取决于系统。 当在 Cray 上原生运行 Slurm 时支持此选项。它用于请求使用网络性能计数器。 每个请求仅有效一个值。 所有选项不区分大小写。 在此配置中,支持的值包括:
系统
使用系统范围的网络性能计数器。仅请求的节点将被标记为作业分配中使用。如果作业未填满整个系统,其余节点将无法被其他使用 NPC 的作业使用,如果空闲,其状态将显示为 PerfCnts。这些节点仍然可供其他不使用 NPC 的作业使用。

刀片
使用刀片网络性能计数器。仅请求的节点将被标记为作业分配中使用。如果作业未填满分配给作业的整个刀片,则这些刀片将无法被其他使用 NPC 的作业使用,如果空闲,其状态将显示为 PerfCnts。这些节点仍然可供其他不使用 NPC 的作业使用。

在所有情况下,作业分配请求 必须指定 --exclusive 选项。否则请求将被拒绝。

此外,使用这些选项的步骤不允许共享刀片,因此如果在刀片上运行的步骤未占用刀片上的所有节点,则资源将保持空闲。

network 选项在具有 HPE Slingshot 网络的系统上也可用。它可用于请求作业 VNI(用于作业中作业步骤之间的通信)。它还可用于覆盖为作业步骤分配的默认网络资源。可以在逗号分隔的列表中指定多个值。

tcs=<class1>[:<class2>]...
要为应用程序配置的流量类别集。 支持的流量类别包括 DEDICATED_ACCESS、LOW_LATENCY、BULK_DATA 和 BEST_EFFORT。流量类别也可以指定为 TC_DEDICATED_ACCESS、TC_LOW_LATENCY、TC_BULK_DATA 和 TC_BEST_EFFORT。

no_vni
不为此作业分配任何 VNI(即使是多节点)。

job_vni
为此作业分配一个作业 VNI。

single_node_vni
为此作业分配一个作业 VNI,即使它是单节点作业。

adjust_limits
如果设置,slurmd 将通过获取每个 NIC 的最大资源数量并减去保留或使用的值(较高者)来设置网络资源保留的上限; 这是默认设置。

no_adjust_limits
如果设置,slurmd 将仅根据每个资源的配置默认值和应用程序中的任务数量计算网络资源预留;它不会基于已经存在的系统网络服务的资源使用情况对这些预留请求设置上限。设置此项将意味着更多的应用程序启动可能会因网络资源耗尽而失败,但如果应用程序绝对需要一定数量的资源才能正常运行,此选项将确保这一点。

disable_rdzv_get
禁用 Slingshot NIC 中的会合获取,这可以提高某些应用程序的性能。

def_<rsrc>=<val>
为此资源分配每个 CPU 的保留分配。

res_<rsrc>=<val>
为此资源分配每个节点的保留分配。如果设置,将覆盖每个 CPU 的分配。

max_<rsrc>=<val>
此资源的每个节点的最大限制。

depth=<depth>
每个 CPU 资源分配的乘数。默认值是节点上保留的 CPU 数量。

可以请求的资源包括:

txqs
发送命令队列。默认是每个 CPU 2,最大每个节点 1024。

tgqs
目标命令队列。默认是每个 CPU 1,最大每个节点 512。

eqs
事件队列。默认是每个 CPU 2,最大每个节点 2047。

cts
计数器。默认是每个 CPU 1,最大每个节点 2047。

tles
触发器列表条目。默认是每个 CPU 1,最大每个节点 2048。

ptes
可移植表条目。默认是每个 CPU 6,最大每个节点 2048。

les
列表条目。默认是每个 CPU 16,最大每个节点 16384。

acs
寻址上下文。默认是每个 CPU 2,最大每个节点 1022。

--nice[=adjustment]
以调整后的调度优先级在 Slurm 中运行作业。如果没有调整值,调度优先级将降低 100。负的 nice 值会提高优先级,否则会降低。调整范围为 +/- 2147483645。只有特权用户可以指定负的调整值。

--no-bell
静音 salloc 的终端铃声。另请参见选项 --bell

-k, --no-kill[=off]
如果分配的节点之一失败,则不自动终止作业。用户将承担节点失败时的容错责任。作业分配不会被撤销,因此用户可以在其分配的剩余节点上启动新的作业步骤。此选项不会设置 SLURM_NO_KILL 环境变量。因此,当节点失败时,运行在该节点上的步骤将被终止,除非明确设置了 SLURM_NO_KILL 环境变量或作业分配中的 srun 调用明确请求了 --no-kill。

指定可选参数 "off" 以禁用 SALLOC_NO_KILL 环境变量的效果。

默认情况下,如果其分配的任何节点失败,Slurm 将终止整个作业分配。

--no-shell
在分配资源后立即退出,而不运行命令。然而,只要作业仍然处于活动状态,Slurm 作业仍将被创建并保持活动状态,并拥有分配的资源。您将拥有一个没有关联进程或任务的 Slurm 作业 ID。如果您指定 --jobid= 选项并提供此 Slurm 作业的作业 ID,则可以对该资源分配提交 srun 命令。或者,这可以用于暂时保留一组资源,以便其他作业在一段时间内无法使用它们。(请注意,Slurm 作业受作业的正常约束,包括时间限制,因此最终作业将终止,资源将被释放,或者您可以使用 scancel 命令手动终止作业。)

-F, --nodefile=<node_file>
--nodelist 类似,但列表包含在名为 node file 的文件中。列表中的节点名称也可以跨多行。文件中的重复节点名称将被忽略。列表中节点名称的顺序并不重要;节点名称将由 Slurm 排序。

-w, --nodelist=<node_name_list>
请求特定的主机列表。作业将包含 所有 这些主机,并可能根据需要添加其他主机以满足资源要求。列表可以指定为逗号分隔的主机列表、主机范围(例如 host[1-5,7,...])或文件名。如果您指定的最小节点或处理器数量大于提供的主机列表可以满足的数量,则将根据需要在其他节点上分配额外资源。列表中的重复节点名称将被忽略。列表中节点名称的顺序并不重要;节点名称将由 Slurm 排序。

-N, --nodes=<minnodes>[-maxnodes]|<size_string>
请求为此作业分配至少 minnodes 个节点。还可以使用 maxnodes 指定最大节点数。如果只指定一个数字,则将其用作最小和最大节点数。节点数也可以指定为 size_string。size_string 规范确定应使用哪些节点值。可以使用逗号分隔的列表或带有冒号和数字值的步长函数指定多个值,并用 "-" 分隔。例如,"--nodes=1-15:4" 等同于 "--nodes=1,5,9,13"。分区的节点限制优先于作业的限制。如果作业的节点限制超出其关联分区允许的范围,作业将保持在 PENDING 状态。这允许在稍后执行,当分区限制发生变化时。如果作业节点限制超过分区中配置的节点数,作业将被拒绝。请注意,环境变量 SLURM_JOB_NUM_NODES 将被设置为实际分配给作业的节点数。有关更多信息,请参见 环境变量 部分。如果未指定 -N,默认行为是分配足够的节点以满足通过每个作业规范选项(例如 -n-c--gpus)表示的请求资源。作业将在指定范围内分配尽可能多的节点,而不会延迟作业的启动。节点计数规范可以包括一个数字值,后面跟着一个后缀 "k"(将数字值乘以 1,024)或 "m"(将数字值乘以 1,048,576)。

注意:此选项不能与任意分配一起使用。

-n, --ntasks=<number>
salloc 不启动任务,它请求资源分配并执行某个命令。此选项告知 Slurm 控制器,在此分配内运行的作业步骤将启动最多 number 个任务,并分配足够的资源来完成此操作。默认是每个节点一个任务,但请注意 --cpus-per-task 选项将更改此默认值。

--ntasks-per-core=<ntasks>
请求在每个核心上调用最大 ntasks。旨在与 --ntasks 选项一起使用。与 --ntasks-per-node 相关,但在核心级别而不是节点级别。此选项将由 srun 继承。Slurm 可能会分配比请求的更多 CPU 以遵循此选项。
注意:在使用 SelectType=select/linear 时不支持此选项。此值不能大于 --threads-per-core

--ntasks-per-gpu=<ntasks>
请求每个 GPU 启动 ntasks 个任务。此选项可以以两种方式工作:1)另外指定 --ntasks,在这种情况下,将自动确定无类型的 GPU 规范以满足 --ntasks-per-gpu,或 2)指定所需的 GPU(例如通过 --gpus--gres)而不指定 --ntasks,总任务数将自动确定。如有必要,将自动增加所需的 CPU 数量以允许任何计算出的任务数。此选项将隐式设置 --tres-bind=gres/gpu:single:<ntasks>,但可以通过显式的 --tres-bind=gres/gpu 规范覆盖。此选项与节点范围不兼容(即 -N<minnodes-maxnodes>)。此选项与 --gpus-per-task--gpus-per-socket--ntasks-per-node 不兼容。除非配置了 SelectType=cons_tres(在 Cray 系统上直接或间接),否则不支持此选项。

--ntasks-per-node=<ntasks>
请求在每个节点上调用 ntasks。如果与 --ntasks 选项一起使用,则 --ntasks 选项将优先,--ntasks-per-node 将被视为每个节点的 最大 任务数。旨在与 --nodes 选项一起使用。这与 --cpus-per-task=ncpus 相关,但不需要知道每个节点上的实际 CPU 数量。在某些情况下,能够请求每个节点不超过特定数量的任务是更方便的。此类示例包括提交混合 MPI/OpenMP 应用程序,其中每个节点只应分配一个 MPI "任务/排名",同时允许 OpenMP 部分利用节点中存在的所有并行性,或将单个设置/清理/监控作业提交给预先存在的分配的每个节点,作为更大作业脚本中的一步。

--ntasks-per-socket=<ntasks>
请求在每个插槽上调用最大 ntasks。旨在与 --ntasks 选项一起使用。与 --ntasks-per-node 相关,但在插槽级别而不是节点级别。注意:在使用 SelectType=select/linear 时不支持此选项。

--oom-kill-step[={0|1}]
如果在步骤的任何任务中检测到 OOM 事件,是否终止整个步骤。这将覆盖 slurm.conf 中 TaskPluginParam 的 "OOMKillStep" 设置。未设置时将使用 slurm.conf 中的设置。设置时,值为 "0" 将禁用终止整个步骤,而值为 "1" 将启用它。这适用于整个分配,外部步骤除外。默认值为 "1"(启用),当找到此选项且没有值时。

-O, --overcommit
过度分配资源。

当应用于作业分配时(不包括请求独占访问节点的作业),资源的分配就像只请求每个节点一个任务一样。这意味着为每个任务请求的 CPU 数量(-c--cpus-per-task)是按节点分配的,而不是乘以任务数。用于指定每个节点、插槽、核心等的任务数量的选项将被忽略。

当应用于作业步骤分配(在现有作业分配中执行 srun 命令)时,此选项可用于在每个 CPU 上启动多个任务。通常,srun 不会在每个 CPU 上分配超过一个进程。通过指定 --overcommit,您明确允许每个 CPU 超过一个进程。但是,每个节点允许执行的任务数不得超过 MAX_TASKS_PER_NODE注意MAX_TASKS_PER_NODEslurm.h 文件中定义,并不是变量,它在 Slurm 构建时设置。

-s, --oversubscribe
作业分配可以与其他正在运行的作业过度订阅资源。要过度订阅的资源可以是节点、插槽、核心和/或超线程,具体取决于配置。默认的过度订阅行为取决于系统配置,分区的 OverSubscribe 选项优先于作业的选项。此选项可能导致分配比未设置 --oversubscribe 选项时更早获得批准,并允许更高的系统利用率,但由于资源竞争,应用程序性能可能会受到影响。另请参见 --exclusive 选项。

注意:此选项与 --exclusive 互斥。

-p, --partition=<partition_names>
请求特定的资源分配分区。如果未指定,默认行为是允许 slurm 控制器选择系统管理员指定的默认分区。如果作业可以使用多个分区,请以逗号分隔的列表指定它们的名称,并将提供最早启动的分区用于作业,而不考虑分区名称的顺序(尽管将优先考虑更高优先级的分区)。当作业启动时,所使用的分区的名称将首先放入作业记录分区字符串中。

--prefer=<list>
节点可以由 Slurm 管理员分配 特性。用户可以使用 prefer 选项指定其作业所需但不是必需的 特性。此选项独立于 --constraint 操作,并将在可能的情况下覆盖在那里设置的内容。在调度时,首先尝试 --prefer 中的特性。如果没有可用的节点集具有这些特性,则尝试 --constraint。有关更多信息,请参见 --constraint,此选项的行为相同。

--priority=<value>
请求特定的作业优先级。可能受特定配置约束的影响。value 应为数字值或 "TOP"(表示最高可能值)。只有 Slurm 操作员和管理员可以设置作业的优先级。

--profile={all|none|<type>[,<type>...]}
启用 acct_gather_profile 插件的详细数据收集。详细数据通常是时间序列,存储在作业的 HDF5 文件或根据配置的插件存储在 InfluxDB 数据库中。
All
收集所有数据类型。(不能与其他值组合。)

None
未收集任何数据类型。这是默认值。
 (不能 与 其他 值 组合。)

有效的 type 值包括:

Energy
收集能量数据。

Task
收集任务(I/O、内存等)数据。

Lustre
收集 Lustre 数据。

Network
收集网络(InfiniBand)数据。

-q, --qos=<qos>
请求作业的服务质量,或逗号分隔的 QOS 列表。如果请求列表,将根据给定 QOS 的优先级进行排序,第一个为最高优先级。QOS 值可以在 Slurm 数据库中为每个用户/集群/帐户关联定义。当 Slurm 配置参数 AccountingStorageEnforce 包含 "qos" 时,用户将受到其关联定义的 qos 集的限制。

-Q, --quiet
抑制来自 salloc 的信息性消息。错误仍将显示。

--reboot
在启动作业之前强制分配的节点重启。此操作仅在某些系统配置中受支持,否则将被静默忽略。只有 root、SlurmUser 或管理员可以重启节点。

--reservation=<reservation_names>
从命名保留中为作业分配资源。如果作业可以使用多个保留,请以逗号分隔的列表指定它们的名称,并使用提供最早启动的保留。每个保留将按请求的顺序考虑。所有保留将在作业生命周期内通过 scontrol/squeue 列出。在会计中,将看到第一个保留,并在作业开始后,所使用的保留将替换它。

--resv-ports[=count]
为此作业保留通信端口。用户可以指定要保留的端口数量。必须在 slurm.conf 中指定参数 MpiParams=ports=12000-12999。如果保留的端口数量为零,则不保留任何端口。仅用于原生 Cray 的 PMI。此选项只能在启用 slurmstepd 步骤管理时使用。此选项适用于作业分配。请参见 --stepmgr

--segment=<segment_size>
当使用块拓扑时,此选项定义将用于创建作业分配的段的大小。没有要求所有段都必须放置在同一更高层块内。

注意:请求的节点数必须始终能够被请求的段大小整除。

注意:段大小必须小于或等于规划的基础块大小。例如,对于基础块大小为 30 个节点的系统,"--segment 40" 将无效。

--signal=[R:]<sig_num>[@sig_time]
当作业距离结束时间还有 sig_time 秒时,发送信号 sig_num。由于 Slurm 事件处理的分辨率,信号可能会在指定的时间之前最多发送 60 秒。sig_num 可以是信号编号或名称(例如 "10" 或 "USR1")。sig_time 必须是 0 到 65535 之间的整数值。默认情况下,在作业结束时间之前不会发送信号。如果指定了 sig_num 而没有任何 sig_time,默认时间将为 60 秒。使用 "R:" 选项允许此作业与设置了 MaxStartDelay 的保留重叠。如果使用了 "R:" 选项,则必须在系统上启用抢占,如果作业被抢占,它将在允许的情况下重新排队,否则作业将被取消。有关在抢占时发送信号的信息,请参见 send_user_signal PreemptParameter

--sockets-per-node=<sockets>
将节点选择限制为至少具有指定数量插槽的节点。有关启用任务/亲和性插件时的其他信息,请参见上述 -B 选项。
注意:此选项可能隐式设置任务数量(如果未指定 -n),每个请求的线程一个任务。

--spread-job
尽可能将作业分配分散到多个节点,并尝试在分配的节点之间均匀分配任务。此选项禁用拓扑/树插件。

--stepmgr
如果未在系统范围内启用 slurmstepd 步骤管理,则为每个作业启用它。这使得作业步骤可以由与作业关联的单个外部 slurmstepd 管理。这对在其分配内提交多个步骤的作业非常有利。必须设置 PrologFlags=contain

--switches=<count>[@max-time]
当使用树拓扑时,此选项定义作业分配所需的最大叶交换机数量,并可选地定义等待该数量交换机的最长时间。如果 Slurm 找到的分配包含的交换机数量超过指定的数量,则作业将保持待处理状态,直到找到具有所需交换机数量的分配或时间限制到期。如果没有交换机数量限制,则启动作业时没有延迟。可接受的时间格式包括 "分钟"、"分钟:秒"、"小时:分钟:秒"、"天-小时"、"天-小时:分钟" 和 "天-小时:分钟:秒"。作业的最大时间延迟可能会受到系统管理员的限制,使用 SchedulerParameters 配置参数中的 max_switch_wait 参数选项。在龙虾网络上,唯一支持的交换机数量为 1,因为当作业在一个叶交换机上分配资源时,通信性能将最高,或者在两个以上的叶交换机上分配资源。默认的最大时间是 max_switch_wait SchedulerParameters。

--thread-spec=<num>
为系统操作保留的每个节点的专用线程计数,而不用于应用程序。应用程序将不会使用这些线程,但将为其分配收费。此选项不能与 --core-spec 选项一起使用。

注意:显式设置作业的专用线程值隐式设置其 --exclusive 选项,为作业保留整个节点。

--threads-per-core=<threads>
将节点选择限制为每个核心至少具有指定数量的线程。在任务布局中,使用每个核心的最大线程数。注意:"线程" 指的是每个核心上的处理单元数量,而不是每个核心要启动的应用程序任务数量。有关启用任务/亲和性插件时的其他信息,请参见上述 -B 选项。
注意:此选项可能隐式设置任务数量(如果未指定 -n),每个请求的线程一个任务。

-t, --time=<time>
设置作业分配的总运行时间限制。如果请求的时间限制超过分区的时间限制,则作业将保持在 PENDING 状态(可能无限期)。默认时间限制是分区的默认时间限制。当时间限制到达时,每个作业步骤中的每个任务将发送 SIGTERM,然后是 SIGKILL。信号之间的间隔由 Slurm 配置参数 KillWait 指定。OverTimeLimit 配置参数可能允许作业运行超过计划时间。时间分辨率为一分钟,秒值向上舍入到下一个分钟。

时间限制为零请求不施加时间限制。可接受的时间格式包括 "分钟"、"分钟:秒"、"小时:分钟:秒"、"天-小时"、"天-小时:分钟" 和 "天-小时:分钟:秒"。

--time-min=<time>
设置作业分配的最小时间限制。如果指定,作业的 --time 限制可以降低到不低于 --time-min 的值,如果这样做可以使作业比其他情况下更早开始执行。作业的时间限制在作业分配资源后不会更改。这是通过回填调度算法来执行的,以分配原本保留给优先级更高的作业的资源。可接受的时间格式包括 "分钟"、"分钟:秒"、"小时:分钟:秒"、"天-小时"、"天-小时:分钟" 和 "天-小时:分钟:秒"。

--tmp=<size>[units]
指定每个节点的临时磁盘空间的最小量。默认单位为兆字节。可以使用后缀 [K|M|G|T] 指定不同的单位。

--tres-bind=<tres>:[verbose,]<type>[+<tres>:
[verbose,]<type>...] 指定带有任务绑定选项的 tres 列表。目前,gres 是此选项唯一支持的 tres。将 gres 指定为 "gres/<gres_name>"(例如 gres/gpu)

示例: --tres-bind=gres/gpu:verbose,map:0,1,2,3+gres/nic:closest

默认情况下,大多数 tres 不会绑定到单个任务

支持的 type 选项绑定 gres

closest
将每个任务绑定到最近的 gres(s)。在 NUMA 环境中,每个任务可以绑定到多个 gres(即该 NUMA 环境中的所有 gres)。

map:<list>
通过在任务(或排名)上设置 gres 掩码进行绑定,如所指定的,其中 <list> 是 <gres_id_for_task_0>,<gres_id_for_task_1>,... gres ID 被解释为十进制值。如果任务(或排名)的数量超过此列表中的元素数量,则列表中的元素将根据需要从列表的开头重新使用。为了简化对大任务计数的支持,列表可以跟随一个带有星号和重复计数的映射。例如 "map:0*4,1*4"。如果使用任务/cgroup 插件并在 cgroup.conf 中设置了 ConstrainDevices,则 gres ID 是相对于分配给作业的 gres 的零基索引(例如,第一个 gres 是 0,即使全局 ID 为 3)。否则,gres ID 是全局 ID,作业中的每个节点上的所有 gres 应该被分配以获得可预测的绑定结果。

mask:<list>
通过在任务(或排名)上设置 gres 掩码进行绑定,如所指定的,其中 <list> 是 <gres_mask_for_task_0>,<gres_mask_for_task_1>,... 映射是为节点指定的,并且在每个节点上的任务应用相同的映射(即每个节点上的最低任务 ID 映射到列表中指定的第一个掩码,依此类推)。gres 掩码始终被解释为十六进制值,但可以加上可选的 '0x' 前缀。为了简化对大任务计数的支持,列表可以跟随一个带有星号和重复计数的映射。例如 "mask:0x0f*4,0xf0*4"。如果使用任务/cgroup 插件并在 cgroup.conf 中设置了 ConstrainDevices,则 gres ID 是相对于分配给作业的 gres 的零基索引(例如,第一个 gres 是 0,即使全局 ID 为 3)。否则,gres ID 是全局 ID,作业中的每个节点上的所有 gres 应该被分配以获得可预测的绑定结果。

none
不将任务绑定到此 gres(关闭 --tres-per-task 和 --gpus-per-task 的隐式绑定)。

per_task:<gres_per_task>
每个任务将绑定到指定数量的 gres,<gres_per_task>。任务优先分配与其分配中的核心相关的 gres,如 closest,尽管它们会在不可用时获取任何 gres。如果没有亲和性,第一个任务将分配节点上的前 x 个 gres 等等。共享的 gres 将优先绑定每个任务一个共享设备(如果可能)。

single:<tasks_per_gres>
closest 相似,但每个任务只能绑定到单个 gres,即使它可以绑定到多个同样接近的 gres。要绑定的 gres 由 <tasks_per_gres> 确定,其中前 <tasks_per_gres> 个任务绑定到第一个可用的 gres,第二个 <tasks_per_gres> 个任务绑定到第二个可用的 gres,依此类推。这基本上是将任务块分配到可用的 gres 上,其中可用的 gres 由任务的插槽亲和性和 gres 的插槽亲和性(在 gres.conf 的 Cores 参数中指定)决定。

注意:共享 gres 绑定目前仅限于 per_task 或 none。

--tres-per-task=<list>
指定作业在每个任务中所需的可跟踪资源的以逗号分隔的列表。列表中每个条目的格式为 "trestype[/tresname]=count"。trestype 是请求的可跟踪资源的类型(例如 cpu、gres、license 等)。tresname 是可跟踪资源的名称,如通过 sacctmgr show tres 可以看到。对于 gres、license 等类型的 tres,存在时这是必需的(例如 gpu、gpu:a100)。为了使用此选项请求许可证,必须在 slurm.conf 的 AccountingStorageTRES 参数中定义许可证。count 是这些资源的数量。
计数可以带有后缀
"k" 或 "K"(1024 的倍数),
"m" 或 "M"(1024 x 1024 的倍数),
"g" 或 "G"(1024 x 1024 x 1024 的倍数),
"t" 或 "T"(1024 x 1024 x 1024 x 1024 的倍数),
"p" 或 "P"(1024 x 1024 x 1024 x 1024 x 1024 的倍数)。
示例:
--tres-per-task=cpu=4
--tres-per-task=cpu=8,license/ansys=1
--tres-per-task=gres/gpu=1
--tres-per-task=gres/gpu:a100=2
指定的资源将在每个节点上分配给作业。可跟踪资源的可用性由系统管理员配置。
注意:此选项与 gres/gpu 或 gres/shard 将隐式设置 --tres-bind=gres/[gpu|shard]:per_task:<tres_per_task>,或者如果指定了多个 gpu 类型 --tres-bind=gres/gpu:per_task:<gpus_per_task_type_sum>。可以通过显式的 --tres-bind 规范覆盖此设置。
注意:无效的 TRES 用于 --tres-per-task 包括 bb、billing、energy、fs、mem、node、pages、vmem。

--usage
显示简要帮助信息并退出。

--use-min-nodes
如果给定节点计数范围,则优先选择较小的计数。

-v, --verbose
增加 salloc 信息消息的详细程度。多个 -v 将进一步增加 salloc 的详细程度。默认情况下,仅显示错误。

-V, --version
显示版本信息并退出。

--wait-all-nodes=<value>
控制命令执行何时开始与节点准备好使用(即启动)之间的关系。默认情况下,salloc 命令将在分配完成后立即返回。可以使用 slurm.conf 文件中的 salloc_wait_nodes 选项更改此默认值。
0
在可以进行分配时立即开始执行。不要等待所有节点准备好使用(即启动)。

1
在所有节点准备好使用之前不要开始执行。

--wckey=<wckey>
指定与作业一起使用的 wckey。如果 slurm.conf 中的 TrackWCKey=no(默认),则忽略此值。

--x11[={all|first|last}]
在分配的 "所有"、"第一个" 或 "最后一个" 节点上设置 X11 转发。仅在 Slurm 编译时启用 X11 支持并在 slurm.conf 中定义 PrologFlags=x11 时启用。默认值为 "所有"。

 

性能

执行 salloc 会向 slurmctld 发送远程过程调用。如果来自 salloc 或其他向 slurmctld 守护进程发送远程过程调用的 Slurm 客户端命令的调用足够多,可能会导致 slurmctld 守护进程的性能下降,可能导致拒绝服务。

请勿在 shell 脚本或其他程序的循环中运行 salloc 或其他向 slurmctld 发送远程过程调用的 Slurm 客户端命令。确保程序将对 salloc 的调用限制在收集所需信息的最低限度。

 

输入环境变量

在启动时,salloc 将读取并处理在以下环境变量中设置的选项。这些变量中的大多数以与上述定义的选项相同的方式设置。对于定义为不期望参数的标志选项,可以通过设置环境变量而不指定值(空或 NULL 字符串)、字符串 'yes' 或非零数字来启用该选项。环境变量的任何其他值将导致该选项未设置。以下是这些规则的几个例外。
注意:命令行选项始终覆盖环境变量设置。

SALLOC_ACCOUNT
-A, --account 相同

SALLOC_ACCTG_FREQ
--acctg-freq 相同

SALLOC_BELL
--bell 相同

SALLOC_BURST_BUFFER
--bb 相同

SALLOC_CLUSTERSSLURM_CLUSTERS
--clusters 相同

SALLOC_CONSTRAINT
-C, --constraint 相同

SALLOC_CONTAINER
与 --container 相同。

SALLOC_CONTAINER_ID
与 --container-id 相同。

SALLOC_CORE_SPEC
--core-spec 相同

SALLOC_CPUS_PER_GPU
--cpus-per-gpu 相同

SALLOC_DEBUG
-v, --verbose 相同,当设置为 1 时,设置为 2 时给出 -vv,等等。

SALLOC_DELAY_BOOT
--delay-boot 相同

SALLOC_EXCLUSIVE
--exclusive 相同

SALLOC_GPU_BIND
--gpu-bind 相同

SALLOC_GPU_FREQ
--gpu-freq 相同

SALLOC_GPUS
-G, --gpus 相同

SALLOC_GPUS_PER_NODE
--gpus-per-node 相同

SALLOC_GPUS_PER_TASK
--gpus-per-task 相同

SALLOC_GRES
--gres 相同

SALLOC_GRES_FLAGS
--gres-flags 相同

SALLOC_HINTSLURM_HINT
--hint 相同

SALLOC_IMMEDIATE
-I, --immediate 相同

SALLOC_KILL_CMD
-K, --kill-command 相同

SALLOC_MEM_BIND
--mem-bind 相同

SALLOC_MEM_PER_CPU
--mem-per-cpu 相同

SALLOC_MEM_PER_GPU
--mem-per-gpu 相同

SALLOC_MEM_PER_NODE
--mem 相同

SALLOC_NETWORK
--network 相同

SALLOC_NO_BELL
--no-bell 相同

SALLOC_NO_KILL
-k, --no-kill 相同

SALLOC_OVERCOMMIT
-O, --overcommit 相同

SALLOC_PARTITION
-p, --partition 相同

SALLOC_POWER
--power 相同

SALLOC_PROFILE
--profile 相同

SALLOC_QOS
--qos 相同

SALLOC_REQ_SWITCH
当使用树形拓扑时,这定义了作业分配所需的最大交换机数量,以及可选的等待该数量交换机的最大时间。请参见 --switches

SALLOC_RESERVATION
--reservation 相同

SALLOC_SEGMENT_SIZE
--segment 相同

SALLOC_SIGNAL
--signal 相同

SALLOC_SPREAD_JOB
--spread-job 相同

SALLOC_THREAD_SPEC
--thread-spec 相同

SALLOC_THREADS_PER_CORE
--threads-per-core 相同

SALLOC_TIMELIMIT
-t, --time 相同

SALLOC_TRES_BIND
--tres-bind 相同

SALLOC_TRES_PER_TASK
--tres-per-task 相同

SALLOC_USE_MIN_NODES
--use-min-nodes 相同

SALLOC_WAIT_ALL_NODES
--wait-all-nodes 相同。必须设置为 0 或 1 以禁用或启用该选项。

SALLOC_WAIT4SWITCH
等待请求的交换机的最大时间。请参见 --switches

SALLOC_WCKEY
--wckey 相同

SLURM_CONF
Slurm 配置文件的位置。

SLURM_DEBUG_FLAGS
指定 salloc 使用的调试标志。请参见 slurm.conf(5) 手册页以获取完整的标志列表。环境变量优先于 slurm.conf 中的设置。

SLURM_EXIT_ERROR
指定发生 Slurm 错误时生成的退出代码(例如,选项无效)。这可以被脚本用来区分应用程序退出代码和各种 Slurm 错误条件。另请参见 SLURM_EXIT_IMMEDIATE

SLURM_EXIT_IMMEDIATE
指定使用 --immediate 选项且当前没有可用资源时生成的退出代码。可以被脚本用来区分应用程序退出代码和各种 Slurm 错误条件。另请参见 SLURM_EXIT_ERROR

 

输出环境变量

salloc 将在执行程序的环境中设置以下环境变量:

SLURM_*_HET_GROUP_#
对于异构作业分配,环境变量为每个组件单独设置。

SLURM_CLUSTER_NAME
作业执行所在集群的名称。

SLURM_CONTAINER
作业的 OCI 包。仅在指定 --container 时设置。

SLURM_CONTAINER_ID
作业的 OCI ID。仅在指定 --container-id 时设置。

SLURM_CPUS_PER_GPU
每个分配的 GPU 请求的 CPU 数量。仅在指定 --cpus-per-gpu 选项时设置。

SLURM_CPUS_PER_TASK
每个任务请求的 CPU 数量。仅在指定 --cpus-per-task 选项或 --tres-per-task=cpu=# 选项时设置。

SLURM_DIST_PLANESIZE
平面分布大小。仅在平面分布中设置。请参见 -m, --distribution

SLURM_DISTRIBUTION
仅在指定 -m, --distribution 选项时设置。

SLURM_GPU_BIND
请求将任务绑定到 GPU。仅在指定 --gpu-bind 选项时设置。

SLURM_GPU_FREQ
请求的 GPU 频率。仅在指定 --gpu-freq 选项时设置。

SLURM_GPUS
请求的 GPU 数量。仅在指定 -G, --gpus 选项时设置。

SLURM_GPUS_PER_NODE
每个分配节点请求的 GPU 数量。仅在指定 --gpus-per-node 选项时设置。

SLURM_GPUS_PER_SOCKET
每个分配插槽请求的 GPU 数量。仅在指定 --gpus-per-socket 选项时设置。

SLURM_HET_SIZE
设置为异构作业中的组件数量。

SLURM_JOB_ACCOUNT
与作业分配相关联的账户名称。

SLURM_JOB_CPUS_PER_NODE
在分配的节点上可用于作业的 CPU 数量,使用格式 CPU_count[(xnumber_of_nodes)][,CPU_count[(xnumber_of_nodes)] ...]。例如:SLURM_JOB_CPUS_PER_NODE='72(x2),36' 表示在第一个和第二个节点(如 SLURM_JOB_NODELIST 所列)上分配有 72 个 CPU,而第三个节点上有 36 个 CPU。注意select/linear 插件将整个节点分配给作业,因此该值表示分配节点上的 CPU 总数。select/cons_tres 插件将单个 CPU 分配给作业,因此该数字表示分配给作业的 CPU 数量。

SLURM_JOB_END_TIME
作业预计结束时间的 UNIX 时间戳。

SLURM_JOB_GPUS
分配给此作业的 GPU 的全局 GPU ID。GPU ID 与任何设备 cgroup 无关,即使设备受到任务/cgroup 的约束。仅在批处理和交互式作业中设置。

SLURM_JOB_ID
作业分配的 ID。

SLURM_JOB_LICENSES
请求的任何许可证的名称和数量。

SLURM_JOB_NODELIST
分配给作业的节点列表。

SLURM_JOB_NUM_NODES
作业分配中的节点总数。

SLURM_JOB_PARTITION
作业运行的分区名称。

SLURM_JOB_QOS
作业分配的服务质量(QOS)。

SLURM_JOB_RESERVATION
包含作业分配的高级预留(如果有)。

SLURM_JOB_START_TIME
作业开始时间的 UNIX 时间戳。

SLURM_JOBID
作业分配的 ID。请参见 SLURM_JOB_ID。为了向后兼容而包含。

SLURM_MEM_BIND
设置为 --mem-bind 选项的值。

SLURM_MEM_BIND_LIST
设置为用于内存绑定的位掩码。

SLURM_MEM_BIND_PREFER
如果 --mem-bind 选项包含 prefer 选项,则设置为“prefer”。

SLURM_MEM_BIND_SORT
对空闲缓存页面进行排序(在 Intel KNL 节点上运行 zonesort)

SLURM_MEM_BIND_TYPE
设置为使用 --mem-bind 选项指定的内存绑定类型。可能的值为“none”、“rank”、“map_map”、“mask_mem”和“local”。

SLURM_MEM_BIND_VERBOSE
如果 --mem-bind 选项包含 verbose 选项,则设置为“verbose”。否则设置为“quiet”。

SLURM_MEM_PER_CPU
--mem-per-cpu 相同

SLURM_MEM_PER_GPU
每个分配的 GPU 请求的内存。仅在指定 --mem-per-gpu 选项时设置。

SLURM_MEM_PER_NODE
--mem 相同

SLURM_NNODES
作业分配中的节点总数。请参见 SLURM_JOB_NUM_NODES。为了向后兼容而包含。

SLURM_NODELIST
分配给作业的节点列表。请参见 SLURM_JOB_NODELIST。为了向后兼容而包含。

SLURM_NPROCS
SLURM_NTASKS 相同。为了向后兼容而包含。

SLURM_NTASKS
如果指定了 --ntasks 选项,则设置为该值。或者,如果指定了任何 --ntasks-per-* 选项,则设置为作业中的任务数量。

注意:这也是 srun 的输入变量,因此如果设置,它将在从 salloc shell 调用 srun 时有效地设置 --ntasks 选项。

SLURM_NTASKS_PER_CORE
如果指定了 --ntasks-per-core 选项,则设置为该值。

SLURM_NTASKS_PER_GPU
如果指定了 --ntasks-per-gpu 选项,则设置为该值。

SLURM_NTASKS_PER_NODE
如果指定了 --ntasks-per-node 选项,则设置为该值。

SLURM_NTASKS_PER_SOCKET
如果指定了 --ntasks-per-socket 选项,则设置为该值。

SLURM_OOMKILLSTEP
--oom-kill-step 相同

SLURM_OVERCOMMIT
如果指定了 --overcommit,则设置为 1

SLURM_PROFILE
--profile 相同

SLURM_SHARDS_ON_NODE
此节点上可用于步骤的 GPU 分片数量。

SLURM_SUBMIT_DIR
从中调用 salloc 的目录,或者(如适用)由 -D, --chdir 选项指定的目录。

SLURM_SUBMIT_HOST
从中调用 salloc 的计算机的主机名。

SLURM_TASKS_PER_NODE
每个节点上要启动的任务数量。值用逗号分隔,顺序与 SLURM_JOB_NODELIST 中相同。如果两个或更多连续节点的任务数量相同,则该数量后跟“(x#)”,其中“#”是重复计数。例如,“SLURM_TASKS_PER_NODE=2(x3),1”表示前 3 个节点将各自执行两个任务,而第四个节点将执行一个任务。

SLURM_THREADS_PER_CORE
仅在指定了 --threads-per-coreSALLOC_THREADS_PER_CORE 时设置。该值将设置为 --threads-per-coreSALLOC_THREADS_PER_CORE 指定的值。此值在作业分配内的后续 srun 调用中使用。

SLURM_TRES_PER_TASK
设置为 --tres-per-task 的值。如果指定了 --cpus-per-task--gpus-per-task,它也会在 SLURM_TRES_PER_TASK 中设置,就好像它是在 --tres-per-task 中指定的。

 

信号

当 salloc 等待 PENDING 作业分配时,大多数信号将导致 salloc 撤销分配请求并退出。

但是,如果分配已被授予并且 salloc 已经启动了指定的命令,则 salloc 将忽略大多数信号。salloc 不会退出或释放分配,直到命令退出。一个显著的例外是 SIGHUP。SIGHUP 信号将导致 salloc 释放分配并退出,而不等待命令完成。另一个例外是 SIGTERM,它将被转发到生成的进程。

 

示例

获取分配,并打开一个新的 xterm,在其中可以交互式输入 srun 命令:

$ salloc -N16 xterm
salloc: 授予作业分配 65537
# (此时 xterm 出现,salloc 等待 xterm 退出)
salloc: 放弃作业分配 65537

在一行命令中获取节点的分配并启动并行应用程序:

$ salloc -N5 srun -n10 myprogram

创建一个具有 3 个组件的异构作业,每个组件分配一组唯一的节点:
$ salloc -w node[2-3] : -w node4 : -w node[5-7] bash
salloc: 作业 32294 排队并等待资源
salloc: 作业 32294 已分配资源
salloc: 授予作业分配 32294

 

版权

版权所有 (C) 2006-2007 加州大学理事会。 在劳伦斯利弗莫尔国家实验室制作(参见免责声明)。
版权所有 (C) 2008-2010 劳伦斯利弗莫尔国家安全。
版权所有 (C) 2010-2022 SchedMD LLC。

该文件是 Slurm 的一部分,一个资源管理程序。 有关详细信息,请参见 <https://slurm.schedmd.com/>。

Slurm 是自由软件;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;许可证的第 2 版,或(根据您的选择)任何后续版本。

Slurm 的分发是希望它能有用,但不提供任何担保;甚至没有对适销性或特定用途的隐含担保。有关更多详细信息,请参见 GNU 通用公共许可证。

 

另见

sinfo(1), sattach(1), sbatch(1), squeue(1), scancel(1), scontrol(1), slurm.conf(5), sched_setaffinity (2), numa (3)


 

索引

名称
概要
描述
返回值
命令路径解析
选项
性能
输入环境变量
输出环境变量
信号
示例
版权
另见

该文档由 man2html 使用手册页创建。
时间:2025年7月2日 13:21:56 GMT