slurm.conf
Section: Slurm 配置文件 (5)更新: Slurm 配置文件
索引
名称
slurm.conf - Slurm 配置文件描述
slurm.conf 是一个 ASCII 文件,描述了 Slurm 的一般配置信息、要管理的节点、节点如何分组到分区的信息,以及与这些分区相关的各种调度参数。该文件在集群中的所有节点上应保持一致。文件位置可以通过设置 SLURM_CONF 环境变量在执行时进行修改。Slurm 守护进程还允许您使用命令行上的 "-f" 选项覆盖内置和环境提供的位置。
文件内容不区分大小写,节点和分区的名称除外。配置文件中以 "#" 开头的任何文本都被视为注释,直到该行结束。 对配置文件的更改在 Slurm 守护进程重启、守护进程接收到 SIGHUP 信号或执行命令 "scontrol reconfigure" 时生效,除非另有说明。 对 TCP 监听设置的更改将需要重启守护进程。
如果一行以单词 "Include" 开头,后跟空格和文件名,则该文件将与当前配置文件内联包含。对于大型或复杂的系统,多个配置文件可能更容易管理,并允许重用某些文件(有关更多详细信息,请参见 INCLUDE MODIFIERS)。
关于文件权限的说明:
slurm.conf 文件必须对所有 Slurm 用户可读,因为它被许多 Slurm 命令使用。在 slurm.conf 文件中定义的其他文件,例如日志文件和作业会计文件,可能需要由用户 "SlurmUser" 创建/拥有,以便成功访问。使用 "chown" 和 "chmod" 命令适当地设置所有权和权限。 有关 Slurm 使用的各种文件和目录的信息,请参见 文件和目录权限 部分。
参数
可用的总体配置参数包括:
- AccountingStorageBackupHost
- 备份机器的名称,承载会计存储数据库。 如果与 accounting_storage/slurmdbd 插件一起使用,则备份 slurmdbd 将在此运行。 仅在使用 SlurmDBD 的系统中使用,其他情况下被忽略。
-
- AccountingStorageEnforce
- 此参数控制对作业提交施加的关联级别的强制执行。有效选项是以下任意以逗号分隔的组合,其中许多将隐式包含其他选项:
-
-
- all
- 隐含所有其他可用选项,除了 nojobs 和 nosteps。
-
- associations
- 不允许运行新的作业,除非系统中存在相应的关联。
-
- limits
- 用户可以根据关联被限制为定义的任何作业大小或运行时间限制。隐含 associations。
-
- nojobs
- Slurm 将不对系统上的任何作业或步骤进行计费。 隐含 nosteps。
-
- nosteps
- Slurm 将不对任何已运行的步骤进行计费。
-
- qos
- 作业将不会被调度,除非指定了有效的 qos。 隐含 associations。
-
- safe
- 只有在作业能够完成时,才会针对具有设置 TRES-分钟限制的关联或 qos 启动作业。如果未设置此选项,只要其使用未达到 TRES-分钟限制,作业将被启动。这可能导致作业被启动但在达到限制时被终止。设置此选项后,即使在作业启动后限制发生变化,导致关联或 qos 违反更新后的限制,作业也不会因限制而被终止。隐含 limits 和 associations。
-
- wckeys
- 作业将不会被调度,除非指定了有效的工作负载特征键。隐含 associations 和 TrackWCKey(一个单独的配置选项)。
-
这允许与外部 slurmdbd 注册的集群使用 --cluster/-M 客户端命令选项相互通信。
如果外部 slurmdbd 中不存在该集群,则该集群将添加到外部 slurmdbd。如果外部 slurmdbd 中已经存在非外部集群,则 slurmctld 将忽略注册到外部 slurmdbd。
如果跟踪多种不同类型的 GRES(例如不同类型的 GPU),则具有匹配类型规范的作业请求将被记录。 给定配置为 "AccountingStorageTRES=gres/gpu,gres/gpu:tesla,gres/gpu:volta",那么 "gres/gpu:tesla" 和 "gres/gpu:volta" 将仅跟踪明确请求这两种 GPU 类型的作业,而 "gres/gpu" 将跟踪任何类型的分配 GPU("tesla"、"volta" 或任何其他 GPU 类型)。
给定配置为 "AccountingStorageTRES=gres/gpu:tesla,gres/gpu:volta",那么 "gres/gpu:tesla" 和 "gres/gpu:volta" 将跟踪明确请求这些 GPU 类型的作业。 如果作业请求 GPU,但未明确指定 GPU 类型,则其资源分配将被计入 "gres/gpu:tesla" 或 "gres/gpu:volta",尽管计费可能与分配给作业的实际 GPU 类型不匹配,并且分配给作业的 GPU 可能是异构的。 在包含各种 GPU 类型的环境中,可能希望使用 job_submit 插件,以强制作业明确指定某种 GPU 类型。
注意: 设置 gres/gpu 还将设置 gres/gpumem 和 gres/gpuutil。当未设置 gres/gpu 时,可以单独设置 gres/gpumem 和 gres/gpuutil。
当前选项包括:
目前可配置的值包括:
-
- acct_gather_energy/gpu
- 从 GPU 管理库(例如 rsmi)收集能耗数据,针对相应类型的 GPU。目前仅对 rsmi 可用。 注意:设置此项后,slurmd 将在配置后保持 gpu 插件加载。
-
- acct_gather_energy/ipmi
- 使用智能平台管理接口(IPMI)从基板管理控制器(BMC)收集能耗数据。
-
- acct_gather_energy/pm_counters
- 从 HPE Cray 系统的基板管理控制器(BMC)收集能耗数据。
-
- acct_gather_energy/rapl
- 使用运行平均功率限制(RAPL)机制从硬件传感器收集能耗数据。请注意,启用 RAPL 可能需要执行命令 "sudo modprobe msr"。
-
- acct_gather_energy/xcc
- 使用 IPMI OEM 原始命令从 Lenovo SD650 XClarity 控制器(XCC)收集能耗数据。
目前可配置的值包括:
-
- acct_gather_interconnect/ofed
- 通过 OFED 库从 Infiniband 设备的硬件监控计数器收集 Infiniband 网络流量数据。 为了对每个作业的网络流量进行计费,请将 "ic/ofed" TRES 添加到 AccountingStorageTRES。
-
- acct_gather_interconnect/sysfs
- 网络流量统计信息是从 Linux sysfs 伪文件系统中为 acct_gather.conf(5) 中定义的特定接口收集的。 为了对每个作业的网络流量进行计费,请将 "ic/sysfs" TRES 添加到 AccountingStorageTRES。
目前可配置的值包括:
目前可配置的值包括:
注意: 如果未使用 AuthAltParameters 指定 jwt_hs256.key 的路径,则 slurmctld 将默认查找该路径在 StateSaveLocation 中。 jwt_hs256.key 应仅对 SlurmUser 和 root 可见。建议不要将 jwt_hs256.key 放置在运行 slurmctld 和 slurmdbd 的机器以外的任何节点上。 auth/jwt 可以通过存在 SLURM_JWT 环境变量来激活。当激活时,它将覆盖默认的 AuthType。
-
- disable_token_creation
- 禁用非 SlurmUser 账户使用 "scontrol token"。
- max_token_lifespan=<seconds>
- 设置为用户账户生成的任何令牌的最大寿命(以秒为单位)。限制适用于除 SlurmUser 之外的所有用户。希望有每用户限制的站点应使用与 JWT 兼容的工具和/或身份验证代理生成令牌,而不是使用 scontrol token。
-
- jwks=
- JWKS 文件的绝对路径。密钥应由 SlurmUser 或 root 拥有,必须对 SlurmUser 可读,建议权限为 0400。不得对“其他”可写。 仅支持 RS256 密钥,尽管文件中可能列出其他密钥类型。如果设置,则默认情况下不会加载 HS256 密钥(并禁用令牌生成),尽管可以使用 jwt_key 设置显式重新启用 HS256 密钥使用(和令牌生成)。
-
- jwt_key=
- JWT 密钥文件的绝对路径。密钥必须是 HS256。密钥应由 SlurmUser 或 root 拥有,必须对 SlurmUser 可读,建议权限为 0400。不得对“其他”可访问。 如果未设置,默认密钥文件为 StateSaveLocation 中的 jwt_hs256.key。
-
- userclaimfield=
- 为 Slurm 用户名 sun 字段使用替代声明字段。此选项旨在与在 Slurm 之外生成的令牌兼容。(此字段也可能称为授权。) 默认:(禁用)
-
- cred_expire
- 默认作业步骤凭证生命周期,单位为秒(例如 "cred_expire=1200")。 必须足够长,以加载用户环境、运行前置程序、处理 slurmd 被分页出内存等。 这还控制重新排队的作业必须等待多长时间才能再次启动。 默认值为 120 秒。
-
- socket
- 要使用的 MUNGE 守护进程套接字的路径名(例如 "socket=/var/run/munge/munge.socket.2")。 默认值为 "/var/run/munge/munge.socket.2"。 由 auth/munge 和 cred/munge 使用。
-
- ttl
- 凭证生命周期,单位为秒(例如 "ttl=300")。 默认值取决于使用的 AuthType。 对于 auth/munge,默认值取决于 MUNGE 安装,但通常为 300 秒。对于 auth/slurm,默认值为 60 秒。对于 auth/jwt,默认值为 1800 秒。
-
- use_client_ids
- 允许 auth/slurm 插件在不依赖于 LDAP 或操作系统的用户信息的情况下对用户进行身份验证。
-
- auth/munge
- 表示将使用 MUNGE(默认)。 (有关更多信息,请参见 "https://dun.github.io/munge/")。
-
- auth/slurm
- 使用 Slurm 的内部身份验证插件。
注意: 对作业成功启动的测试仅在计算节点上的 Slurm 守护进程向头节点上的 slurmctld 守护进程注册状态时执行,这种情况发生得相对较少。 因此,如果作业的启动时间超过 BatchStartTimeout,作业不一定会被终止。 此配置参数也适用于启动任务,避免因长时间运行的 Prolog 脚本而中止 srun 命令。
-
- DestDir=
- 要广播到分配的计算节点的文件的目标目录。 默认值为当前工作目录,或如果设置则为 srun 的 --chdir。
-
- Compression=
- 指定要使用的默认文件压缩库。 支持的值为 "lz4" 和 "none"。 sbcast --compress 选项的默认值为 "lz4",否则为 "none"。 某些压缩库可能在某些系统上不可用。
-
- send_libs
- 如果设置,尝试自动检测并广播可执行文件的共享对象依赖项到分配的计算节点。文件被放置在与可执行文件并排的目录中。仅对于 srun,LD_LIBRARY_PATH 会自动更新以包含此缓存目录。 这可以通过 sbcast 或 srun --send-libs 选项进行覆盖。默认情况下,此选项被禁用。
-
- certificate_renewal_period=
- slurmd/sackd 将在指定的时间间隔(以分钟为单位)请求 slurmctld 签发新的签名证书。
默认值为 1440 分钟(每天一次)。
-
- generate_csr_script=
- 用于生成证书签名请求的脚本路径。节点名称作为参数传递给脚本。脚本必须仅将证书签名请求 PEM 文件打印到标准输出,并在成功时返回 0。出错时必须返回非零值。
与 certmgr/script 一起使用。仅由请求证书的守护进程运行。
-
- get_node_cert_key_script=
- 用于获取生成 CSR 的节点私钥的脚本路径,该私钥由 generate_csr_script 返回。节点名称作为参数传递给脚本。脚本必须将节点的私钥(PEM 文件)打印到标准输出。成功时必须返回 0,出错时返回非零值。
与 certmgr/script 一起使用。仅由请求证书的守护进程运行。
-
- get_node_token_script=
- 用于获取节点唯一令牌的脚本路径,该令牌将由 slurmctld 使用 validate_node_script= 设置的脚本进行验证。节点名称作为参数传递给脚本。脚本必须将节点的唯一令牌打印到标准输出,并在成功时返回 0。出错时必须返回非零值。
与 certmgr/script 一起使用。仅由请求证书的守护进程运行。
-
- sign_csr_script=
- 用于签署传入证书签名请求的脚本路径。仅在 validate_node_script= 已经在附带的唯一节点令牌上被调用并返回非零退出代码时才会调用此脚本。证书签名请求(由 generate_csr_script= 提供)作为参数传递给此脚本。脚本必须将新的签名证书打印到标准输出,并在成功时返回 0。出错时必须返回非零值。
与 certmgr/script 一起使用。仅由 slurmctld 运行。
-
- single_use_tokens
- 动态设置的唯一节点令牌(例如,通过 scontrol 设置)将在成功签署证书后被消耗。
-
- validate_node_script=
- 用于验证唯一节点令牌的脚本路径。唯一节点令牌作为参数传递给此脚本。如果脚本发现节点令牌有效,则返回 0。否则,如果节点令牌无效,则返回非零值。
与 certmgr/script 一起使用。仅由 slurmctld 运行。
-
- cli_filter/lua
- 此插件允许您使用 lua 编写自己的 cli_filter 实现。
-
- cli_filter/syslog
- 此插件启用对执行的作业提交活动的日志记录。所有 salloc/sbatch/srun 选项都以 JSON 格式记录到 syslog 中。如果插件不是列表中的最后一个,则可能记录与实际发送到 slurmctld 的值不同的值。
-
- cli_filter/user_defaults
- 此插件查找文件 $HOME/.slurm/defaults 并将其每一行读取为 key=value 对,其中 key 是可用于 salloc/sbatch/srun 的任何作业提交选项,而 value 是用户定义的默认值。例如:
time=1:30 mem=2048
上述将导致每个作业的用户定义默认值为 "-t 1:30" 和 "--mem=2048"。
-
- block_null_hash
- 要求所有 Slurm 身份验证令牌包含更新的(20.11.9 和 21.08.8)有效负载,以提供额外的安全层,防止凭证重放攻击。此选项应仅在所有 Slurm 守护进程已升级到 20.11.9/21.08.8 或更高版本,并且所有在升级之前启动的作业已完成后启用。
-
- host_unreach_retry_count=#
- 当节点尝试 connect() 连接到另一个节点时,如果主机不可达,connect() 可能返回 EHOSTUNREACH 错误。如果设置了此参数,则这是 Slurm 将重试建立该连接的次数。Slurm 在每次尝试之间将等待 500 毫秒。此参数的默认值为零(如果返回 EHOSTUNREACH,Slurm 将不重试)。
-
- DisableIPv4
- 禁用所有 slurm 守护进程(除了 slurmdbd)的 IPv4 仅操作。此设置也应在您的 slurmdbd.conf 文件中设置。
-
- EnableIPv6
- 启用所有 slurm 守护进程(除了 slurmdbd)使用 IPv6 地址。当同时使用 IPv4 和 IPv6 时,地址族的优先级将基于您的 /etc/gai.conf 文件。此设置也应在您的 slurmdbd.conf 文件中设置。
-
- getnameinfo_cache_timeout
- 当 munge 用作 AuthType 时,slurmctld 使用 getnameinfo 从存储在 munge 凭证中的 IP 地址获取主机名。此参数控制 slurmctld 应保持 IP 到主机名解析的秒数。当设置为 0 时,缓存被禁用。默认值为 60。
-
- keepaliveinterval=#
- 指定空闲连接上保持活动探测之间的间隔(以秒为单位)。这影响 srun 与其 slurmstepd 进程之间的连接以及所有与 slurmdbd 的连接。默认使用系统默认设置。
-
- keepaliveprobes=#
- 指定在考虑连接断开之前发送的未确认保持活动探测的数量。这影响 srun 与其 slurmstepd 进程之间的连接以及所有与 slurmdbd 的连接。默认使用系统默认设置。
-
- keepalivetime=#
- 指定在连接标记为需要保持活动探测之前的时间(以秒为单位),以及延迟关闭连接以处理仍在队列中的消息的时间。这影响 srun 与其 slurmstepd 进程之间的连接以及所有与 slurmdbd 的连接。更长的值可以提高在网络故障情况下通信的可靠性。默认情况下保持活动被禁用。
-
- NoCtldInAddrAny
- 用于直接绑定到运行 slurmctld 的节点解析的地址,而不是将消息绑定到节点上的任何地址,这是默认行为。
-
- NoInAddrAny
- 用于直接绑定到节点解析的地址,而不是将消息绑定到节点上的任何地址,这是默认行为。此选项适用于所有守护进程/客户端,除了 slurmctld。
注意:设置 reduce_completing_frag 会影响 CompleteWait 的行为。
默认值:最新的 data_parser 插件版本,未选择任何标志。
注意:您还可以通过在进程(客户端命令、守护进程等)启动时定义 SLURM_DEBUG_FLAGS 环境变量来设置调试标志。环境变量优先于 slurm.conf 中的设置。
可用的有效子系统包括:
-
- Accrue
- 累积计数器计费详细信息
-
- Agent
- RPC 代理(来自 Slurm 守护进程的出站 RPC)
-
- AuditRPCs
- 对于所有传入的 RPC 到 slurmctld,在处理连接之前打印源地址、经过身份验证的用户和 RPC 类型。
-
- AuditTLS
- 打印正在使用的 TLS 证书
-
- Backfill
- 回填调度程序详细信息
-
- BackfillMap
- 回填调度程序记录非常详细的保留资源映射。与 Backfill 结合使用,以获得回填调度程序工作的详细和完整视图。
-
- BurstBuffer
- 突发缓冲区插件
-
- Cgroup
- Cgroup 详细信息
-
- ConMgr
- 连接管理器详细信息
-
- CPU_Bind
- 作业和步骤的 CPU 绑定详细信息
-
- CpuFrequency
- 使用 --cpu-freq 选项的作业和步骤的 CPU 频率详细信息。
-
- Data
- 通用数据结构详细信息。
-
- DBD_Agent
- RPC 代理(发送到 DBD 的出站 RPC)
-
- Dependency
- 作业依赖性调试信息
-
- Elasticsearch
- Elasticsearch 调试信息(已弃用)。JobComp 的别名。
-
- Energy
- AcctGatherEnergy 调试信息
- Federation
- 联邦调度调试信息
-
- Gres
- 通用资源详细信息
-
- Hetjob
- 异构作业详细信息
-
- Gang
- 帮派调度详细信息
-
- GLOB_SILENCE
- 不显示配置文件中 glob "*" 符号的错误消息。
-
- JobAccountGather
- 通用作业账户收集详细信息(非插件特定)。
-
- JobComp
- 作业完成插件详细信息
-
- JobContainer
- 作业容器插件详细信息
-
- License
- 许可证管理详细信息
-
- Network
- 网络详细信息。警告:激活此标志可能会导致记录密码、令牌或其他身份验证凭证。
-
- NetworkRaw
- 转储关键网络通信的原始十六进制值。警告:此标志将导致非常详细的日志记录,并可能导致记录密码、令牌或其他身份验证凭证。
-
- NodeFeatures
- 节点特性插件调试信息
-
- NO_CONF_HASH
- 当 slurm.conf 文件在 Slurm 守护进程之间不同时时,不记录。
-
- Power
- 电源管理插件和电源节省(挂起/恢复程序)详细信息
-
- Priority
- 作业优先级
-
- Profile
- AcctGatherProfile 插件详细信息
-
- Protocol
- 通信协议详细信息
-
- Reservation
- 高级预留
-
- Route
- 消息转发调试信息
-
- Script
- 有关 Slurm 调用的任何脚本的调试信息。这包括 slurmctld 执行的脚本,例如 PrologSlurmctld 和 EpilogSlurmctld。
-
- SelectType
- 资源选择插件
-
- Steps
- Slurmctld 作业步骤的资源分配
-
- Switch
- 交换机插件
-
- TLS
- TLS 插件
-
- TraceJobs
- 在 slurmctld 中跟踪作业。它将打印详细的作业信息,包括状态、作业 ID 和分配的节点计数。
-
- Triggers
- Slurmctld 触发器
注意:这适用于作业分配中的 可用 分配 CPU。当配置为每个核心多个线程时,这一点很重要。如果作业请求 --threads-per-core 的线程数少于核心上的线程数(或 --hint=nomultithread,这意味着 --threads-per-core=1),则作业将无法使用核心上的额外线程,并且这些线程将不包含在每个 CPU 的内存计算中。但是,如果作业可以访问核心上的所有线程,则即使作业没有明确请求这些线程,这些线程也将包含在每个 CPU 的内存计算中。
在以下示例中,每个核心有两个线程。
在第一个示例中,由于未使用 --threads-per-core,两个任务可以在同一核心的不同超线程上运行。第三个任务使用第二个核心的两个线程。每个 CPU 分配的内存包括所有线程:
$ salloc -n3 --mem-per-cpu=100 salloc: 授予作业分配 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: 授予作业分配 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
-
- disable_remote_singleton
- 默认情况下,当联邦作业具有单例依赖关系时,联邦中的每个集群必须清除单例依赖关系,才能认为作业的单例依赖关系已满足。启用此选项意味着仅源集群必须清除单例依赖关系。此选项必须在联邦中的每个集群中设置。
-
- kill_invalid_depend
- 如果作业具有无效依赖关系且永远无法运行,则终止它并将其状态设置为 JOB_CANCELLED。默认情况下,作业保持待处理状态,原因是 DependencyNeverSatisfied。
-
- max_depend_depth=#
- 测试循环作业依赖关系的最大作业数量。在测试此数量的作业依赖关系后停止测试。默认值为 10 个作业。
注意:可以通过在多行中包含此选项来配置多个 epilog 脚本。
注意:可以通过在多行中包含此选项来配置多个 epilog 脚本。
如果 Epilog 或 slurm_spank_job_epilog 超时,则节点将被排空。在所有情况下,错误都会被记录。
支持的 value 定义:
注意: 确保 HashPlugin 在 slurm.conf 和 slurmdbd.conf 中具有相同的值。
目前可配置的值包括:
-
- jobacct_gather/cgroup(推荐)
- 通过调用配置的 CgroupPlugin(请参见 "man cgroup.conf")读取任务的 cgroup 目录接口(例如 memory.stat、cpu.stat)来收集 CPU 和内存统计信息。 此机制忽略 JobAcctGatherParams=UsePSS 或 NoShared,因为这些仅在从 proc 文件系统读取内存使用情况时使用。
-
- jobacct_gather/linux
- 通过读取 procfs 收集 CPU 和内存统计信息。该插件将获取任务的所有 PID,并为每个 PID 读取 /proc/<pid>/stats。如果设置了 UsePSS,它还将读取 /proc/<pid>/smaps,如果设置了 NoShare,它还将读取 /proc/<pid>/statm(有关更多信息,请参见 JobAcctGatherParams)。
此插件在具有大量生成进程的作业上会带来性能损失,因为它需要遍历所有任务 PID 并将统计信息聚合到单个指标中,然后这些值需要聚合到任务统计信息中。
注意: 在集群中运行作业时更改插件类型是可能的。已经运行的步骤将继续使用先前的插件机制,而新步骤将使用新机制。
-
- 影响会计和分析:
- 仅影响分析:
用户可以在提交作业时使用 --acctg-freq 选项独立覆盖每个间隔。
在使用 acct_gather_energy/ipmi 或 xcc 插件时,此值应小于或等于 EnergyIPMIFreq,否则将不必要地在连续轮询中获取重复值。
-
- NoShared
- 从 RSS 中排除共享内存。此选项不能与 UsePSS 一起使用。 仅与 jobacct_gather/linux 插件兼容。
-
- UsePss
- 使用 PSS 值而不是 RSS 来计算实际内存使用。PSS 值将作为 RSS 保存。此选项不能与 NoShared 一起使用。仅与 jobacct_gather/linux 插件兼容。
-
- OverMemoryKill
- 每次 JobAcctGather 插件收集会计信息时,终止被检测到使用超过步骤请求内存的进程。
此参数应谨慎使用,因为超出其内存分配的作业可能会影响其他进程和/或机器健康。
注意: 如果可用,建议通过在 cgroup.conf 中启用 task/cgroup 作为 TaskPlugin,并使用 ConstrainRAMSpace=yes 来限制内存,而不是使用此 JobAcctGather 机制进行内存强制。使用 JobAcctGather 是基于轮询的,并且在作业被终止之前会有延迟,这可能导致系统内存不足事件。
注意: 使用 OverMemoryKill 时,如果步骤中所有进程使用的内存总和超过内存限制,则整个步骤将被 JobAcctGather 插件终止/取消。 这与使用 ConstrainRAMSpace 时的行为不同,在这种情况下步骤中的进程将被终止,但步骤将保持活动状态,可能还有其他进程继续运行。
-
- DisableGPUAcct
- 不进行 GPU 使用的会计,并跳过任何 GPU 驱动程序库调用。此参数可以帮助提高性能,如果 GPU 驱动程序响应缓慢。
-
- 如果 jobcomp/elasticsearch:
-
指示此插件将完成的作业记录信息发送到此选项中配置的 Elasticsearch 服务器 URL 端点(包括端口号和目标索引)。该字符串通常应采用 <host>:<port>/<target>/_doc 的形式。当启用此插件时,JobCompLoc 没有默认值。
注意: 有关更多信息,请参见 <https://slurm.schedmd.com/elasticsearch.html>。
-
- 如果 jobcomp/filetxt:
- 指示此插件将完成的作业记录信息发送到此选项中配置的文件。该字符串应表示文件的绝对路径。此插件的默认值为 /var/log/slurm_jobcomp.log。
-
- 如果 jobcomp/kafka:
-
当配置此插件时,完成(并可选地开始运行)作业记录信息将发送到 Kafka 服务器。该插件使用 librdkafka。该字符串表示包含配置库行为的键=值对的文件的绝对路径。为了使插件正常工作,该文件需要存在,并且至少需要在其中配置 bootstrap.servers librdkafka 属性。当启用此插件时,JobCompLoc 没有默认值。
注意: 有关 librdkafka 属性的完整列表,请参阅库文档。您还可以查看 jobcomp_kafka 页面以获取更多信息:<https://slurm.schedmd.com/jobcomp_kafka.html>
注意: 目标 Kafka 主题和其他插件参数可以通过 JobCompParams 配置。
-
- 如果 jobcomp/lua:
- 此选项在此插件中被忽略。完成的作业记录由硬编码的 jobcomp.lua 脚本处理,期望位于 slurm.conf 的同一位置。当启用此插件时,JobCompLoc 没有默认值。
-
- 如果 jobcomp/mysql:
- 指示此插件将完成的作业记录信息发送到此选项中配置的数据库名称。该字符串应表示数据库名称。此插件的默认值为 slurm_jobcomp_db。
-
- 如果 jobcomp/script:
- 完成的作业记录信息通过环境变量提供,并由此选项配置的脚本处理。该字符串应表示脚本的路径。当启用此插件时,JobCompLoc 没有默认值。需要显式配置,否则插件将无法初始化。
-
-
- enable_job_start
- 指示 jobcomp/kafka 插件在作业首次开始运行时将作业记录字段的子集发送到 topic_job_start Kafka 主题。
注意: 作业完成时的写入(插件的历史目的)默认情况下始终启用,无法禁用。
注意: 作业开始事件的字段子集略小于作业完成时发送的字段。
-
- flush_timeout=<milliseconds>
- 等待所有未完成的生产请求等的最大时间(以毫秒为单位)。这作为超时参数传递给 librdkafka 刷新 API 函数,在插件终止时调用。在销毁生产者实例之前完成此操作,以确保在终止之前完成所有排队和正在进行的生产请求。 对于非阻塞调用,设置为 0。 要无限期等待事件,设置为 -1(不推荐,因为在插件 fini 时调用,可能会阻塞 slurmctld 的正常终止)。 接受的值为 [-1,2147483647]。 默认为 500(毫秒)。
-
- poll_interval=<seconds>
- 调用 librdkafka API 轮询函数之间的秒数,该函数轮询提供的 Kafka 句柄以获取事件。该插件生成一个单独的线程,以在配置的间隔内执行此调用。 接受的值为 [0,4294967295]。 默认为 2(秒)。
-
- requeue_on_msg_timeout
- 指示交付报告回调重新排队因等待成功交付的时间达到 librdkafka 属性 message.timeout.ms 而未能交付的消息。 默认为未设置(不重新排队,因此丢弃这些消息)。
-
- send_script
- 将作业脚本作为作业完成消息的一部分发送。
-
- topic=<
- 作业完成时发送消息的目标 Kafka 主题。 默认为 ClusterName。
-
- topic_job_start=<
- 作业开始运行时发送消息的目标 Kafka 主题。
默认为 <ClusterName>-job-start。
注意: 建议将作业开始运行事件记录发送到与作业完成事件记录配置的主题不同的 Kafka 主题。
-
-
- jobcomp/elasticsearch
- 作业完成后,应将作业记录写入由 JobCompLoc 参数指定的 Elasticsearch 服务器。
注意: 有关更多信息,请访问 Slurm 网站(https://slurm.schedmd.com/elasticsearch.html)。 -
- jobcomp/filetxt
- 作业完成后,应将作业记录写入由 JobCompLoc 参数指定的文本文件。
-
- jobcomp/kafka
- 作业完成后(或可选地作业开始运行),应将作业记录发送到由 JobCompLoc 引用的文件和/或使用其他 JobCompParams。
-
- jobcomp/lua
- 作业完成后,应由位于默认脚本目录(通常是安装目录的子目录 etc)中的 jobcomp.lua 脚本处理作业记录。
-
- jobcomp/mysql
- 作业完成后,应将作业记录写入由 JobCompLoc 参数指定的 MySQL 或 MariaDB 数据库。
-
- jobcomp/script
- 作业完成后,应执行由 JobCompLoc 参数指定的脚本,并提供作业信息的环境变量。
例如,针对多个 job_submit 插件配置: JobSubmitPlugins=lua,require_timelimit请查看 <https://slurm.schedmd.com/job_submit_plugins.html> 以获取更多插件实现细节。默认情况下不使用任何作业提交插件。 当前可用的插件包括:
-
- all_partitions
- 将默认分区设置为集群上的所有分区。
-
- defaults
- 为作业提交设置默认值或修改请求。
-
- logging
- 记录选择的作业提交和修改参数。
-
- lua
- 执行实现站点自定义 job_submit 逻辑的 Lua 脚本。只能执行一个 Lua 脚本。它必须命名为 "job_submit.lua",并且必须位于默认配置目录中(通常是安装目录的子目录 "etc")。可以在 Slurm 分发版的 contribs/lua 目录中找到示例 Lua 脚本。如果配置的 lua 脚本无效,Slurmctld 在启动时将出现致命错误。Slurm 会在每次作业提交时尝试加载该脚本。如果在 slurmctld 运行时脚本损坏或被删除,Slurm 将回退到先前有效的脚本版本。 警告: slurmctld 在持有内部锁的同时运行此脚本,因此此脚本一次只能运行一个副本。这会阻塞 slurmctld 中的大多数并发。因此,此脚本应尽快完成。
-
- partition
- 根据作业提交参数和可用分区设置作业的默认分区。
-
- pbs
- 将 PBS 作业提交选项转换为 Slurm 等效项(如果可能)。
-
- require_timelimit
- 强制作业提交指定时间限制。
注意: 有关用法示例,请参见 Slurm 代码中的 "src/plugins/job_submit" 和 "contribs/lua/job_submit*.lua",然后修改代码以满足您的需求。
-
- node_features/knl_cray
- 仅用于 Cray 系统上的 Intel Knights Landing 处理器(KNL)。 有关更多信息,请参见 https://slurm.schedmd.com/intel_knl.html。
-
- node_features/knl_generic
- 用于通用 Linux 系统上的 Intel Knights Landing 处理器(KNL)。 有关更多信息,请参见 https://slurm.schedmd.com/intel_knl.html。
-
- node_features/helpers
- 用于使用任意脚本或程序报告和修改节点上的特性。 有关更多信息,请参见 helpers.conf 手册页: https://slurm.schedmd.com/helpers.conf.html
-
- batch_step_set_cpu_freq
- 根据给定的 --cpu-freq 或 slurm.conf CpuFreqDef 选项设置批处理步骤的 CPU 频率。默认情况下,只有使用 srun 启动的步骤将利用 CPU 频率设置选项。
注意: 如果您在批处理脚本中使用 srun 启动步骤(建议),此选项将创建一种情况,您可能有多个代理设置 cpu_freq,因为批处理步骤通常在与脚本中一个或多个步骤相同的资源上运行。
-
- cray_net_exclusive
- 允许 Cray XC 集群上的作业独占访问网络资源。 这仅应在提供每个节点对单个作业的独占访问的集群上设置,并且不在作业内使用并行步骤,否则节点上的资源可能会被超额分配。
-
- enable_nss_slurm
- 允许作业的密码和组解析由 slurmstepd 提供,而不是需要从基于网络的服务进行查找。有关更多信息,请参见 https://slurm.schedmd.com/nss_slurm.html。
-
- lustre_no_flush
- 如果在 Cray XC 集群上设置,则在作业步骤完成时不刷新 Lustre 缓存。此设置仅在重新配置后生效,并且仅对新启动的作业生效。
-
- mem_sort
- 在步骤开始时对 NUMA 内存进行排序。用户可以使用 SLURM_MEM_BIND 环境变量或 --mem-bind=nosort 命令行选项覆盖此默认值。
-
- mpir_use_nodeaddr
- 启动任务时,Slurm 在 MPIR_proctable 中创建条目,供并行调试器、分析器和相关工具附加到正在运行的进程。默认情况下,MPIR_proctable 条目包含 MPIR_procdesc 结构,其中 host_name 默认设置为 NodeName。如果指定此选项,则在此上下文中将使用 NodeAddr。
-
- disable_send_gids
- 默认情况下,slurmctld 将查找并发送作业的 user_name 和扩展 gids,而不是在每个节点上独立进行查找,作为每个任务启动的一部分。这有助于减轻在涉及许多节点的作业中启动时的名称服务可扩展性问题。使用此选项将禁用此功能。如果指定了 enable_nss_slurm,则忽略此选项。
-
- slurmstepd_memlock
- 将 slurmstepd 进程的当前内存锁定在 RAM 中。
-
- slurmstepd_memlock_all
- 将 slurmstepd 进程的当前和未来内存锁定在 RAM 中。
-
- test_exec
- 让 srun 验证可执行程序的存在以及在调用 srun 的节点上的用户执行权限,然后再尝试在步骤中的节点上启动它。
-
- use_interactive_step
- 让 salloc 使用交互步骤在分配的计算节点上启动 shell,而不是在调用 salloc 的本地位置。这是通过使用 InteractiveStepOptions 启动 srun 命令作为选项来实现的。
这不会影响将命令作为参数调用的 salloc。这些作业将继续作为调用用户在调用主机上执行。
-
- ulimit_pam_adopt
- 当使用 pam_slurm_adopt 将外部进程加入作业 cgroup 时,设置 RLIMIT_RSS,正如在常规步骤中运行的任务所做的那样。
附加变量与传递给 PrologSlurmctld 和 EpilogSlurmctld 的变量相同,并在以下上下文中具有附加变量:
注意:如果作业指定的每个 CPU 内存限制超过此系统 限制,该作业的每个任务 CPU 数量将尝试自动增加。 这可能导致作业由于 CPU 数量限制而失败。此 自动调整功能是尽力而为的,由于可能存在异构配置和 多分区/qos 作业,无法保证最佳分配。如果这是一个问题,建议使用作业 提交 LUA 插件来强制调整以满足您的特定需求。
PreemptMode 可以按分区指定,以覆盖此 默认值,如果 PreemptType=preempt/partition_prio。或者,如果 PreemptType=preempt/qos,它可以按 QOS 指定。在任何情况下,当启用抢占时,必须为整个集群指定有效的默认 PreemptMode 值。
GANG 选项用于启用群体调度,无论 是否启用抢占(即独立于 PreemptType 设置)。它可以与 PreemptMode 设置一起指定,两个选项用逗号分隔(例如 PreemptMode=SUSPEND,GANG)。
有关更多详细信息,请参见 <preempt> 和 <gang_scheduling>。
注意:
出于性能原因,回填调度程序为作业保留整个节点,
而不是部分节点。如果在回填调度期间,作业抢占一个或多个
其他作业,则这些被抢占作业的整个节点将为
抢占作业保留,即使抢占作业请求的资源少于该值。
在该回填周期内,这些保留的节点在其他作业期间不可用,即使其他作业可以适应这些节点。因此,作业在单个回填迭代中可能会抢占比它们请求的更多资源。
注意:
对于异构作业,所有组件必须符合抢占条件才能被考虑抢占。当要抢占异构作业时,作业中第一个识别的组件将具有最高的 PreemptMode
(SUSPEND(最高)、REQUEUE、CANCEL(最低))将用于设置所有组件的 PreemptMode。每个异构作业组件的 GraceTime 和用户警告信号保持唯一。
异构作业被排除在 GANG 调度操作之外。
-
- OFF
- 是默认值,禁用作业抢占和群体调度。 它仅与全局级别禁用抢占兼容。 此参数的常见用例是在分区上设置它,以禁用 该分区的抢占。
-
- CANCEL
- 被抢占的作业将被取消。
-
- GANG
- 启用同一分区作业的群体调度(时间切片),并
允许恢复挂起的作业。为了使用群体调度,必须在集群级别指定 GANG 选项。
注意: 如果 GANG 调度与 PreemptType=preempt/partition_prio 一起启用,则控制器将忽略 PreemptExemptTime 和以下 PreemptParameters: reorder_count、strict_order 和 youngest_first。
注意: 群体调度在每个分区独立执行,因此 如果您只想通过 OverSubscribe 进行时间切片,而不进行任何抢占, 则不建议配置具有重叠节点的分区。 另一方面,如果您想使用 PreemptType=preempt/partition_prio 允许来自更高 PriorityTier 分区的作业挂起来自较低 PriorityTier 分区的作业,则需要重叠分区,并 PreemptMode=SUSPEND,GANG 使用群体调度程序恢复挂起的作业。您必须将分区的 OverSubscribe 设置配置为 FORCE,以便在要进行时间切片的所有分区中。 在任何情况下,不同分区之间的作业不会发生时间切片。
注意: 异构作业被排除在 GANG 调度操作之外。
注意: 在重叠分区的情况下。如果节点分配的作业允许 共享资源(Oversubscribe=FORCE 或 Oversubscribe=YES 且作业 以 -s/--oversubscribe 提交),则只能由 来自同一分区的作业分配。
-
- REQUEUE
- 通过重新排队作业(如果可能)或取消作业来抢占作业。 要重新排队作业,必须设置 --requeue sbatch 选项 或 slurm.conf 中的全局 JobRequeue 参数必须设置为 1。
-
- SUSPEND
- 被抢占的作业将被挂起,稍后群体调度程序将恢复
它们。因此,SUSPEND 抢占模式始终需要在集群级别指定 GANG
选项。此外,由于挂起的作业仍将在分配的节点上使用内存,Slurm 需要能够跟踪
内存资源以能够挂起作业。
挂起作业时,Slurm 发送 SIGTSTP 信号,等待指定的时间 由 PreemptParameters=suspend_grace_time(默认值为 2 秒),然后 发送 SIGSTOP 信号。恢复作业时发送 SIGCONT 信号。
如果配置了 PreemptType=preempt/qos,并且被抢占的作业和 抢占作业在同一分区,则它们将与 群体调度程序共享资源(时间切片)。如果不是(即如果被抢占者和抢占者 位于不同分区),则被抢占的作业将保持挂起,直到 抢占者结束。注意:由于群体调度在每个 分区独立执行,因此,如果使用 PreemptType=preempt/partition_prio,则较高 PriorityTier 分区中的作业将挂起较低 PriorityTier 分区中的作业,以便在释放资源上运行。只有当抢占作业结束时 挂起的作业才会被群体调度程序恢复。
注意:挂起的作业不会释放 GRES。优先级较高的作业将无法抢占以获得 GRES 的访问权限。 -
- PRIORITY
- 仅在抢占者的作业优先级高于
被抢占者的作业优先级时,允许抢占。
- WITHIN
- 对于 PreemptType=preempt/qos,允许同一 qos 内的作业相互抢占。 虽然可以在这里全局设置,但建议仅在相关的系统 qos 值的子集上直接设置。
-
- min_exempt_priority=#
- 作业全局优先级的阈值。只有优先级低于此值的作业将被标记为可抢占。
-
- reclaim_licenses
- 如果设置,作业可能会被抢占以回收许可证。否则,请求繁忙许可证的作业将不得不等待,即使它们具有抢占优先级。 支持此选项的逻辑仅在 select/cons_tres 插件中可用。使用 OR 的许可证请求的作业不符合抢占 其他作业以回收许可证的资格。
-
- reorder_count=#
- 指定在重新排序可抢占作业时应进行多少次尝试,以 最小化将被抢占的作业总数。 默认值为 1。高值可能会对性能产生不利影响。 可以使用 strict_order 启用这些尝试中的作业顺序更改。 支持此选项的逻辑仅在 select/cons_tres 插件中可用。
-
- send_user_signal
- 在抢占时发送用户信号(例如 --signal=<sig_num>),即使信号时间尚未到达。在优雅时间抢占的情况下,如果指定了用户信号但未发送,则将发送用户信号,否则将向任务发送 SIGTERM。
-
- strict_order
- 在重新排序可抢占作业时,将最近测试的作业放在 列表的前面,因为我们确定它实际上添加了新作业所需的资源。 这确保在进行足够的重新排序尝试时,将抢占的作业数量降到最低。 另请参见 reorder_count。 支持此选项的逻辑仅在 select/cons_tres 插件中可用。
-
- suspend_grace_time
- 指定使用 PreemptMode=SUSPEND 时的抢占宽限时间(以秒为单位)。
当作业被挂起时,将发送 SIGTSTP 信号,然后在等待指定的挂起宽限时间后,将发送 SIGSTOP 信号。
默认值为 2 秒。
注意:此参数仅在配置 PreemptMode=SUSPEND 时使用,或在使用 scontrol suspend 挂起作业时。 有关使用其他抢占模式时设置抢占宽限时间,请参见 GraceTime。 -
- youngest_first
- 如果设置,则抢占排序算法将更改为按作业开始时间排序,以优先抢占较年轻的作业而不是较旧的作业。(需要 preempt/partition_prio 或 preempt/qos 插件。)
-
- preempt/partition_prio
- 作业抢占基于分区 PriorityTier。 在较高 PriorityTier 分区中的作业可以抢占较低 PriorityTier 分区中的作业。 这与 PreemptMode=OFF 不兼容。
-
- preempt/qos
- 作业抢占规则由 Slurm 数据库中的服务质量 (QOS) 规范指定。 在 PreemptMode=SUSPEND 的情况下,抢占作业必须提交 到具有更高 PriorityTier 的分区或同一分区。也支持提交 到同一分区,这会导致抢占者 QOS 群体调度被抢占者 QOS。 此选项与 PreemptMode=OFF 不兼容。 PreemptMode=SUSPEND 的配置仅由 SelectType=select/cons_tres 插件支持。 有关 preempt/qos 的选项配置,请参见 sacctmgr 手册页。
时间为 -1 将禁用该选项,相当于 0。可接受的时间格式 包括 "分钟"、"分钟:秒"、"小时:分钟:秒"、"天-小时"、 "天-小时:分钟" 和 "天-小时:分钟:秒"。
-
- ACCRUE_ALWAYS
- 如果设置,优先级年龄因子将增加,尽管由于 依赖关系、保持或未来开始时间而导致作业不合格。累积限制被 忽略。
-
- CALCULATE_RUNNING
- 如果设置,优先级将不仅为待处理作业重新计算,还将为 运行和挂起的作业重新计算。
-
- DEPTH_OBLIVIOUS
- 如果设置,优先级将根据正常的多因素计算进行计算,但树中关联的深度不会对其优先级产生不利影响。此选项自动启用 NO_FAIR_TREE。
-
- NO_FAIR_TREE
- 禁用 "公平树" 算法,并恢复到 "经典" 公平共享 优先级调度。
-
- INCR_ONLY
- 如果设置,优先级值将仅增加。作业优先级永远不会 降低。
-
- MAX_TRES
- 如果设置,节点上单个 TRES 的加权 TRES 值(例如 TRESBillingWeights)计算为 节点上单个 TRES 的最大值(例如 cpus、mem、gres)加上所有 全局 TRES 的总和(例如许可证)。
-
- MAX_TRES_GRES
- 如果设置,节点上单个 TRES 的加权 TRES 值(例如 TRESBillingWeights)计算为 节点上单个 TRES 的最大值(例如 cpus、mem),加上可计费的 gres,加上所有 全局 TRES 的总和(例如许可证)。
-
- NO_NORMAL_ALL
- 如果设置,则设置所有 NO_NORMAL_* 标志。
-
- NO_NORMAL_ASSOC
- 如果设置,关联因子不按最高关联 优先级进行归一化。
-
- NO_NORMAL_PART
- 如果设置,分区因子不按最高分区 PriorityJobFactor 进行归一化。
-
- NO_NORMAL_QOS
- 如果设置,QOS 因子不按最高 qos 优先级进行归一化。
-
- NO_NORMAL_TRES
- 如果设置,TRES 因子不按作业的分区 TRES 计数进行归一化。
-
- SMALL_RELATIVE_TO_TIME
- 如果设置,作业的大小组件将基于作业大小本身,而不是 作业大小除以其时间限制。
-
在非 FIFO 调度时,作业按以下顺序优先考虑:
1. 可以抢占的作业
2. 具有提前预留的作业
3. 分区优先级
4. 作业优先级
5. 作业提交时间
6. 作业 ID
例如: PriorityWeightTRES=CPU=1000,Mem=2000,GRES/gpu=3000
仅在 PriorityType=priority/multifactor 时适用,并且如果 AccountingStorageTRES 为每个 TRES 类型配置。 允许负值。 默认值为 0。
-
- 账户
- (仅限非 SlurmDBD 记账) 防止用户查看任何账户 定义,除非他们是这些账户的协调员。
-
- 事件
- 防止用户查看事件信息,除非他们具有操作员状态 或更高权限。
-
- 作业
- 防止用户查看属于其他用户的作业或作业步骤。(仅限非 SlurmDBD 记账) 防止用户查看 属于其他用户的作业记录,除非他们是运行作业的关联的协调员。
-
- 节点
- 防止用户查看节点状态信息。
-
- 分区
- 防止用户查看分区状态信息。
-
- 预留
- 防止普通用户查看他们无法使用的预留。
-
- 使用情况
- 防止用户查看任何其他用户的使用情况,这适用于 sshare。 (仅限非 SlurmDBD 记账) 防止用户查看 任何其他用户的使用情况,这适用于 sreport。
-
- 用户
- (仅限非 SlurmDBD 记账) 防止用户查看 除了他们自己以外的任何用户的信息,这也使得用户只能 看到他们处理的关联。 协调员可以看到他们所协调的账户中所有用户的关联,但在列出用户时只能看到自己。
注意:可以通过在多行中包含此选项来配置多个前置脚本。
如果 PrologSlurmctld 超时,作业将被重新排队(如果可能)。 如果前置脚本或 slurm_spank_job_prolog 超时,作业将被重新排队(如果可能),并且节点将被排空。 如果后置脚本或 slurm_spank_job_epilog 超时,节点将被排空。 在所有情况下,错误将被记录。
注意:如果配置了 PrologTimeout,则此值不适用于前置脚本。 同样,如果配置了 EpilogTimout,则此值不适用于后置脚本。
如果 PrologSlurmctld 超时,作业将被重新排队(如果可能)。 如果前置脚本或 slurm_spank_job_prolog 超时,作业将被重新排队(如果可能),并且节点将被排空。在所有情况下,错误将被记录。
-
- 分配
- 如果设置,前置脚本将在作业分配时执行。默认情况下,
前置脚本在任务启动之前执行。因此,当 salloc 启动时,不会执行前置脚本。分配标志对于在用户开始使用任何分配资源之前准备工作非常有用。
特别是在启用集群兼容模式的 Cray 系统上,此标志是必需的。
注意:使用分配标志将增加启动作业所需的时间。
-
- 包含
- 在作业分配时,使用 ProcTrack 插件在所有分配的计算节点上创建作业容器。 此容器可用于未在 Slurm 控制下启动的用户进程,例如 pam_slurm_adopt 可能会将通过直接用户登录启动的进程放入此容器中。如果使用 pam_slurm_adopt,则必须将 ProcTrackType 设置为 proctrack/cgroup。 设置包含标志隐式地设置了分配标志。
-
- 延迟批处理
- 如果设置,slurmctld 将在所有分配节点上的前置脚本完成后,才会发送批处理作业启动请求。仅使用分配标志时, slurmctld 将在作业分配中的第一个节点完成前置脚本后立即启动批处理步骤。
-
- 不保持
- 如果设置,分配标志也应设置。这将允许 salloc 在每个节点上不阻塞,直到前置脚本完成。阻塞将在步骤到达 slurmd 时发生,并且在步骤中尚未发生任何执行。 这是一种更快的工作方式,如果使用 srun 启动任务,您应该使用此标志。此标志不能与包含或 X11 标志结合使用。
-
- 失败时强制重新排队
- 当批处理作业因前置脚本失败而无法启动时,即使作业请求不重新排队,也始终自动重新排队。
注意:设置此标志隐式地设置了分配标志。
-
- 在作业中运行
- 使前置/后置脚本在外部 slurmstepd 中运行。这将使其包含在作业的一个进程中。如果配置了,它将包含在 cgroup 中。 设置在作业中运行标志隐式地设置了包含和分配标志。
-
- 串行
- 默认情况下,前置和后置脚本在每个节点上并行运行。
此标志强制这些脚本在每个节点内串行运行,但会对每个节点的作业吞吐量产生显著影响。
注意:这与在作业中运行不兼容。
-
- X11
- 启用 Slurm 的内置 X11 转发功能。 这与 ProctrackType=proctrack/linuxproc 不兼容。 设置 X11 标志隐式地启用包含和分配标志。
注意:可以通过在多行中包含此选项来配置多个前置脚本。
-
- 保持分区信息
- 如果设置,“scontrol reconfig”命令将保持分区“状态”的内存值 以及可能通过“scontrol update”动态更新的其他参数。slurm.conf 文件中的分区信息将与内存数据合并。此标志优先于 KeepPartState 标志。
-
- 保持分区状态
- 如果设置,“scontrol reconfig”命令将仅保留内存分区的当前“状态”值,并将重置所有可能通过“scontrol update”动态更新的分区的其他参数为 slurm.conf 文件中的值。slurm.conf 文件中的分区信息将与内存数据合并。
-
- 保持节能设置
- 如果设置,“scontrol reconfig”命令将保留 SuspendExcNodes、SuspendExcParts 和 SuspendExcStates 的当前状态。
-
- 上述标志的默认值未设置,“scontrol reconfig”将使用 slurm.conf 文件中的定义重建分区信息。
-
- 允许零许可证
- 如果设置,则请求超过配置许可证的作业提交不会被拒绝。
-
- 关联限制停止
- 如果设置,并且由于关联限制作业无法启动,则不要尝试在该分区中启动任何低优先级作业。设置此项可能会降低系统吞吐量和利用率,但可以通过防止较大作业无限期启动来避免潜在的饥饿。
-
- 批处理调度延迟=#
- 批处理作业调度可以延迟的时间(以秒为单位)。 这在高吞吐量环境中非常有用,在该环境中,批处理作业以非常高的速度提交(即使用 sbatch 命令),并且希望减少在提交时调度每个作业的开销。 默认值为 3 秒。
-
- bb_array_stage_cnt=#
- 应为突发缓冲区资源分配提供的作业数组中的任务数量。较高的值将增加系统开销,因为作业数组中的每个任务将被移动到内存中的自己的作业记录中,因此通常建议使用相对较小的值。 默认值为 10。
-
- bf_allow_magnetic_slot
- 默认情况下,当作业尝试使用磁性预留时,回填调度程序不会在 bf 计划中添加插槽。此选项将其反转,使回填调度程序在作业有资格在磁性预留中运行时在 bf 计划中添加插槽。启用此选项后,磁性预留中的作业将遵循优先级,并且也将计入回填限制,例如 bf_max_job_test。 注意: 回填首先评估预留中的作业,这意味着所有磁性作业将首先被测试。启用此选项时,请确保修订(如有必要,增加)配置的回填限制,以验证回填周期能够测试队列中的预期作业。 注意: 如果与此选项一起使用 bf_one_resv_per_job,则磁性预留插槽将成为 bf 计划中的唯一插槽。否则,插槽将是磁性预留外的第一个插槽。
-
- bf_busy_nodes
- 在选择待处理作业的资源以保留未来执行时(即作业无法立即启动),优先选择正在使用的节点。 这将倾向于将当前空闲的资源留给回填较长运行的作业,但可能导致分配的网络拓扑不够理想。 此选项当前仅由 select/cons_tres 插件支持。
-
- bf_continue
- 回填调度程序定期释放锁,以允许其他操作继续进行,而不是阻止所有活动,可能会延续很长时间。 设置此选项将导致回填调度程序在释放锁后继续处理其原始作业列表中的待处理作业,即使作业或节点状态发生变化。
-
- bf_hetjob_immediate
- 指示回填调度程序尽快启动异构作业,只要确定其所有组件能够这样做。否则,回填调度程序将在处理完队列的其余部分后延迟异构作业的启动尝试。此延迟可能导致低优先级作业被分配资源,从而可能由于达到账户和/或 QOS 限制而延迟异构作业的启动。此选项默认禁用。如果启用且未设置 bf_hetjob_prio=min,则将自动设置。
-
- bf_hetjob_prio=[min|avg|max]
- 在每个回填调度周期开始时,待调度作业的列表根据 PriorityType 中配置的优先级顺序进行排序。此选项指示调度程序更改排序算法,以确保属于同一异构作业的所有组件将尝试连续调度(因此不会在结果列表中碎片化)。更具体地说,来自同一异构作业的所有组件将被视为具有相同优先级(最低、平均或最高,具体取决于此选项的参数),与其他作业(或其他异构作业组件)进行比较。同一异构作业内部的原始顺序将被保留。请注意,此操作是针对 PriorityTier 层和 Priority 值的优先级/多因素插件计算进行的。当启用时,如果任何异构作业请求了高级预留,则该作业的所有组件将被视为请求了高级预留(并在调度中获得优先待遇)。
请注意,此操作不会更新异构作业组件的 Priority 值,仅更新其在列表中的顺序,因此 sprio 命令的输出不会受到影响。
异构作业具有特殊的调度属性:它们仅由回填调度插件调度,每个组件在保留资源时单独考虑(可能具有不同的 PriorityTier 或不同的 Priority 值),并且在所有组件可以启动之前,实际上不会为任何异构作业组件分配资源。 这可能意味着潜在的调度死锁场景,因为来自不同异构作业的组件可以以交错的方式(而不是连续的方式)开始保留资源,但没有作业可以为所有组件保留资源并启动。启用此选项可以帮助缓解此问题。默认情况下,此选项禁用。
-
- bf_interval=#
- 回填迭代之间的秒数。 较高的值会导致更少的开销和更好的响应能力。 此选项仅适用于 SchedulerType=sched/backfill。 默认:30,最小:1,最大:10800(3小时)。 设置为 -1 将禁用回填调度循环。
-
- bf_job_part_count_reserve=#
- 回填调度逻辑将在每个分区中为指定数量的最高优先级作业保留资源。 例如,bf_job_part_count_reserve=10 将导致回填调度程序为每个分区中的十个最高优先级作业保留资源。 任何可以使用当前可用资源启动的低优先级作业,并且不会对这些高优先级作业的预期启动时间产生不利影响,将由回填调度程序启动。 默认值为零,这将为任何待处理作业保留资源并延迟启动低优先级作业。 另请参见 bf_min_age_reserve 和 bf_min_prio_reserve。 默认:0,最小:0,最大:100000。
-
- bf_licenses
- 要求回填调度逻辑跟踪和计划许可证 可用性。默认情况下,任何因许可证可用性被阻塞的作业将不会 保留资源,这可能导致作业饥饿。 此选项隐式启用 bf_running_job_reserve。
-
- bf_max_job_array_resv=#
- 回填调度程序将来将为其保留资源的作业数组中的最大任务数。 由于作业数组可能有数百万个任务,因此为所有任务保留资源的开销可能是不可接受的。 此外,各种限制可能会阻止所有作业在预期时间启动。 这对作业数组中可以立即启动的任务数量没有影响,仅对预计在未来某个时间启动的任务数量有影响。 默认:20,最小:0,最大:1000。 注意: 提交到多个分区的作业在作业队列中每个分区出现一次。如果单个作业数组记录的不同副本在作业队列中不连续,并且另一个作业数组记录在其之间,则 bf_max_job_array_resv 任务被视为每个作业提交的分区。
-
- bf_max_job_assoc=#
- 每个用户关联尝试启动的最大作业数。 此设置类似于 bf_max_job_user 但如果用户有多个关联,基本上等同于不同用户,这个选项是很方便的。 可以设置此限制,以防止用户用无法启动的作业淹没回填队列,从而阻止其他用户的作业启动。 此选项仅适用于 SchedulerType=sched/backfill。 另请参见 bf_max_job_user、bf_max_job_part、bf_max_job_test 和 bf_max_job_user_part 选项。 将 bf_max_job_test 设置为比 bf_max_job_assoc 高得多的值。 默认值:0(无限制),最小值:0,最大值:bf_max_job_test。
-
- bf_max_job_part=#
- 每个分区尝试启动的最大作业数,使用回填调度器。这对于具有大量分区和作业的系统尤其有帮助。 此选项仅适用于 SchedulerType=sched/backfill。 另请参见 partition_job_depth 和 bf_max_job_test 选项。 将 bf_max_job_test 设置为比 bf_max_job_part 高得多的值。 默认值:0(无限制),最小值:0,最大值:bf_max_job_test。
-
- bf_max_job_start=#
- 在回填调度器的单次迭代中可以启动的最大作业数。 此选项仅适用于 SchedulerType=sched/backfill。 默认值:0(无限制),最小值:0,最大值:10000。
-
- bf_max_job_test=#
- 尝试进行回填调度的最大作业数(即队列深度)。 更高的值会导致更多的开销和更低的响应能力。 在尝试回填调度作业之前,其预期启动时间值将不会被设置。 在大型集群的情况下,配置相对较小的值可能是可取的。 此选项仅适用于 SchedulerType=sched/backfill。 默认值:500,最小值:1,最大值:1,000,000。
-
- bf_max_job_user=#
- 每个用户尝试启动的最大作业数,使用回填调度器,适用于所有分区。 可以设置此限制,以防止用户用无法启动的作业淹没回填队列,从而阻止其他用户的作业启动。这类似于 Maui 中的 MAXIJOB 限制。 此选项仅适用于 SchedulerType=sched/backfill。 另请参见 bf_max_job_part、bf_max_job_test 和 bf_max_job_user_part 选项。 将 bf_max_job_test 设置为比 bf_max_job_user 高得多的值。 默认值:0(无限制),最小值:0,最大值:bf_max_job_test。
-
- bf_max_job_user_part=#
- 每个用户每个分区尝试启动的最大作业数,使用回填调度器,适用于任何单个分区。 此选项仅适用于 SchedulerType=sched/backfill。 另请参见 bf_max_job_part、bf_max_job_test 和 bf_max_job_user 选项。 默认值:0(无限制),最小值:0,最大值:bf_max_job_test。
-
- bf_max_time=#
- 回填调度器可以花费的最大时间(以秒为单位),包括在释放锁时的睡眠时间,超过此时间将停止,即使未达到最大作业计数。 此选项仅适用于 SchedulerType=sched/backfill。 默认值为 bf_interval 的值(默认为 30 秒)。 默认值:bf_interval 值(默认为 30 秒),最小值:1,最大值:3600(1小时)。 注意:如果 bf_interval 较短而 bf_max_time 较大,可能会导致锁被过于频繁地获取,从而使其他服务的 RPC 饿死。如果使用此参数,建议将 max_rpc_cnt 设置得足够高,以便调度不会总是被禁用,并且设置得足够低,以便交互式工作负载能够在合理的时间内完成。max_rpc_cnt 需要低于 256(默认 RPC 线程限制)。在中间值(150)运行可能会给你带来良好的结果。 注意:当增加回填调度周期中花费的时间时,Slurm 可能无法及时响应客户端请求。为了解决这个问题,可以使用 max_rpc_cnt 指定在调度器停止响应这些请求之前的排队 RPC 数量。
-
- bf_min_age_reserve=#
- 回填和主调度逻辑在作业处于待处理状态并可运行至少指定秒数之前,不会为待处理作业保留资源。 此外,等待时间少于指定秒数的作业不会阻止新提交的作业立即启动,即使新提交的作业优先级较低。 如果作业没有时间限制或所有时间限制具有相同值,这可能是有价值的。 默认值为零,这将为任何待处理作业保留资源,并延迟启动优先级较低的作业。 另请参见 bf_job_part_count_reserve 和 bf_min_prio_reserve。 默认值:0,最小值:0,最大值:2592000(30天)。
-
- bf_min_prio_reserve=#
- 回填和主调度逻辑不会为待处理作业保留资源,除非它们的优先级等于或高于指定值。 此外,优先级较低的作业不会阻止新提交的作业立即启动,即使新提交的作业优先级较低。 如果希望最大化系统利用率而不考虑低于某一阈值的作业优先级,这可能是有价值的。 默认值为零,这将为任何待处理作业保留资源,并延迟启动优先级较低的作业。 另请参见 bf_job_part_count_reserve 和 bf_min_age_reserve。 默认值:0,最小值:0,最大值:2^63。
-
- bf_node_space_size=#
- 回填节点空间表的大小。将单个作业添加到回填保留中,在最坏的情况下可能会消耗两个节点空间记录。 在大型集群的情况下,配置相对较小的值可能是可取的。 此选项仅适用于 SchedulerType=sched/backfill。 另请参见 bf_max_job_test 和 bf_running_job_reserve。 默认值:bf_max_job_test,最小值:2,最大值:2,000,000。
-
- bf_one_resv_per_job
- 不允许每个作业添加超过一个回填保留。 调度逻辑构建作业-分区对的排序列表。提交到多个分区的作业在列表中有与请求的分区数量相同的条目。默认情况下,回填调度器可能会评估单个作业的所有作业-分区条目,可能为每对保留资源,但仅在提供最早启动时间的保留中启动作业。 一个作业为多个分区保留资源可能会阻碍其他作业(或 hetjob 组件)保留已经为不提供最早启动时间的分区保留的资源。 请求多个分区的单个作业也可能会阻止其在优先级较低的分区中更早启动,如果这些分区重叠节点,而优先级较高的分区中的回填保留阻止了也在优先级较低的分区中的节点。 此选项使得提交到多个分区的作业在第一个作业-分区对预定回填保留后停止保留资源。来自同一作业的后续对将仅被测试以立即启动。这允许其他作业能够预定其他对的资源,而不保证多分区作业将在提供最早启动时间的分区中启动(除非它可以立即启动)。 此选项默认禁用。
-
- bf_resolution=#
- 维护关于作业开始和结束时间的数据的分辨率(以秒为单位)。更高的值通过使用更大的时间块来确定节点资格,从而提高响应能力和更快的回填周期。 然而,更高的值会导致系统规划效率降低,可能错过改善系统利用率的机会。 此选项仅适用于 SchedulerType=sched/backfill。 默认值:60,最小值:1,最大值:3600(1小时)。
-
- bf_running_job_reserve
- 为在整个节点上运行的作业创建回填保留的额外步骤。 此选项默认禁用。
-
- bf_topopt_enable
- 启用实验性钩子,以控制是否延迟回填中的作业以获得更好的放置。修改 src/plugins/sched/backfill/oracle.c 进行测试。
建议禁用主调度器,以便所有作业通过回填进行计划,并利用 oracle 函数。可以通过设置 SchedulerParameters=sched_interval=-1 来实现。
还建议使用 SchedulerParameters=bf_running_job_reserve 以获得更好的规划。
-
- bf_topopt_iterations
- 作业可能被延迟的连续回填映射槽的数量。 此选项仅在设置了 bf_topopt_enable 时适用。
-
- bf_window=#
- 在考虑调度作业时,向未来查看的分钟数。 更高的值会导致更多的开销和更低的响应能力。 建议的值至少与允许的最长时间限制相等,以防止作业饿死。 为了限制回填调度器管理的数据量,如果 bf_window 的值增加,通常建议也增加 bf_resolution。 此选项仅适用于 SchedulerType=sched/backfill。 默认值:1440(1天),最小值:1,最大值:43200(30天)。
-
- bf_window_linear=#
- 出于性能原因,回填调度器将在计算作业预期终止时间时降低精度。默认情况下,精度从 30 秒开始,并且在尝试确定待处理作业何时可以启动时,当前执行作业的每次评估都会使该时间间隔加倍。该算法可以支持具有数千个运行作业的环境,但可能导致待处理作业的预期启动时间逐渐因缺乏精度而被推迟。为 bf_window_linear 设置一个值将导致每次迭代时时间间隔增加一个固定量。该值以秒为单位指定。例如,值为 60 将导致回填调度器在第一次迭代时识别即将结束的作业,并确定待处理作业是否可以在该作业及所有其他预计在 30 秒(默认初始值)内结束的作业之后启动。在下一次迭代中,待处理作业将在下一个预计结束的作业之后以及所有在该时间内结束的作业(30 秒默认,加上 60 秒选项值)之后进行评估。第三次迭代将有 150 秒的窗口,第四次 210 秒。如果没有此选项,时间窗口将在每次迭代中加倍,因此为 30、60、120、240 秒等。对于同时执行的作业超过几百个,不建议使用 bf_window_linear。
-
- bf_yield_interval=#
- 回填调度器将定期放弃锁,以便其他待处理操作得以进行。 这指定了放弃锁的时间(以微秒为单位)。 较小的值可能有助于高吞吐量计算,当与 bf_continue 选项结合使用时。 另请参见 bf_yield_sleep 选项。 默认值:2,000,000(2秒),最小值:1,最大值:10,000,000(10秒)。
-
- bf_yield_rpc_cnt
- 如果 slurmctld 守护进程中的活动线程数量低于此值,则继续调度作业。调度器将在代码中的某些点检查此条件,并在必要时释放先前放弃的锁。这用于指示 Slurm 何时停止处理请求并开始调度新作业,这与 max_rpc_cnt 相反。结合 max_rpc_cnt,可以提高 Slurm 对请求高峰的响应能力。 默认值:MAX((max_rpc_cnt / 10), 20)(选项禁用),最小值:0,最大值:200。
-
- 注意:如果设置了一个值,则建议设置一个低于 max_rpc_cnt 的值。可能需要对每个系统进行一些调整,但需要足够高,以便调度不会总是被禁用,并且足够低,以便请求能够在合理的时间内通过。避免两个值接近,以免导致请求处理和调度之间的持续切换。
-
- bf_yield_sleep=#
- 回填调度器将定期放弃锁,以便其他待处理操作得以进行。 这指定了放弃锁的时间长度(以微秒为单位)。 另请参见 bf_yield_interval 选项。 默认值:500,000(0.5秒),最小值:1,最大值:10,000,000(10秒)。
-
- build_queue_timeout=#
- 定义构建待调度作业队列的最大时间。 如果系统中有大量依赖作业,仅构建作业队列可能会花费过多时间,从而对整体系统性能产生不利影响,可以根据需要调整此参数。 默认值为 2,000,000 微秒(2 秒)。
-
- correspond_after_task_cnt=#
- 定义用于潜在后续依赖检查的数组任务数量。较低的数字可能导致依赖任务检查失败,当依赖的作业在拆分之前被清除时。 默认值:10。
-
- default_queue_depth=#
- 在运行作业完成或其他常规操作发生时,尝试调度的默认作业数量(即队列深度),但是调度器的运行频率可能会受到 defer 或 sched_min_interval 参数的限制。 主调度循环将以较低的频率运行(忽略此限制),如 sched_interval 选项所述。默认值为 100。 请参见 partition_job_depth 选项以按分区限制深度。
-
- defer
- 设置此选项将避免在作业提交时尝试单独调度每个作业,而是推迟到稍后可能同时调度多个作业的时间。 当大量作业(数百个)同时提交时,此选项可能会提高系统响应能力,但会延迟单个作业的启动时间。另请参见上面的 default_queue_depth。
-
- defer_batch
- 与 defer 类似,但仅会推迟批处理作业的调度。来自 salloc/srun 的交互式分配仍将尝试在提交时立即调度。
-
- delay_boot=#
- 如果作业在此时间段内有资格运行,则不重启节点以满足该作业的特性规范。 如果作业等待时间少于指定时间,则仅使用已经具有指定特性的节点。 参数以分钟为单位。 单个作业可以使用 --delay-boot 选项覆盖此默认值。
-
- disable_job_shrink
- 拒绝用户请求缩小正在运行的作业的大小。(但是,如果设置了 --no-kill 选项,正在运行的作业仍可能因节点故障而缩小。)
-
- disable_hetjob_steps
- 禁用跨异构作业分配的作业步骤。
-
- enable_hetjob_steps
- 启用跨异构作业分配的作业步骤。 默认值。
-
- enable_job_state_cache
- 在 slurmctld 中启用独立的作业状态详细信息缓存。这允许处理 `squeue --only-job-state` 和替换 RPC,对其他 slurmctld 操作的影响最小。
-
- enable_user_top
- 允许非特权用户使用 "scontrol top" 命令。
-
- extra_constraints
- 启用使用 --extra 选项进行节点过滤,以便在 salloc、sbatch 和 srun 中使用节点的 Extra 字段。
-
- ignore_constraint_validation
- 如果设置,并且作业请求 --constraint 任何特性,则请求中会产生无效请求的特性将不会生成错误。 这对于动态系统很有帮助,其中具有特性的节点会来来去去。 作业将保持在作业队列中,直到请求的特性在集群中可用。 请注意,使用此选项不会保护您免受拼写错误的影响。 另请参见 ignore_prefer_validation。
-
- Ignore_NUMA
- 某些处理器(例如 AMD Opteron 6000 系列)每个插槽包含多个 NUMA 节点。这是一种配置,不映射到 Slurm 优化资源分配的硬件实体(PU/线程、核心、插槽、主板、节点和网络交换机)。为了优化此类硬件上的资源分配,Slurm 默认将插槽内的每个 NUMA 节点视为单独的插槽。使用 Ignore_NUMA 选项报告正确的插槽计数,但 不 在 NUMA 节点上优化资源分配。
-
注意:自 hwloc 2.0 起,NUMA 节点不属于主/CPU 拓扑树,因此如果 Slurm 是使用 hwloc 2.0 或更高版本构建的,Slurm 将将 HWLOC_OBJ_PACKAGE 视为插槽,您可以使用 SlurmdParameters=l3cache_as_socket 更改此行为。
-
- ignore_prefer_validation
- 如果设置,并且作业请求 --prefer 任何特性,则请求中会产生无效请求的特性将不会生成错误。 这对于动态系统很有帮助,其中具有特性的节点会来来去去。 请注意,使用此选项不会保护您免受拼写错误的影响。 另请参见 ignore_constraint_validation。
-
- max_array_tasks
- 指定可以包含在作业数组中的最大任务数。 默认限制为 MaxArraySize,但可以使用此选项设置较低的限制。例如,max_array_tasks=1000 和 MaxArraySize=100001 将允许最大任务 ID 为 100000,但将任何单个作业数组中的任务数量限制为 1000。
-
- max_rpc_cnt=#
- 如果 slurmctld 守护进程中的活动线程数量等于或大于此值,则推迟作业调度。调度器将在代码中的某些点检查此条件,并在必要时放弃锁。 这可以提高 Slurm 处理请求的能力,但会以较少频繁启动新作业为代价。默认值:0(选项禁用),最小值:0,最大值:1000。
-
- 注意:最大线程数(MAX_SERVER_THREADS)内部设置为 256,并定义在给定时间内服务的 RPC 数量。将 max_rpc_cnt 设置为超过 256 仅对在放弃锁后继续调度回填工作(即每 2 秒)有用,前提是队列中最多有 MAX(max_rpc_cnt/10, 20) 个 RPC。即 max_rpc_cnt=1000,调度器在放弃锁后仅在待处理 RPC 数量小于或等于 100 时继续。 如果设置了一个值,则建议设置为 10 或更高。可能需要对每个系统进行一些调整,但需要足够高,以便调度不会总是被禁用,并且足够低,以便请求能够在合理的时间内通过。
-
- max_sched_time=#
- 主调度循环将在退出之前执行的时间(以秒为单位)。 如果配置了一个值,请注意在此时间段内将推迟所有其他 Slurm 操作。 确保该值低于 MessageTimeout。 如果未明确配置值,则默认值为 MessageTimeout 的一半,最小默认值为 1 秒,最大默认值为 2 秒。 例如,如果 MessageTimeout=10,则时间限制将为 2 秒(即 MIN(10/2, 2) = 2)。
-
- max_script_size=#
- 指定批处理脚本的最大大小(以字节为单位)。 默认值为 4 兆字节。 较大的值可能会对系统性能产生不利影响。
-
- max_submit_line_size=#
- 指定提交行的最大大小(以字节为单位)。 默认值为 1 兆字节。 此选项不能超过 2 兆字节。
-
- max_switch_wait=#
- 作业可以延迟执行的最大秒数,等待指定的所需交换计数。默认值为 300 秒。
-
- no_backup_scheduling
- 如果使用,备份控制器在接管时将不调度作业。备份控制器将允许提交、修改和取消作业,但不会调度新作业。这在备份控制器位于外部 Cray 节点的 Cray 环境中非常有用。
-
- nohold_on_prolog_fail
- 默认情况下,如果 Prolog 以非零值退出,作业将以保持状态重新排队。通过指定此参数,作业将重新排队,但不会保持,以便调度器可以将其调度到另一台主机。
-
- pack_serial_at_end
- 如果与 select/cons_tres 插件一起使用,则将串行作业放置在可用节点的末尾,而不是使用最佳适应算法。 这可能会减少某些工作负载的资源碎片。
-
- partition_job_depth=#
- 在 Slurm 的主调度逻辑中,尝试调度的每个分区/队列的默认作业数量(即队列深度)。 此限制将在所有主调度周期中强制执行。 该功能类似于回填调度逻辑中的 bf_max_job_part 选项提供的功能。 默认值为 0(无限制)。 根据分区排除的作业将不计入 default_queue_depth 限制。 另请参见 bf_max_job_part 选项。
-
- reduce_completing_frag
- 此选项用于控制在作业处于 COMPLETING 状态时如何调度资源,这会影响潜在的碎片。
如果未设置此选项,则在任何作业处于 COMPLETING 状态且少于 CompleteWait 秒时,将不会在任何分区中启动作业。
如果设置此选项,则在任何单个分区中,若有作业处于 COMPLETING 状态且少于 CompleteWait 秒,将不会启动作业。
此外,在任何与完成作业的节点重叠的分区中,也不会启动作业。
此选项应与 CompleteWait 一起使用。
注意:必须设置 CompleteWait 才能使其生效。如果 CompleteWait=0,则此选项无效。
注意:reduce_completing_frag 仅影响主调度器,而不影响回填调度器。
-
- requeue_on_resume_failure
- 如果节点未能在 ResumeTimeout 内恢复,则所有批处理作业将被重新排队——即使作业请求不被重新排队。这类似于 PrologFlags=ForceRequeueOnFail。
-
- salloc_wait_nodes
- 如果定义,salloc 命令将在所有分配的节点准备好使用(即启动)之前等待。默认情况下,salloc 会在资源分配完成后立即返回。salloc 命令可以使用 --wait-all-nodes 选项覆盖此配置参数。
-
- sbatch_wait_nodes
- 如果定义,sbatch 脚本将在所有分配的节点准备好使用(即启动)之前等待。默认情况下,sbatch 脚本将在作业分配中的第一个节点准备好后立即启动。sbatch 命令可以使用 --wait-all-nodes 选项覆盖此配置参数。
-
- sched_interval=#
- 主调度循环执行和测试所有待处理作业的频率(以秒为单位),仅施加 partition_job_depth 限制。 默认值为 60 秒。 设置为 -1 将禁用主调度循环。
-
- sched_max_job_start=#
- 主调度逻辑在任何单次执行中将启动的最大作业数。 默认值为零,这没有限制。
-
- sched_min_interval=#
- 主调度循环执行和测试任何待处理作业的频率(以微秒为单位)。 调度器每次发生可能使作业启动的事件时(例如,作业提交、作业终止等)以有限的方式运行。 如果这些事件发生频率很高,调度器可能会非常频繁地运行,并消耗大量资源,如果没有通过此选项进行限制。 此选项指定一个调度周期结束和下一个调度周期开始之间的最小时间。 零值将禁用调度逻辑间隔的限制。 默认值为 2 微秒。
-
- spec_cores_first
- 专用核心将从第一个插槽的第一个核心中选择,按循环方式遍历插槽。 默认情况下,专用核心将从最后一个插槽的最后一个核心中选择,按循环方式遍历插槽。
-
- step_retry_count=#
- 当一个步骤完成并且有步骤结束资源分配时,至少对待处理的步骤重试此数量的步骤分配。 另请参见 step_retry_time。 默认值为 8 步。
-
- step_retry_time=#
- 当一个步骤完成并且有步骤结束资源分配时,重试所有已待处理的步骤分配,至少持续此秒数。 另请参见 step_retry_count。 默认值为 60 秒。
-
- time_min_as_soft_limit
- 将 --time-min 限制视为作业的软时间限制。调度将计划较短的持续时间,同时允许作业继续运行直到(“硬”)--time 限制。
-
- whole_hetjob
- 请求取消、保持或释放异构作业的任何组件将应用于作业的所有组件。
注意:此选项以前称为 whole_pack,仍支持以向后兼容。
-
- sched/backfill
- 用于回填调度模块,以增强默认的 FIFO 调度。 回填调度将在不延迟任何高优先级作业的预期启动时间的情况下启动低优先级作业。 回填调度的有效性取决于用户是否指定作业时间限制,否则所有作业将具有相同的时间限制,回填将变得不可能。 请注意上述 SchedulerParameters 选项的文档。 这是默认配置。
-
- sched/builtin
- 这是 FIFO 调度器,按优先级顺序启动作业。 如果分区中的任何作业无法调度,则该分区中的任何低优先级作业都将不会被调度。 对于由于分区约束(例如时间限制)或关闭/排水节点而无法运行的作业,将做出例外。 在这种情况下,可以启动低优先级作业,而不会影响高优先级作业。
可接受的值包括
-
- select/cons_tres
- 节点内的资源(核心、内存、GPU 和所有其他可跟踪资源)作为可消耗资源单独分配。 请注意,可以通过使用 OverSubscribe=Exclusive 选项将整个节点分配给作业以供选择的分区。 有关更多信息,请参见分区 OverSubscribe 参数。 这是默认值。
-
- select/linear
- 用于假设一维节点数组的整个节点分配,其中顺序节点更可取。 对于异构集群(例如,各个节点上的 CPU 数量不同),资源分配将根据作业的节点和 CPU 规范优先考虑高 CPU 数量的节点,如果配置了 TopologyPlugin=topology/flat。使用其他拓扑插件与 select/linear 和异构节点不建议使用,可能导致有效的作业分配请求被拒绝。线性插件不设计用于跟踪节点上的通用资源。在需要跟踪通用资源(例如 GPU)的情况下,应使用 cons_tres 插件。
以下选项由 SelectType=select/cons_tres 插件支持:
-
- CR_CPU
- CPU 是可消耗资源。 配置每个节点上的 CPU 数量,这可能等于核心或超线程的数量,具体取决于所需的最小资源分配。 节点的 Boards、Sockets、CoresPerSocket 和 ThreadsPerCore 可以选择性配置,从而导致作业分配具有更好的局部性;但是这样做将防止在每个核心上分配多个作业。
-
- CR_CPU_Memory
- CPU 和内存是可消耗资源。 配置每个节点上的 CPU 数量,这可能等于核心或超线程的数量,具体取决于所需的最小资源分配。 节点的 Boards、Sockets、CoresPerSocket 和 ThreadsPerCore 可以选择性配置,从而导致作业分配具有更好的局部性;但是这样做将防止在每个核心上分配多个作业。 强烈建议为 DefMemPerCPU 设置一个值。
-
- CR_Core
- 核心是可消耗资源。 在具有超线程的节点上,每个线程被视为 CPU,以满足作业的资源需求,但不会在同一核心上分配多个作业。 分配给作业的 CPU 数量向上取整,以考虑分配核心上的每个 CPU。当使用 --mem-per-cpu 时,这也会影响总分配的内存,成为分配核心上 CPU 总数的倍数。
-
- CR_Core_Memory
- 核心和内存是可消耗资源。 在具有超线程的节点上,每个线程被视为 CPU,以满足作业的资源需求,但不会在同一核心上分配多个作业。 分配给作业的 CPU 数量可能向上取整,以考虑分配核心上的每个 CPU。 强烈建议为 DefMemPerCPU 设置一个值。
-
- CR_ONE_TASK_PER_CORE
- 默认情况下,每个核心分配一个任务。 如果没有此选项,默认情况下,在配置了多个 ThreadsPerCore 的节点上,每个线程将分配一个任务。 注意:此选项不能与 CR_CPU* 一起使用。
-
- CR_CORE_DEFAULT_DIST_BLOCK
- 默认情况下,在节点内使用块分配分配核心。 这是一种伪最佳适应算法,最小化所使用的板数和插槽数(在最小板内)。 此默认行为可以通过指定特定的 “-m” 参数与 srun/salloc/sbatch 进行覆盖。 如果没有此选项,核心将在插槽之间循环分配。
-
- CR_LLN
- 根据空闲 CPU 数量将资源调度到负载最少的节点上。这通常仅建议用于具有串行作业的环境,因为空闲资源往往高度碎片化,导致并行作业分布在多个节点上。 请注意,节点的 Weight 优先于每个节点上的空闲资源数量。 另请参见分区配置参数 LLN,使用所选分区中的负载最少的节点。
-
- CR_Pack_Nodes
- 如果一个作业分配包含的资源超过了启动任务所需的资源(例如,如果整个节点被分配给一个作业),那么与其将作业的任务均匀分布在其分配的节点上,不如尽可能紧密地将它们打包在这些节点上。 例如,考虑一个作业分配包含两个完整节点,每个节点有八个CPU。 如果作业在这两个节点上启动十个任务而没有这个选项,它将在两个节点上各启动五个任务。 使用此选项时,将在第一个节点上启动八个任务,在第二个节点上启动两个任务。 这可以被srun的“--distribution”选项中的“NoPack”所覆盖。 CR_Pack_Nodes仅在使用“block”任务分配方法时适用。
-
- LL_SHARED_GRES
- 为共享GRES(gres/mps,gres/shard)分配资源时,优先选择负载最小的设备(就已分配的比例而言)。这样作业将分散在节点上的GRES设备上,而不是默认行为中使用第一个可用设备。 此选项仅由select/cons_tres插件支持。
-
- CR_Socket
- 插槽是可消耗资源。 在具有多个核心的节点上,每个核心或线程被视为一个CPU,以满足作业的资源需求,但多个作业不会在同一插槽上分配资源。
-
- CR_Socket_Memory
- 内存和插槽是可消耗资源。 在具有多个核心的节点上,每个核心或线程被视为一个CPU,以满足作业的资源需求,但多个作业不会在同一插槽上分配资源。 强烈建议为DefMemPerCPU设置一个值。
-
- CR_Memory
- 内存是可消耗资源。 注意:这意味着所有分区的OverSubscribe=YES或OverSubscribe=FORCE。 强烈建议为DefMemPerCPU设置一个值。
-
- MULTIPLE_SHARING_GRES_PJ
- 默认情况下,每个作业在每个节点上只允许一个共享GRES。这允许在单个节点上使用多个共享GRES,以满足每个作业的共享GRES需求。 示例:如果有10个分片分配给一个GPU,而请求了12个分片,则作业将被分配2个GPU。一个使用10个分片,另一个使用2个分片。
-
- ENFORCE_BINDING_GRES
- 将--gres-flags=enforce-binding设置为每个作业的默认值。 这可以通过--gres-flags=disable-binding覆盖。
-
- ONE_TASK_PER_SHARING_GRES
- 将--gres-flags=one-task-per-sharing设置为每个作业的默认值。 这可以通过--gres-flags=multiple-tasks-per-sharing覆盖。
-
注意:如果内存未配置为可消耗资源(CR_CPU,CR_Core或CR_Socket无_Memory),则内存可以被超额分配,并且即使在cgroup.conf中配置了它,也不会受到任务/cgroup的限制。在这种情况下,--mem选项仅用于过滤掉配置内存较低的节点,并不考虑正在运行的作业。例如,两个请求节点所有内存的作业可以同时运行。
SlurmctldHost=slurmctl-primary(12.34.56.78)
每个运行slurmctld实例的主机应具有SlurmctldHost=条目。例如:
SlurmctldHost=slurmctl-primary1 SlurmctldHost=slurmctl-primary2 SlurmctldHost=slurmctl-primary3(12.34.56.78)
必须至少指定一次SlurmctldHost。如果指定多次,第一个条目将作为主服务器运行,所有其他条目作为备用备份。 如果主机失败,第一个备份将从备用变为主机,直到第一个主机重新上线。如果新的主机失败,则将重复此过程。
Slurm守护进程需要重新配置(例如“scontrol reconfig”)以使此参数的更改生效。进行这些更改时,正在运行的作业是可以的,因为正在运行的步骤将获得更新的SlurmctldHost信息。
每个slurmctld主控制器必须能够访问StateSaveLocation目录,该目录必须始终可由主控制器和所有备份控制器读取和写入。
如果需要更改此设置,请参阅重新定位控制器部分。
如果指定了路径名,请参阅日志记录部分。
-
- allow_user_triggers
- 允许非root/slurm_user用户设置触发器。SlurmUser也必须设置为root,以允许这些触发器工作。有关更多详细信息,请参阅strigger手册页。
-
- cloud_dns
- 默认情况下,Slurm期望云节点的网络地址在创建节点之前是未知的,并且Slurm将被通知节点的地址(例如scontrol update nodename=<name> nodeaddr=<addr>)。 由于Slurm通信依赖于在slurm.conf中找到的节点配置,Slurm将在等待所有节点启动后告知客户端命令每个节点的IP地址。然而,在节点在DNS中的环境中,可以通过配置此选项来避免此步骤。
-
- conmgr_max_connections=<connection_count>
- 指定在任何给定时间要处理的最大连接数。 这不会影响待处理连接的最大数量,因为那是由内核控制的。默认值为50。
-
- conmgr_threads=<thread_count>
- 用于在监听插座上接收和处理连接的线程池中的进程线程数。
-
- conmgr_use_poll
- 使用poll(2)而不是epoll(7)来监视文件描述符。
-
- conmgr_connect_timeout=<seconds>
- 在认为出站连接尝试超时之前等待<seconds>。默认值为MessageTimeout的值。
-
- conmgr_read_timeout=<seconds>
- 在认为从文件描述符读取超时之前等待<seconds>。默认值为MessageTimeout的值。
-
- conmgr_quiesce_timeout=<seconds>
- 在认为安静超时之前等待<seconds>。超时后,所有(非监听)活动连接将被关闭,以允许安静开始。默认值为MessageTimeout的两倍。
-
- conmgr_wait_write_delay=<seconds>
- 在等待内核刷新输出缓冲区时,每<seconds>轮询内核以查看更改。默认值为MessageTimeout的值。
-
- conmgr_write_timeout=<seconds>
- 在认为从文件描述符写入超时之前等待<seconds>。默认值为MessageTimeout的值。
-
- disable_triggers
- 禁用注册新触发器的能力。
-
- enable_configless
- 允许slurmd、slurmstepd和用户命令进行“无配置”操作。
启用时,slurmd将被允许从slurmctld检索配置文件和Prolog和Epilog脚本,并且在任何“scontrol reconfigure”命令上,新的配置和脚本将自动推送并应用于以“无配置”模式运行的节点。
有关更多详细信息,请参见https://slurm.schedmd.com/configless_slurm.html。
注意:使用Include指令的包含文件仅在文件名没有路径分隔符并且位于slurm.conf旁边时被推送。
注意:Prolog和Epilog脚本仅在文件名没有路径分隔符并且位于slurm.conf旁边时被推送。 不支持通配符模式(参见glob(7))。
-
- idle_on_node_suspend
- 在使用SuspendProgram挂起节点时,将节点标记为空闲,无论当前状态如何,以便节点在稍后时间可以恢复。
-
- node_reg_mem_percent=#
- 节点允许注册的内存百分比,而不被标记为低内存无效。默认值为100。对于State=CLOUD节点,默认值为90。要禁用此功能,请将其设置为100。config_overrides优先于此选项。
建议配置task/cgroup与ConstrainRamSpace。内存cgroup限制不会设置超过节点上的实际内存。如果需要,请在cgroup.conf中配置AllowedRamSpace以添加缓冲区。
-
- no_quick_restart
- 默认情况下,启动新的slurmctld实例将杀死之前运行的旧实例,然后再接管控制。如果设置了此选项,则在没有-i选项的情况下不会发生这种情况。
-
- power_save_interval
- power_save线程查看恢复和挂起节点的频率。power_save线程将在节点状态更改时更早地进行工作。默认值为10秒。
-
- power_save_min_interval
- power_save线程至少查看恢复和挂起节点的频率。默认值为0。
-
- max_powered_nodes
- 集群中开启的节点的最大数量。一旦达到此数量,请求额外节点的作业将无法启动,且“scontrol power up<nodes>”将失败。
-
- max_dbd_msg_action
- 达到MaxDBDMsgs时使用的操作,选项为“discard”(默认)和“exit”。
当指定“discard”并且达到MaxDBDMsgs时,我们首先清除类型为Step start和complete的待处理消息,当再次达到MaxDBDMsgs时,作业开始消息将被清除。作业完成和节点状态更改将继续消耗从清除中创建的空白空间,直到再次达到MaxDBDMsgs,此时不再跟踪新消息,导致数据丢失和潜在的失控作业。
当指定“exit”并且达到MaxDBDMsgs时,slurmctld将退出,而不是丢弃任何消息。如果slurmdbd关闭并且slurmctld跟踪的消息超过MaxDBDMsgs,则无法启动slurmctld。
-
- reboot_from_controller
- 从控制器运行RebootProgram而不是在slurmd上。RebootProgram将作为第一个参数传递一个以逗号分隔的节点列表以进行重启,如果适用,第二个参数为重启所需的功能。
-
- rl_bucket_size=
- 令牌桶的大小。这允许用户在稳定状态速率限制生效之前进行一定量的RPC突发。 默认值为30。
-
- rl_enable
- 启用每用户RPC速率限制支持。一旦达到限制,客户端命令将被告知退回并等待一秒钟。 这被实现为“令牌桶”,允许个别用户在持有稳定状态RPC负载之前进行一定程度的“突发”RPC负载。
-
- rl_log_freq=
- 记录单个用户超过RPC限制的日志的最大频率(以秒为单位)。设置为0以查看每个事件。设置为-1以完全禁用日志消息。 默认值为0。
-
- rl_refill_period=
- 每个用户桶中添加额外令牌的频率(以秒为单位)。 默认值为1。
-
- rl_refill_rate=
- 每个周期向桶中添加的令牌数量。 默认值为2。
-
- rl_table_size=
- 用户哈希表中的条目数量。推荐值应至少是系统上活动用户帐户数量的两倍。 默认值为8192。
-
- enable_stepmgr
- 在系统范围内启用slurmstepd步骤管理。这使得作业步骤可以由与作业关联的单个外部slurmstepd管理。 这对在其分配内提交多个步骤的作业非常有利。 必须设置PrologFlags=contain。
-
- user_resv_delete
- 允许任何能够在保留中运行的用户删除它。
-
- validate_nodeaddr_threads=
- 在启动时,slurmctld查找系统中每个计算节点的地址。在大型系统中,这可能会导致相当大的延迟,此选项允许slurmctld并发处理查找调用,并可以显著减少系统启动时间。默认值为1。最大允许值为64。
注意:在Cray系统上,特定于领域的IP地址(RSIP)将自动尝试与在端口8192-60000上打开的任何内容进行交互。 配置SlurmctldPort以使用配置的SrunPortRange和RSIP的端口范围之外的端口。
如果指定了路径名,请参阅日志记录部分。
-
- allow_ecores
- 如果设置,并且节点上的处理器具有E-Cores,则允许在调度和任务放置中使用它们。(默认情况下,E-Cores被忽略。)
-
- config_overrides
- 如果设置,则将每个节点的配置视为在slurm.conf配置文件中指定的配置,任何资源少于配置的节点将不被设置为INVAL/INVALID_REG。 此选项通常仅对测试目的有用。 相当于现已弃用的FastSchedule=2选项。
-
- conmgr_max_connections=<connection_count>
- 指定在任何给定时间要处理的最大连接数。 这不会影响待处理连接的最大数量,因为那是由内核控制的。
-
- conmgr_threads=<thread_count>
- 用于在监听插座上接收连接的进程线程数。
-
- conmgr_use_poll
- 使用poll(2)而不是epoll(7)来监视文件描述符。
-
- conmgr_connect_timeout=<seconds>
- 等待<seconds>,然后认为出站连接尝试超时。默认值为MessageTimeout的值。
-
- conmgr_read_timeout=<seconds>
- 等待<seconds>,然后认为从文件描述符读取超时。默认值为MessageTimeout的值。
-
- conmgr_quiesce_timeout=<seconds>
- 等待<seconds>,然后认为安静超时。超时后,所有(非监听)活动连接将被关闭,以允许安静开始。默认值为MessageTimeout的两倍。
-
- conmgr_wait_write_delay=<seconds>
- 在等待内核刷新输出缓冲区时,每<seconds>轮询内核以查看更改。默认值为MessageTimeout的值。
-
- conmgr_write_timeout=<seconds>
- 等待<seconds>,然后认为从文件描述符写入超时。默认值为MessageTimeout的值。
-
- l3cache_as_socket
- 将hwloc l3cache用作插槽计数。这在某些处理器上可能很有用,其中插槽级别太粗糙,而l3cache可能提供更好的任务分配。(例如,沿着CCX边界而不是插槽边界。) 与numa_node_as_socket互斥。 需要hwloc v2。
- numa_node_as_socket
- 使用hwloc NUMA节点来确定作为插槽使用的主要层次对象。 如果设置此选项,Slurm将检查NUMA节点的父对象并将其用作插槽。此选项可能对像AMD Epyc这样的架构有用,其中每个插槽的节点数可以配置。 与l3cache_as_socket互斥。 需要hwloc v2。
-
- shutdown_on_reboot
- 如果设置,当收到重启请求时,Slurmd将关闭自身。
-
- contain_spank
- 如果设置并且指定了作业容器插件,则spank_user()、spank_task_post_fork()和spank_task_exit()调用将在作业容器内运行。
注意:在Cray系统上,特定于领域的IP地址(RSIP)将自动尝试与在端口8192-60000上打开的任何内容进行交互。 配置SlurmdPort以使用配置的SrunPortRange和RSIP的端口范围之外的端口。
注意: 在 Cray 系统上,特定于领域的 IP 地址(RSIP)将自动尝试与在 8192-60000 端口上打开的任何内容进行交互。配置 SrunPortRange 以使用高于 RSIP 使用的端口范围,理想情况下是 1000 个或更多端口,例如 "SrunPortRange=60001-63000"。
注意: SrunPortRange 必须足够大,以覆盖预期创建的 srun 端口数量。单个 srun 打开 4 个侦听端口,加上每 48 个主机额外使用 2 个端口。使用 --pty 选项将导致使用额外的端口。
示例:
srun -N 1 将使用 4 个侦听端口。 srun --pty -N 1 将使用 5 个侦听端口。 srun -N 48 将使用 4 个侦听端口。 srun -N 50 将使用 6 个侦听端口。 srun -N 200 将使用 12 个侦听端口。
在配置了 SwitchType=switch/hpe_slingshot 的 HPE Slingshot 系统上,支持以下参数(多个参数用逗号分隔):
-
- vnis=<min>-<max>
- 为作业和应用程序分配的 VNI 范围。默认值为 1024-65535。
-
- destroy_retries=<retry attempts>
- 配置在步骤结束时重试销毁 CXI 服务的次数。每次重试之间有一秒的暂停。默认值为 5。
-
- tcs=<class1>[:<class2>]...
- 要为应用程序配置的流量类别集合。支持的流量类别包括 DEDICATED_ACCESS、LOW_LATENCY、BULK_DATA 和 BEST_EFFORT。流量类别也可以指定为 TC_DEDICATED_ACCESS、TC_LOW_LATENCY、TC_BULK_DATA 和 TC_BEST_EFFORT。
-
- single_node_vni=<all|user|none>
- 如果设置为 'all',则为所有作业步骤分配一个 VNI(默认情况下,单节点作业步骤不会分配 VNI)。如果设置为 'user',则为使用 srun --network=single_node_vni 选项或 SLURM_NETWORK=single_node_vni 环境变量的单节点作业步骤分配 VNI。如果设置为 'none'(或未设置 single_node_vni),则不为单节点作业步骤分配任何 VNI。为了向后兼容,未设置参数的 single_node_vni 相当于 'all'。
-
- job_vni=<all|user|none>
- 如果设置为 'all',则为作业分配一个额外的 VNI,所有作业步骤共享。如果设置为 'user',则为任何使用 srun --network=job_vni 选项或 SLURM_NETWORK=job_vni 环境变量的作业分配一个额外的 VNI。如果设置为 'none'(或未设置 job_vni),则不为作业分配任何额外的 VNI。为了向后兼容,未设置参数的 job_vni 相当于 'all'。
-
- adjust_limits
- 如果设置,slurmd 将通过取每个 NIC 的最大资源数量并减去任何系统网络服务的保留或使用值(较高者)来设置网络资源预留的上限;这是默认值。
-
- no_adjust_limits
- 如果设置,slurmd 将仅根据每个资源配置的默认值和应用程序中的任务数量计算网络资源预留;它不会根据已经存在的系统网络服务的资源使用情况设置这些预留请求的上限。设置此项将意味着更多的应用程序启动可能会因网络资源耗尽而失败,但如果应用程序绝对需要一定数量的资源才能正常工作,则此选项将确保这一点。
-
- hwcoll_addrs_per_job
- 每个作业分配的 Slingshot 硬件集合多播地址的数量(大于 hwcoll_min_nodes 节点)。
-
- hwcoll_num_nodes
- 为作业分配 Slingshot 硬件集合的最小节点数。因为硬件集合引擎不期望为跨少数节点的作业提供有意义的性能提升。
-
- fm_url
- 如果设置,slurm 将使用配置的 URL 与 fabric manager 进行接口,以启用 Slingshot 硬件集合。请注意,必须设置 enable_stepmgr 才能运行硬件集合。
-
- fm_auth
- HPE fabric manager REST API 身份验证类型(BASIC 或 OAUTH,默认 OAUTH)。
-
- fm_authdir
- 包含身份验证信息文件的目录(默认 /etc/fmsim 用于 BASIC 身份验证,/etc/wlm-client-auth 用于 OAUTH 身份验证)。
-
- fm_mtls_url
- 当启用 mTLS 身份验证时,设置 slurm 守护进程将用于与 fabric manager 进行接口以启用 Slingshot 硬件集合的替代 URL。如果未设置,将使用 fm_url。要启用 mTLS 身份验证,请参见 fm_mtls_ca、fm_mtls_cert 和 fm_mtls_key。
注意: 设置 fm_url 和 enable_stepmgr 是启用 Slingshot 硬件集合所必需的。
-
- fm_mtls_ca
- 证书颁发机构(CA)捆绑文件或包含由 fabric manager 证书签名的文件的目录的路径。如果设置,当启用 Slingshot 硬件集合时,将验证 fabric manager 服务器的身份。另请参见 fm_mtls_cert 和 fm_mtls_key。
注意: 此选项不是启用与 fabric manager 的 mTLS 身份验证所必需的。但是,如果没有它,客户端(slurmctld 和 stepmgr 进程)将无法验证服务器身份。
-
- fm_mtls_cert
- 客户端公钥的路径。当启用 Slingshot 硬件集合时,这是启用与 fabric manager 的 mTLS 身份验证所必需的。另请参见 fm_mtls_ca 和 fm_mtls_key。
-
- fm_mtls_key
- 客户端私钥的路径。当启用 Slingshot 硬件集合时,这是启用与 fabric manager 的 mTLS 身份验证所必需的。另请参见 fm_mtls_ca 和 fm_mtls_cert。
-
- def_<rsrc>=<val>
- 此资源的每 CPU 保留分配。
-
- res_<rsrc>=<val>
- 此资源的每节点保留分配。如果设置,将覆盖每 CPU 的分配。
-
- max_<rsrc>=<val>
- 此资源的每节点最大应用程序。
可以配置的资源包括:
在配置了 SwitchType=switch/nvidia_imex 的系统上,支持以下参数:
- 注意: 建议在配置 TaskPlugin 时将 task/cgroup,task/affinity 一起堆叠,并在 cgroup.conf 中设置 ConstrainCores=yes。此设置使用 task/affinity 插件为任务设置 CPU 掩码,并使用 task/cgroup 插件将任务限制在分配的 CPU 中。
-
- Cores
- 默认情况下将任务绑定到核心。覆盖自动绑定。
-
- None
- 默认情况下不执行任何任务绑定。覆盖自动绑定。
-
- Sockets
- 默认情况下绑定到插槽。覆盖自动绑定。
-
- Threads
- 默认情况下绑定到线程。覆盖自动绑定。
-
- SlurmdSpecOverride
- 如果 slurmd 在具有 cpuset 或内存限制的 cgroup 中启动,则 CpuSpecList 和 MemSpecLimit 将被设置并覆盖配置的值。这将避免从这些限制中调度资源。在 cgroup/v1 中,slurmd 和 slurmstepd 守护进程将无法使用这些资源。在正常行为中,cgroup/v1 将守护进程限制在 CpuSpecList 和 MemSpecLimit。
-
- SlurmdOffSpec
- 如果为节点识别了专用核心或 CPU(即为节点配置了 CoreSpecCount 或 CpuSpecList),则在计算节点上运行的 Slurm 守护进程(即 slurmd 和 slurmstepd)应在这些资源之外运行(即专用资源对 Slurm 守护进程和由 Slurm 生成的作业完全不可用)。
-
- OOMKillStep
- 设置此参数以在步骤的任何任务触发 OOM 事件时终止所有节点中的整个步骤。
这适用于整个分配,但不适用于外部步骤。可以由用户覆盖。
注意: 此参数需要 task/cgroup 插件、Cgroups v2 和内核版本高于 4.19。
-
- Verbose
- 在任务运行之前详细报告绑定信息。
-
- Autobind
- 在 "自动绑定" 找不到匹配项的情况下设置默认绑定。设置为 Threads、Cores 或 Sockets(例如 TaskPluginParam=autobind=threads)。
-
- export NAME=value
- 将为正在生成的任务设置环境变量。等号后的所有内容到行尾将用作环境变量的值。当前不支持导出函数。
-
- print ...
- 将导致该行(不带前导 "print ")打印到作业的标准输出。
-
- unset NAME
- 将清除正在生成的任务的环境变量。
-
- 任务 prolog/epilog 执行的顺序如下:
-
- 1. pre_launch_priv()
- TaskPlugin 中的函数
-
- 1. pre_launch()
- TaskPlugin 中的函数
-
- 2. TaskProlog
- 在 slurm.conf 中定义的系统范围的每个任务程序
-
- 3. User prolog
- 使用 srun 的 --task-prolog 选项或 SLURM_TASK_PROLOG 环境变量定义的作业步骤特定任务程序
-
- 4. Task
- 执行作业步骤的任务
-
- 5. User epilog
- 使用 srun 的 --task-epilog 选项或 SLURM_TASK_EPILOG 环境变量定义的作业步骤特定任务程序
-
- 6. TaskEpilog
- 在 slurm.conf 中定义的系统范围的每个任务程序
-
- 7. post_term()
- TaskPlugin 中的函数
-
- ca_cert_file=
- 证书颁发机构(CA)证书的路径。必须在所有主机上存在,并且所有 Slurm 组件都可以访问。文件权限必须为 644,并且由 SlurmUser/root 拥有。
默认路径为 Slurm 配置目录中的 "ca_cert.pem"。
-
- ctld_cert_file=
- slurmctld 使用的证书的路径。必须链接到 ca_cert_file。应仅存在于运行 slurmctld 的主机上。文件权限必须为 600,并且由 SlurmUser 拥有。
默认路径为 Slurm 配置目录中的 "ctld_cert.pem"。
-
- ctld_cert_key_file=
- 与 ctld_cert_file 一起使用的私钥的路径。应仅存在于运行 slurmctld 的主机上。文件权限必须为 600,并且由 SlurmUser 拥有。
默认路径为 Slurm 配置目录中的 "ctld_cert_key.pem"。
-
- restd_cert_file=
- slurmrestd 使用的证书的路径。必须链接到 ca_cert_file。应仅存在于运行 slurmrestd 的主机上。文件权限必须为 600,并且由运行 slurmrestd 的用户拥有。
默认路径为 Slurm 配置目录中的 "restd_cert.pem"。
-
- restd_cert_key_file=
- 与 restd_cert_file 一起使用的私钥的路径。应仅存在于运行 slurmrestd 的主机上。文件权限必须为 600,并且由运行 slurmrestd 的用户拥有。
默认路径为 Slurm 配置目录中的 "restd_cert_key.pem"。
-
- sackd_cert_file=
- sackd 使用的证书的路径。必须链接到 ca_cert_file。应仅存在于运行 sackd 的主机上。文件权限必须为 600,并且由 SlurmUser 拥有。
默认路径为 Slurm 配置目录中的 "sackd_cert.pem"。
注意: 如果不使用 certmgr 插件,则需要存在此文件。
-
- sackd_cert_key_file=
- 与 sackd_cert_file 一起使用的私钥的路径。应仅存在于运行 sackd 的主机上。文件权限必须为 600,并且由 SlurmUser 拥有。
默认路径为 Slurm 配置目录中的 "sackd_cert_key.pem"。
注意: 如果不使用 certmgr 插件,则需要存在此文件。
-
- slurmd_cert_file=
- slurmd 使用的证书的路径。必须链接到 ca_cert_file。应仅存在于运行 slurmd 的主机上。文件权限必须为 600,并且由 SlurmUser 拥有。
默认路径为 Slurm 配置目录中的 "slurmd_cert.pem"。
注意: 如果不使用 certmgr 插件,则需要存在此文件。
-
- slurmd_cert_key_file=
- 与 slurmd_cert_file 一起使用的私钥的路径。应仅存在于运行 slurmd 的主机上。文件权限必须为 600,并且由 SlurmUser 拥有。
默认路径为 Slurm 配置目录中的 "slurmd_cert_key.pem"。
注意: 如果不使用 certmgr 插件,则需要存在此文件。
-
- load_system_certificates
- 加载在默认系统位置(例如 /etc/ssl)找到的证书到信任存储中。
默认情况下不加载系统证书,并仅依赖 ca_cert_file 来建立信任。
-
- security_policy_version=
- s2n 使用的安全策略版本。有关更多详细信息,请参见 s2n 文档。默认安全策略为 "20230317",符合 FIPS 标准并包括 TLS 1.3。
-
- tls/s2n
- 使用 s2n TLS 插件。需要额外配置并导致显著的处理开销,但允许所有 Slurm 通信加密。有关更多详细信息,请参阅 TLS 指南:<https://slurm.schedmd.com/tls.html>
-
- Dragonfly
- 为 Dragonfly 网络优化分配。有效时 TopologyPlugin=topology/tree。
-
- RoutePart
- 使用分区节点列表从控制器路由通信,而不是使用插件的默认路由计算。一旦在计算节点上,通信将使用请求插件的正常算法进行路由,遵循 TreeWidth(如果适用)。如果节点在多个分区中,将使用第一个看到的分区。控制器将直接与不在分区中的任何节点进行通信。
-
- SwitchAsNodeRank
- 将相同的节点排名分配给一个叶子交换机下的所有节点。如果节点的命名约定与网络拓扑不匹配,这可能会很有用。
-
- RouteTree
- 使用 topology.conf 文件中定义的交换机层次结构进行路由,而不仅仅是调度。有效时 TopologyPlugin=topology/tree。与动态节点不兼容。
-
- TopoMaxSizeUnroll=#
- 从最小-最大节点作业规范自动展开的单个作业大小的最大数量。默认值:-1(选项禁用)。有效时 TopologyPlugin=topology/block。
-
- TopoOptional
- 仅在作业包含交换机选项时优化网络拓扑的分配。由于为拓扑优化资源分配涉及更高的系统开销,因此可以使用此选项仅对可以利用它的作业施加额外的开销。如果大多数作业分配未针对网络拓扑进行优化,它们可能会碎片化资源,以至于其他作业的拓扑优化将难以实现。 注意: 启用此选项后,作业可以跨越没有共同父交换机的节点。
-
- topology/block
- 用于块网络拓扑,如topology.conf(5)手册页中所述。
-
- topology/flat
- 在一维拓扑上进行最佳适应逻辑。这是默认值。
-
- topology/tree
- 用于具有select/cons_tres插件的分层网络,如topology.conf(5)手册页中所述。
有关更多信息,请参见不可杀死步骤程序脚本部分。
注意: 确保UnkillableStepTimeout至少是MessageTimeout的5倍,否则可能导致节点意外排空。
auth required pam_localuser.so
auth required pam_shells.so
account required pam_unix.so
account required pam_access.so
session required pam_unix.so
对于使用通用配置文件配置PAM的站点,应该添加适当的行(见上文),其中slurm是服务名称。有关更多详细信息,请参见<https://slurm.schedmd.com/pam_slurm_adopt.html>。
注意: UsePAM选项与contribs/pam/pam_slurm和/或contribs/pam_slurm_adopt模块无关。因此,这两个模块可以独立于UsePAM的设置值工作。
注意: 此参数取决于在JobAcctGatherParams中配置的OverMemoryKill。还可以配置TaskPlugin以使用task/cgroup进行内存强制执行。通过cgroups进行的内存强制执行不会受到VSizeFactor的影响。
节点配置
要由Slurm管理的节点(或机器)的配置也在/etc/slurm.conf中指定。节点配置的更改(例如,添加节点、改变其处理器数量等)需要重新启动或重新配置所有slurmctld和slurmd守护进程。所有slurmd守护进程必须知道系统中的每个节点,以便转发消息以支持分层通信。配置文件中只需提供NodeName。所有其他节点配置信息都是可选的。建议建立基线节点配置,特别是当集群是异构时。注册到系统的节点如果配置的资源少于(例如,内存不足),将被置于“DOWN”状态,以避免在其上调度作业。建立基线配置还将通过允许Slurm将作业要求与这些(相对较少的)配置参数进行比较,从而加速Slurm的调度过程,并可能避免检查每个单独节点的配置。节点注册时检查的资源包括:CPU、RealMemory和TmpDisk。可以通过记录指定默认值,其中NodeName为“DEFAULT”。默认条目值仅适用于配置文件中其后面的行,并且可以通过多个条目多次重置默认值,其中“NodeName=DEFAULT”。每一行中NodeName为“DEFAULT”的行将替换或添加到先前的默认值,并且不会重新初始化默认值。“NodeName=”规范必须放在描述节点配置的每一行上。单个节点名称不能在多行中作为NodeName值出现(重复的节点名称记录将被忽略)。实际上,通常可以并且希望在仅几行中定义所有节点的配置。这种约定允许在调度较大集群时进行显著优化。为了支持某些架构上需要连续节点的作业概念,节点规范应按连续顺序放置在此文件中。配置文件中不得列出同一节点名称超过一次。使用“DownNodes=”记录临时处于DOWN、DRAIN或FAILING状态的节点的状态,而不更改永久配置。作业步骤的任务按节点在配置文件中出现的顺序分配。目前,Slurm没有能力任意排序作业步骤的任务。
多个节点名称可以用逗号分隔(例如“alpha,beta,gamma”),并且/或可以选择使用简单的节点范围表达式来指定节点的数字范围,以避免构建包含大量条目的配置文件。节点范围表达式可以包含一对方括号,里面是以逗号分隔的数字和/或用“-”分隔的数字范围(例如“linux[0-64,128]”或“lx[15,18,32-33]”)。请注意,数字范围可以包含一个或多个前导零,以指示数字部分具有固定的位数(例如“linux[0000-1023]”)。可以在表达式中包含多个数字范围(例如“rack[0-63]_blade[0-41]”)。如果包含一个或多个数字表达式,则其中一个必须位于名称的末尾(例如“unit[0-31]rack”是无效的),但可以在逗号分隔的列表中始终使用任意名称。
节点配置指定以下信息:
- NodeName
- Slurm用于引用节点的名称。通常这是“/bin/hostname -s”返回的字符串。它也可以是“/bin/hostname -f”返回的完全合格域名(例如“foo1.bar.com”),或通过主机数据库(/etc/hosts)或DNS与主机关联的任何有效域名,具体取决于解析器设置。请注意,如果未使用主机名的简短形式,则可能会阻止使用主机列表表达式(方括号中的数字部分必须位于字符串的末尾)。如果指定了NodeHostname,它也可以是任意字符串。如果NodeName为“DEFAULT”,则该记录中指定的值将适用于后续节点规范,除非在该节点记录中明确设置为其他值或用不同的默认值替换。每一行中NodeName为“DEFAULT”的行将替换或添加到先前的默认值,并且不会重新初始化默认值。对于节点顺序重要的架构,节点将在定义的顺序中被视为连续。例如,如果“NodeName=charlie”的配置紧接在“NodeName=baker”的配置之后,则它们将在计算机中被视为相邻。 注意: 如果NodeName为“ALL”,则解析配置的进程将立即退出,因为这是一个内部保留字。
-
- NodeHostname
- 通常这是“/bin/hostname -s”返回的字符串。它也可以是“/bin/hostname -f”返回的完全合格域名(例如“foo1.bar.com”),或通过主机数据库(/etc/hosts)或DNS与主机关联的任何有效域名,具体取决于解析器设置。请注意,如果未使用主机名的简短形式,则可能会阻止使用主机列表表达式(方括号中的数字部分必须位于字符串的末尾)。可以使用节点范围表达式来指定一组节点。如果使用了表达式,则配置文件中由NodeHostname标识的节点数量必须与由NodeName标识的节点数量相同。默认情况下,NodeHostname的值将与NodeName相同。
-
- NodeAddr
- 在建立通信路径时应引用节点的名称。此名称将用作getaddrinfo()函数的参数以进行识别。如果使用节点范围表达式来指定多个节点,则它们必须与NodeName中的条目完全匹配(例如“NodeName=lx[0-7] NodeAddr=elx[0-7]”)。NodeAddr也可以包含IP地址。默认情况下,NodeAddr的值将与NodeHostname相同。
-
- BcastAddr
- 用于sbcast网络流量到给定节点的备用网络路径。此名称将用作getaddrinfo()函数的参数。如果使用节点范围表达式来指定多个节点,则它们必须与NodeName中的条目完全匹配(例如“NodeName=lx[0-7] BcastAddr=elx[0-7]”)。BcastAddr也可以包含IP地址。默认情况下,BcastAddr未设置,sbcast流量将路由到给定节点的NodeAddr。注意:不能与CommunicationParameters=NoInAddrAny一起使用。
-
- Boards
- 具有基板控制器的节点中的基板数量。请注意,当指定Boards时,应指定SocketsPerBoard、CoresPerSocket和ThreadsPerCore。默认值为1。
-
- CoreSpecCount
- 为系统使用保留的核心数量。根据SlurmdOffSpec的TaskPluginParam选项,Slurm守护进程slurmd可能被限制在这些资源内(默认)或被禁止使用这些资源。如果使用cgroup/v1,则同样适用于slurmstepd进程。将slurmd与用户作业隔离可能会提高应用程序性能。如果AllowSpecResourcesUsage=yes且用户明确请求的核心数量少于配置的CoreSpecCount,则作业可以使用这些核心。如果为节点指定了此选项和CpuSpecList,则会生成错误。有关Slurm选择核心的算法的信息,请参见核心专业化文档(https://slurm.schedmd.com/core_spec.html)。
-
- CoresPerSocket
- 单个物理处理器插槽中的核心数量(例如“2”)。CoresPerSocket值描述物理核心,而不是每个插槽的逻辑处理器数量。注意: 如果您有多核处理器,您可能需要指定此参数以优化调度。默认值为1。
-
- CpuBind
- 如果作业步骤请求未指定控制任务如何绑定到分配的CPU的选项(通过使用--cpu-bind),并且分配给作业的所有节点具有相同的CpuBind选项,则节点的CpuBind选项将控制任务如何绑定到分配的资源。如果节点定义无法使用,则接下来将使用分区定义,最后使用TaskPluginParam,默认情况下不进行绑定。CpuBind的支持值为none、socket、ldom(NUMA)、core和thread。
-
- CPUs
- 节点上的逻辑处理器数量(例如“2”)。可以设置为总插槽数(仅支持select/linear)、核心或线程数。当您只想调度超线程节点上的核心时,这可能会很有用。如果省略CPUs,则其默认值将等于Boards、Sockets、CoresPerSocket和ThreadsPerCore的乘积。
-
- CpuSpecList
- 为系统使用保留的Slurm抽象CPU ID的逗号分隔列表。如果指定了此列表,则将扩展以包括同一核心上的所有其他CPU(如果有)。根据SlurmdOffSpec的TaskPluginParam选项,Slurm守护进程slurmd可能被限制在这些资源内(默认)或被禁止使用这些资源。如果使用cgroup/v1,则同样适用于slurmstepd进程。将slurmd与用户作业隔离可能会提高应用程序性能。如果AllowSpecResourcesUsage=yes且用户明确请求的核心数量少于此列表中的CPU数量,则作业可以使用这些核心。如果为节点指定了此选项和CoreSpecCount,则会生成错误。此选项无效,除非还配置了cgroup作业限制(即启用了task/cgroup TaskPlugin并在cgroup.conf中设置ConstrainCores=yes)。
-
- Features
- 指示与节点相关的一些特征的逗号分隔字符串列表。目前没有与特征相关的值或计数,节点要么具有特征,要么不具有特征。所需特征可以包含一个数字组件,指示例如处理器速度,但此数字组件将被视为特征字符串的一部分。特征旨在用于通过--constraint参数过滤可运行作业的节点。默认情况下,节点没有特征。另请参见Gres以获得更好的控制,例如类型和计数。使用特征比根据GRES调度更快,但仅限于布尔操作。
注意: 主机列表函数feature{myfeature}扩展到具有指定特征的所有节点。这可以在与slurmctld交互的命令或配置文件中替代或与常规主机列表表达式一起使用。例如:scontrol update node=feature{myfeature} state=resume或PartitionName=p1 Nodes=feature{myfeature}。
-
- Gres
- 节点的通用资源规格的逗号分隔列表。格式为:“<name>[:<type>][:no_consume]:<number>[K|M|G]”。第一个字段是资源名称,与GresType配置参数名称匹配。可选的类型字段可用于标识该通用资源的模型。禁止同时指定未类型化的GRES和具有相同<name>的类型化GRES。可选的no_consume字段允许您指定通用资源在请求时不会消耗的有限数量。no_consume字段是特定于GRES的设置,并适用于GRES,无论指定的类型如何。如果您希望在请求时超额分配GPU,则不应与具有专用插件的GRES一起使用,您可能会对使用“shard” GRES感兴趣。最后一个字段必须指定通用资源的数量。可以使用“K”、“M”、“G”、“T”或“P”的后缀将数字乘以1024、1048576、1073741824等(例如“Gres=gpu:tesla:1,gpu:kepler:1,bandwidth:lustre:no_consume:4G”)。默认情况下,节点没有通用资源,其最大计数为无符号64位整数。另请参见Features以获取布尔标志以使用作业约束过滤节点。
-
- MemSpecLimit
- 为系统使用保留的RealMemory的数量(以兆字节为单位),不供用户分配。必须小于为RealMemory定义的数量。如果配置了task/cgroup插件,并且该插件限制内存分配(即启用了task/cgroup TaskPlugin并在cgroup.conf中设置ConstrainRAMSpace=yes),则slurmd将被分配指定的内存限制。如果使用cgroup/v1,slurmstepd也将被分配指定的内存限制。如果使用cgroup/v2,slurmstepd的消耗完全取决于作业的拓扑。请注意,在SelectTypeParameters中将Memory设置为任何将其视为可消耗资源的选项是使此选项生效所需的。守护进程在耗尽内存分配时不会被终止(即守护进程的内存cgroup的内存不足杀手被禁用)。如果未配置task/cgroup插件,则指定的内存将仅对用户分配不可用。
-
- Port
- Slurm计算节点守护进程slurmd监听的端口号,用于在此特定节点上工作。默认情况下,所有计算节点上的所有slurmd守护进程都有一个单一的端口号,由SlurmdPort配置参数定义。通常不建议使用此选项,除非用于开发或测试目的。如果在节点上执行多个slurmd守护进程,则可以指定一个端口范围。
注意: 在Cray系统上,领域特定IP地址(RSIP)将自动尝试与在8192-60000端口上打开的任何内容进行交互。配置端口以使用配置的SrunPortRange和RSIP的端口范围之外的端口。
-
- Procs
- 见CPUs。
-
- RealMemory
- 节点上实际内存的大小(以兆字节为单位)(例如“2048”)。默认值为1。降低RealMemory以便为操作系统保留一些量而不供作业分配,如果在SelectTypeParameters中未将Memory设置为可消耗资源,则将无法按预期工作。因此,需要启用*_Memory选项以实现该目标。另请参见MemSpecLimit。
-
- Reason
- 识别节点处于“DOWN”、“DRAINED”、“DRAINING”、“FAIL”或“FAILING”状态的原因。使用引号括起多个单词的原因。
-
- RestrictedCoresPerGPU
- 每个GPU限制的核心数量,仅供GPU使用。如果作业不请求GPU,则将无法访问这些核心。
注意: 在重叠插槽上配置多个GPU类型可能会导致在请求不指定类型的GPU时分配错误的GPU类型和限制核心对。
-
- Sockets
- 节点上的物理处理器插槽/芯片数量(例如“2”)。如果省略Sockets,则将根据CPUs、CoresPerSocket和ThreadsPerCore推断。注意: 如果您有多核处理器,您可能需要指定这些参数。Sockets和SocketsPerBoard是互斥的。如果在使用Boards时指定Sockets,则Sockets被解释为SocketsPerBoard,而不是总插槽数。默认值为1。
-
- SocketsPerBoard
- 基板上的物理处理器插槽/芯片数量。Sockets和SocketsPerBoard是互斥的。默认值为1。
-
- State
- 节点在启动用户作业时的状态。可接受的值为CLOUD、DOWN、DRAIN、FAIL、FAILING、FUTURE和UNKNOWN。节点状态BUSY和IDLE不应在节点配置中指定,而应将节点状态设置为UNKNOWN。将节点状态设置为UNKNOWN将导致节点状态被设置为BUSY、IDLE或根据恢复的系统状态信息设置为其他适当状态。默认值为UNKNOWN。另请参见下面的DownNodes参数。
-
-
- CLOUD
- 指示节点存在于云中。其初始状态将被视为关闭。节点在从Slurm的状态保存文件恢复其状态或slurmd守护进程在计算节点上启动后将可用。
-
- DOWN
- 指示节点失败并且无法分配工作。
-
- DRAIN
- 指示节点无法分配工作。
-
- FAIL
- 指示节点预计将很快失败,没有作业分配给它,并且不会分配给任何新作业。
-
- FAILING
- 指示节点预计将很快失败,分配给它一个或多个作业,但不会分配给任何新作业。
-
- FUTURE
- 指示节点为未来使用而定义,并且在Slurm守护进程启动时不需要存在。这些节点可以通过使用scontrol命令更新节点状态而简单地变为可用,而无需重新启动slurmctld守护进程。在这些节点变为可用后,改变它们在slurm.conf文件中的状态。在这些节点变为可用之前,使用任何Slurm命令将无法看到它们,也不会尝试与它们联系。FUTURE节点在重启时保留非FUTURE状态。使用scontrol将节点放回FUTURE状态。
-
- UNKNOWN
- 指示节点的状态未定义,但将在该节点的slurmd守护进程注册时建立(设置为BUSY或IDLE)。UNKNOWN是默认状态。
-
默认值为1。
注意: 节点权重首先在当前可用节点中考虑。例如,POWERED_DOWN和POWERING_UP节点的较低权重将在启动的IDLE节点之前不会被评估。
DOWN节点配置
DownNodes=参数允许您将某些节点标记为DOWN、DRAIN、FAIL、FAILING或FUTURE状态,而不更改在NodeName=规范下列出的永久配置。
- DownNodes
- 来自NodeName=规范的任何节点名称或节点名称列表。
-
- Reason
- 识别节点处于DOWN、DRAIN、FAIL、FAILING或FUTURE状态的原因。使用引号括起多个单词的原因。
-
- State
- 节点在启动用户作业时的状态。可接受的值为DOWN、DRAIN、FAIL、FAILING和FUTURE。有关这些状态的更多信息,请参见上面State部分的描述。默认值为DOWN。
-
NODESET配置
nodeset配置允许您为特定节点集定义名称,这可以简化分区配置部分,特别是对于异构或公寓式系统。每个nodeset可以通过显式节点列表和/或通过特定配置特征过滤节点来定义。如果同时使用Feature=和Nodes=,则nodeset将是两个子集的并集。请注意,nodeset目前仅用于简化分区定义,无法在分区配置之外使用。
分区配置
分区配置允许您为不同的节点组(或分区)建立不同的作业限制或访问控制。节点可以在多个分区中,使分区作为通用队列。例如,可以将相同的节点集放入两个不同的分区,每个分区具有不同的约束(时间限制、作业大小、允许使用该分区的组等)。作业在单个分区内分配资源。可以通过记录指定默认值,其中PartitionName为“DEFAULT”。默认条目值仅适用于配置文件中其后面的行,并且可以通过多个条目多次重置默认值,其中“PartitionName=DEFAULT”。“PartitionName=”规范必须放在描述分区配置的每一行上。每一行中PartitionName为“DEFAULT”的行将替换或添加到先前的默认值,并且不会重新初始化默认值。单个分区名称不能在多行中作为PartitionName值出现(重复的分区名称记录将被忽略)。如果正在使用的分区从配置中删除,并且slurm重新启动或重新配置(scontrol reconfigure),则使用该分区的作业将被取消。 注意: 将每个分区的所有参数放在单行上。每行的分区配置信息应表示不同的分区。分区配置文件包含以下信息:
- AllocNodes
- 用户可以在分区中提交作业的节点的逗号分隔列表。节点名称可以使用上面描述的节点范围表达式语法指定。默认值为“ALL”。
-
- AllowAccounts
- 可以在分区中执行作业的帐户的逗号分隔列表。默认值为“ALL”。该列表是分层的,意味着子帐户会自动包含。 注意: 如果使用AllowAccounts,则不会强制执行DenyAccounts。另请参见DenyAccounts。
-
- AllowGroups
- 可以在此分区中执行作业的组名称的逗号分隔列表。如果AllowGroups与用户关联的组至少有一个,则用户将被允许向此分区提交作业。以用户root或用户SlurmUser身份执行的作业将被允许使用任何分区,而不管AllowGroups的值。此外,Slurm管理员或操作员将能够查看任何分区,而不管AllowGroups的值。如果用户root尝试以其他用户身份执行作业(例如,使用srun的--uid选项),则该作业将受AllowGroups的约束,就好像是由该用户提交的。默认情况下,AllowGroups未设置,这意味着所有组都被允许使用此分区。特殊值'ALL'等同于此。不是指定组成员的用户将默认看不到有关此分区的信息。然而,这不应被视为安全机制,因为如果用户请求有关分区或特定作业的详细信息,将返回作业信息。请参见PrivateData参数以限制对作业信息的访问。 注意: 出于性能原因,Slurm维护允许使用每个分区的用户ID列表,并在作业提交时进行检查。此用户ID列表在slurmctld守护进程重新启动、重新配置(例如“scontrol reconfig”)或分区的AllowGroups值重置时更新,即使其值未更改(例如“scontrol update PartitionName=name AllowGroups=group”)。要更改用户对分区的访问,必须同时更改其组成员资格,并使用上述方法之一更改Slurm的内部用户ID列表。
-
- AllowQos
- 可以在分区中执行作业的Qos的逗号分隔列表。以用户root身份执行的作业可以使用任何分区,而不考虑AllowQos的值。默认值为“ALL”。注意: 如果使用AllowQos,则不会强制执行DenyQos。另请参见DenyQos。
-
- Alternate
- 如果此分区的状态为“DRAIN”或“INACTIVE”,则使用的备用分区名称。
-
- CpuBind
- 如果作业步骤请求未指定控制任务如何绑定到分配的CPU的选项(通过使用--cpu-bind),并且分配给作业的所有节点的CpuBind选项不同,则分区的CpuBind选项将控制任务如何绑定到分配的资源。TaskPluginParam将作为最后的手段使用,默认情况下不进行绑定。CpuBind的支持值为none、socket、ldom(NUMA)、core和thread。
-
- Default
- 如果设置此关键字,则未指定分区的作业将使用此分区。可能的值为“YES”和“NO”。默认值为“NO”。
-
- DefaultTime
- 未指定值的作业使用的运行时间限制。如果未设置,则将使用MaxTime。格式与MaxTime相同。
-
- DefCpuPerGPU
- 每个分配的GPU分配的CPU的默认数量。此值仅在作业未指定--cpus-per-task和--cpus-per-gpu时使用。
-
- DefMemPerCPU
- 每个分配的CPU可用的默认实际内存大小(以兆字节为单位)。用于避免内存过度订阅和导致分页。DefMemPerCPU通常在将单个处理器分配给作业时使用(SelectType=select/cons_tres)。如果未设置,将使用整个集群的DefMemPerCPU值。另请参见DefMemPerGPU、DefMemPerNode和MaxMemPerCPU。DefMemPerCPU、DefMemPerGPU和DefMemPerNode是互斥的。
-
- DefMemPerGPU
- 每个分配的GPU可用的默认实际内存大小(以兆字节为单位)。请注意,系统将尽力预测将使用哪些GPU,但这可能会在作业提交和开始时间之间发生变化,从而导致MaxMemPerNode在异构作业中可能无法按预期工作。另请参见DefMemPerCPU、DefMemPerNode和MaxMemPerCPU。DefMemPerCPU、DefMemPerGPU和DefMemPerNode是互斥的。
-
- DefMemPerNode
- 每个分配的节点可用的默认实际内存大小(以兆字节为单位)。用于避免内存过度订阅和导致分页。DefMemPerNode通常在整个节点分配给作业时使用(SelectType=select/linear)并且资源被过度订阅(OverSubscribe=yes或OverSubscribe=force)。如果未设置,将使用整个集群的DefMemPerNode值。另请参见DefMemPerCPU、DefMemPerGPU和MaxMemPerCPU。DefMemPerCPU、DefMemPerGPU和DefMemPerNode是互斥的。
-
- DenyAccounts
- 不允许在该分区中执行作业的账户的以逗号分隔的列表。默认情况下,没有账户被拒绝访问。此列表是分层的,意味着子账户会自动包含在内。注意:如果使用AllowAccounts,则不会强制执行DenyAccounts。另请参见AllowAccounts。
-
- DenyQos
- 不允许在该分区中执行作业的Qos的以逗号分隔的列表。默认情况下,没有QOS被拒绝访问。注意:如果使用AllowQos,则不会强制执行DenyQos。另请参见AllowQos。
-
- DisableRootJobs
- 如果设置为“YES”,则用户root将被禁止在此分区上运行任何作业。默认值将是分区规范外设置的DisableRootJobs的值(“NO”,允许用户root执行作业)。
-
- ExclusiveTopo
- 如果设置为“YES”,则在单个拓扑段上只能运行一个作业。此功能也可以通过使用--exclusive=topo选项按作业基础使用。
-
- ExclusiveUser
- 如果设置为“YES”,则节点将被独占分配给用户。可以为同一用户运行多个作业,但一次只能有一个用户处于活动状态。此功能也可以通过使用--exclusive=user选项按作业基础使用。
-
- GraceTime
- 指定以秒为单位的抢占宽限时间,以延长被选中的作业的抢占时间。此参数仅在PreemptType=partition_prio时生效。默认值为零,不允许在此分区上有抢占宽限时间。一旦作业被选中进行抢占,其结束时间设置为当前时间加上GraceTime。作业的任务会立即发送SIGCONT和SIGTERM信号,以通知其即将终止。然后在达到其新结束时间时,发送SIGCONT、SIGTERM和SIGKILL信号序列。第二组信号将同时发送到任务和包含的批处理脚本(如果适用)。另请参见全局KillWait配置参数。
注意:此参数不适用于PreemptMode=SUSPEND。有关在使用PreemptMode=SUSPEND时设置抢占宽限时间的信息,请参见PreemptParameters=suspend_grace_time。 -
- Hidden
- 指定分区及其作业是否默认隐藏。隐藏的分区默认情况下不会通过Slurm API或命令报告。可能的值为“YES”和“NO”。默认值为“NO”。请注意,用户因AllowGroups参数而缺乏访问权限的分区也将默认隐藏。
-
- LLN
- 将资源调度到负载最轻的节点(基于空闲CPU的数量)。这通常仅建议在具有串行作业的环境中使用,因为空闲资源往往高度碎片化,导致并行作业分布在多个节点上。请注意,节点Weight优先于每个节点上的空闲资源数量。另请参见SelectTypeParameters配置参数CR_LLN以在每个分区中使用负载最轻的节点。
-
- MaxCPUsPerNode
- 此分区中所有作业可用的任何节点上的最大CPU数量。这对于调度GPU特别有用。例如,一个节点可以与两个Slurm分区(例如“cpu”和“gpu”)相关联,而分区/队列“cpu”可以仅限制节点CPU的一个子集,从而确保一个或多个CPU可用于“gpu”分区/队列中的作业。另请参见MaxCPUsPerSocket。
-
- MaxCPUsPerSocket
- 此分区中所有作业可用的任何节点上的最大CPU数量。这对于调度GPU特别有用。另请参见MaxCPUsPerNode。
-
- MaxMemPerCPU
- 每个分配的CPU可用的最大实际内存大小(以兆字节为单位)。用于避免内存过度订阅和导致分页。MaxMemPerCPU通常在将单个处理器分配给作业时使用(SelectType=select/cons_tres)。如果未设置,将使用整个集群的MaxMemPerCPU值。另请参见DefMemPerCPU和MaxMemPerNode。MaxMemPerCPU和MaxMemPerNode是互斥的。
-
- MaxMemPerNode
- 在作业分配中每个分配节点可用的最大实际内存大小(以兆字节为单位)。用于避免内存过度订阅和导致分页。MaxMemPerNode通常在整个节点分配给作业时使用(SelectType=select/linear)并且资源被过度订阅(OverSubscribe=yes或OverSubscribe=force)。如果未设置,将使用整个集群的MaxMemPerNode值。另请参见DefMemPerNode和MaxMemPerCPU。MaxMemPerCPU和MaxMemPerNode是互斥的。
-
- MaxNodes
- 可以分配给任何单个作业的最大节点数。默认值为“UNLIMITED”,在内部表示为-1。
-
- MaxTime
- 作业的最大运行时间限制。格式为分钟、分钟:秒、小时:分钟:秒、天-小时、天-小时:分钟、天-小时:分钟:秒或“UNLIMITED”。时间分辨率为一分钟,秒值向上舍入到下一个分钟。作业的TimeLimit可以由root、SlurmUser或操作员在作业提交后更新为高于配置的MaxTime的值。
-
- MinNodes
- 可以分配给任何单个作业的最小节点数。默认值为0。
-
- Nodes
- 与此分区关联的节点或节点集的以逗号分隔的列表。节点名称可以使用上述描述的节点范围表达式语法指定。如果希望分区存在但没有资源(可能是临时的),可以使用空的节点列表(即Nodes="")。值为“ALL”映射到集群中配置的所有节点。
-
- OverSubscribe
- 控制该分区在每个资源(节点、插槽或核心,具体取决于SelectTypeParameters的值)上同时执行多个作业的能力。如果资源要被过度订阅,避免内存过度订阅非常重要。SelectTypeParameters应配置为将内存视为可消耗资源,并且在作业分配时应使用--mem选项。资源共享通常仅在使用帮派调度(PreemptMode=suspend,gang)时才有用。OverSubscribe的可能值为“EXCLUSIVE”、“FORCE”、“YES”和“NO”。请注意,“YES”或“FORCE”的值可能会对有许多正在运行的作业的系统的性能产生负面影响。默认值为“NO”。有关更多信息,请参见以下网页:
cons_tres
cons_tres_share
gang_scheduling
preempt -
-
- EXCLUSIVE
- 将整个节点分配给作业,即使配置了SelectType=select/cons_tres。在OverSubscribe=EXCLUSIVE的分区中运行的作业将独占访问所有分配的节点。这些作业将分配所有CPU和GRES,但仅分配它们请求的内存。这样设计是为了支持帮派调度,因为挂起的作业仍然驻留在内存中。要请求节点上的所有内存,请在提交时使用--mem=0。
-
- FORCE
- 使分区中的所有资源(除了GRES)可用于过度订阅,而不允许用户禁用它。后面可以跟冒号和正在运行或挂起状态的最大作业数。例如OverSubscribe=FORCE:4使每个节点、插槽或核心可以以四种方式过度订阅每个资源。仅建议用于使用PreemptMode=suspend,gang的系统。
注意:OverSubscribe=FORCE:1是一个特殊情况,不完全等同于OverSubscribe=NO。OverSubscribe=FORCE:1禁用同一分区中资源的常规过度订阅,但仍允许由于抢占或在具有相同PriorityTier的重叠分区中进行过度订阅。设置OverSubscribe=NO将防止在所有情况下发生过度订阅。
注意:如果使用PreemptType=preempt/qos,可以为FORCE指定大于1的值。例如,OverSubscribe=FORCE:2将允许每个资源通常有两个作业,但只有在基于QOS的抢占情况下才能启动第三个作业。
注意:如果在slurm.conf中将OverSubscribe配置为FORCE或YES,并且系统未配置为使用抢占(PreemptMode=OFF),则会计可能会轻易增长到超过实际利用率的值。在此类系统上,可能会在slurmdbd日志中收到错误消息:“我们分配的时间超过了可能的时间。”
-
- YES
- 使分区中的所有资源(除了GRES)在作业请求时可用于共享。资源仅在用户在作业提交时明确请求“--oversubscribe”选项时才会被过度订阅。后面可以跟冒号和正在运行或挂起状态的最大作业数。例如“OverSubscribe=YES:4”使每个节点、插槽或核心可以同时执行最多四个作业。仅建议用于运行帮派调度的系统(PreemptMode=suspend,gang)。
-
- NO
- 所选资源分配给单个作业。没有资源将分配给多个作业。
注意:即使您使用PreemptMode=suspend,gang,设置OverSubscribe=NO将禁用该分区上的抢占。如果您希望禁用常规过度订阅,但仍允许因抢占而挂起,则使用OverSubscribe=FORCE:1。
-
注意:以下情况将导致从COMPLETING转换为IDLE:
完成所有正在运行的作业而没有分配其他作业。
ExclusiveUser=YES,并且在所有正在运行的作业完成后,但在分配另一个用户的作业之前。
OverSubscribe=EXCLUSIVE,并且在运行作业完成后但在分配另一个作业之前。
注意:当PowerDownOnIdle设置为NO时,节点仍然会在空闲 另请参见SuspendTime。
注意:出于性能原因,回填调度程序为作业保留整个节点,而不是部分节点。如果在回填调度期间,作业抢占一个或多个其他作业,则这些被抢占作业的整个节点将为抢占作业保留,即使抢占作业请求的资源少于此。即使其他作业可以适应这些节点,这些保留的节点在该回填周期内对其他作业不可用。因此,作业在单个回填迭代期间可能会抢占比它们请求的更多资源。
注意:帮派调度在每个分区中独立执行,因此,如果您只想通过OverSubscribe进行时间切片,而不进行任何抢占,则不建议配置具有重叠节点的分区。另一方面,如果您希望使用PreemptType=preempt/partition_prio允许来自更高PriorityTier分区的作业挂起来自较低PriorityTier分区的作业以在释放的资源上运行,则需要重叠分区,并且PreemptMode=SUSPEND,GANG以使用帮派调度程序恢复挂起的作业。在任何情况下,不会在不同分区之间进行时间切片。
如果被抢占的作业和抢占作业位于不同的分区,则被抢占的作业将保持挂起,直到抢占作业结束。
GANG选项用于启用帮派调度,而不管是否启用了抢占(即与PreemptType设置无关)。它可以与PreemptMode设置一起指定,两个选项用逗号分隔(例如PreemptMode=SUSPEND,GANG)。
有关更多详细信息,请参见<preempt>和<gang_scheduling>。
注意:对于异构作业被视为抢占,所有组件必须有资格进行抢占。当异构作业被抢占时,具有最高顺序的抢占模式(SUSPEND(最高)、REQUEUE、CANCEL(最低))的作业的第一个识别组件将用于设置所有组件的抢占模式。异构作业的GraceTime和用户警告信号保持唯一。异构作业被排除在帮派调度操作之外。
注意:异构作业被排除在帮派调度操作之外。
注意:由于帮派调度在每个分区中独立执行,如果使用PreemptType=preempt/partition_prio,则更高PriorityTier分区中的作业将挂起较低PriorityTier分区中的作业以在释放的资源上运行。只有当抢占作业结束时,挂起的作业才会被帮派调度程序恢复。
注意:挂起的作业将不会释放GRES。优先级更高的作业将无法抢占以获得对GRES的访问。
计费权重以<TRES类型>=<TRES计费权重>对的形式指定。
任何TRES类型都可以用于计费。请注意,内存和突发缓冲区的基本单位为兆字节。
默认情况下,TRES的计费是所有TRES类型的总和乘以其相应的计费权重。
资源的加权金额可以通过在计费权重后添加K、M、G、T或P后缀进行调整。例如,在分配8GB的作业上,内存权重为“mem=.25”将被计费2048(8192MB *.25)单位。相同作业上的内存权重为“mem=.25G”将被计费2(8192MB * (.25/1024))单位。
允许负值。
当作业在配置了TRESBillingWeights="CPU=1.0,Mem=0.25G,GRES/gpu=2.0,license/licA=1.5"的分区中分配1个CPU和8GB内存时,可计费的TRES将为:(1*1.0)+(8*0.25)+(0*2.0)+(0*1.5)= 3.0。
如果配置了PriorityFlags=MAX_TRES,则可计费的TRES计算为节点上各个TRES的最大值(例如cpus、mem、gres)加上所有全球TRES的总和(例如许可证)。使用上述相同的示例,可计费的TRES将为MAX(1*1.0、8*0.25、0*2.0)+(0*1.5)= 2.0。
如果未定义TRESBillingWeights,则作业将按分配的CPU总数计费。
注意:TRESBillingWeights不会直接影响作业优先级,因为目前不用于作业的大小。如果您希望TRES在作业优先级中发挥作用,请参见PriorityWeightTRES选项。
前置和后置脚本
有多种前置和后置程序选项可在不同的权限和不同的时间执行。最有可能使用的四个选项是:Prolog和Epilog(在每个计算节点上为每个作业执行一次)以及PrologSlurmctld和EpilogSlurmctld(在ControlMachine上为每个作业执行一次)。注意:标准输出和错误消息通常不会被保留。如果您希望保留该信息,请显式将输出和错误消息写入适当的位置。
注意:默认情况下,Prolog脚本仅在首次看到来自新分配的作业步骤时在任何单个节点上运行。它不会在分配被授予时立即运行Prolog。如果在节点上没有运行分配的作业步骤,则将永远不会为该分配运行Prolog。此Prolog行为可以通过PrologFlags参数更改。另一方面,Epilog始终在释放分配时在每个分配的节点上运行。
如果Epilog失败(返回非零退出代码),将导致节点设置为DRAIN状态。如果EpilogSlurmctld失败(返回非零退出代码),这将仅被记录。如果Prolog失败(返回非零退出代码),将导致节点设置为DRAIN状态并且作业被重新排队。作业将处于保持状态,除非在SchedulerParameters中配置了nohold_on_prolog_fail。如果PrologSlurmctld失败(返回非零退出代码),这将导致作业被重新排队以在其他节点上执行(如果可能)。仅批处理作业可以被重新排队。如果PrologSlurmctld失败,交互式作业(salloc和srun)将被取消。如果在运行PrologSlurmctld或EpilogSlurmctld时停止slurmctld,则脚本将被SIGKILL终止。脚本将在slurmctld重新启动时重新启动。
有关作业的信息通过环境变量传递给脚本。除非另有说明,这些环境变量可在上述提到的每个脚本(Prolog、Epilog、PrologSlurmctld和EpilogSlurmctld)中使用。有关环境变量的完整列表,包括在SrunProlog、SrunEpilog、TaskProlog和TaskEpilog中可用的环境变量,请参见前置和后置指南<https://slurm.schedmd.com/prolog_epilog.html>。
- SLURM_ARRAY_JOB_ID
- 如果此作业是作业数组的一部分,则将设置为作业ID。否则将不设置。要引用作业数组的此特定任务,请将SLURM_ARRAY_JOB_ID与SLURM_ARRAY_TASK_ID结合(例如“scontrol update ${SLURM_ARRAY_JOB_ID}_{$SLURM_ARRAY_TASK_ID} ...”);可在PrologSlurmctld、SrunProlog、TaskProlog、EpilogSlurmctld、SrunEpilog和TaskEpilog中使用。
-
- SLURM_ARRAY_TASK_ID
- 如果此作业是作业数组的一部分,则将设置为任务ID。否则将不设置。要引用作业数组的此特定任务,请将SLURM_ARRAY_JOB_ID与SLURM_ARRAY_TASK_ID结合(例如“scontrol update ${SLURM_ARRAY_JOB_ID}_{$SLURM_ARRAY_TASK_ID} ...”);可在PrologSlurmctld、SrunProlog、TaskProlog、EpilogSlurmctld、SrunEpilog和TaskEpilog中使用。
-
- SLURM_ARRAY_TASK_MAX
- 如果此作业是作业数组的一部分,则将设置为最大任务ID。否则将不设置。可在PrologSlurmctld、SrunProlog、TaskProlog、EpilogSlurmctld、SrunEpilog和TaskEpilog中使用。
-
- SLURM_ARRAY_TASK_MIN
- 如果此作业是作业数组的一部分,则将设置为最小任务ID。否则将不设置。可在PrologSlurmctld、SrunProlog、TaskProlog、EpilogSlurmctld、SrunEpilog和TaskEpilog中使用。
-
- SLURM_ARRAY_TASK_STEP
- 如果此作业是作业数组的一部分,则将设置为任务ID的步长。否则将不设置。可在PrologSlurmctld、SrunProlog、TaskProlog、EpilogSlurmctld、SrunEpilog和TaskEpilog中使用。
-
- SLURM_CLUSTER_NAME
- 执行作业的集群名称。可在Prolog、PrologSlurmctld、Epilog和EpilogSlurmctld中使用。
-
- SLURM_CONF
- slurm.conf文件的位置。可在Prolog、SrunProlog、TaskProlog、Epilog、SrunEpilog和TaskEpilog中使用。
-
- SLURMD_NODENAME
- 运行任务的节点名称。在并行作业在多个计算节点上执行的情况下,各个任务将在每个计算节点上设置此环境变量为不同的值。可在Prolog、SrunProlog、TaskProlog、Epilog、SrunEpilog和TaskEpilog中使用。
-
- SLURM_JOB_ACCOUNT
- 用于作业的账户名称。
-
- SLURM_JOB_COMMENT
- 添加到作业的注释。可在Prolog、PrologSlurmctld、Epilog和EpilogSlurmctld中使用。
-
- SLURM_JOB_CONSTRAINTS
- 运行作业所需的特性。可在Prolog、PrologSlurmctld、Epilog和EpilogSlurmctld中使用。
-
- SLURM_JOB_DERIVED_EC
- 所有作业步骤的最高退出代码。可在Epilog和EpilogSlurmctld中使用。
-
- SLURM_JOB_END_TIME
- 作业结束时间的UNIX时间戳。
-
- SLURM_JOB_EXIT_CODE
- 作业脚本(或salloc)的退出代码。该值是由wait()系统调用返回的状态(请参见wait(2))。可在Epilog和EpilogSlurmctld中使用。
-
- SLURM_JOB_EXIT_CODE2
- 作业脚本(或salloc)的退出代码。该值的格式为<exit>:<sig>。第一个数字是退出代码,通常由exit()函数设置。第二个数字是导致进程终止的信号编号(如果它是由信号终止的)。可在Epilog和EpilogSlurmctld中使用。
-
- SLURM_JOB_EXTRA
- 添加到作业的额外字段。可在Prolog、PrologSlurmctld、Epilog和EpilogSlurmctld中使用。
-
- SLURM_JOB_GID
- 作业所有者的组ID。
-
- SLURM_JOB_GPUS
- 作业分配中的GPU的GPU ID(如果有)。可在Prolog、SrunProlog、TaskProlog、Epilog、SrunEpilog和TaskEpilog中使用。
-
- SLURM_JOB_GROUP
- 作业所有者的组名称。可在PrologSlurmctld和EpilogSlurmctld中使用。
-
- SLURM_JOB_ID
- 作业ID。
-
- SLURM_JOBID
- 作业ID。
-
- SLURM_JOB_NAME
- 作业名称。 在 PrologSlurmctld、SrunProlog、TaskProlog、 EpilogSlurmctld、SrunEpilog 和 TaskEpilog 中可用。
-
- SLURM_JOB_NODELIST
- 分配给作业的节点。一个 Slurm 主机列表表达式。 可以使用 "scontrol show hostnames" 将其转换为 单个主机名称的列表。
-
- SLURM_JOB_PARTITION
- 作业运行的分区。
-
- SLURM_JOB_START_TIME
- 作业开始时间的 UNIX 时间戳。
-
- SLURM_JOB_UID
- 作业所有者的用户 ID。
-
- SLURM_JOB_USER
- 作业所有者的用户名。
-
- SLURM_SCRIPT_CONTEXT
- 标识当前正在运行的 epilog 或 prolog 程序。
-
不可终止步骤程序脚本
该程序可用于采取特殊措施清理不可终止的 进程和/或通知系统管理员。 该程序将在触发 UnkillableStepTimeout 的计算节点上以 SlurmdUser(通常是 "root")身份运行。有关不可终止作业步骤的信息通过 环境变量传递给脚本。
- SLURM_JOB_ID
- 作业 ID。
-
- SLURM_STEP_ID
- 作业步骤 ID。请注意,特殊步骤 "batch"、"interactive" 和 "extern" 并不是通过名称报告,而是使用整数步骤 ID 4294967291、4294967290 和 4294967292。
-
网络拓扑
Slurm 能够优化作业分配,以最小化网络争用。 在具有三维互连的系统上使用特殊的 Slurm 逻辑来优化分配。 有关如何配置这些系统的信息可以在 此处的网页上找到:<https://slurm.schedmd.com/>。 对于分层网络,Slurm 需要详细信息 关于节点在网络交换机上的配置。TopologyPlugin 参数控制用于 收集网络拓扑信息的插件。 目前唯一支持的值是 "topology/flat"(在一维拓扑上的最佳匹配逻辑), "topology/tree" 和 "topology/block"(两者根据 topology.conf 或 topology.yaml 文件中的信息确定网络拓扑, 有关更多信息,请参见 "man topology.conf" 和 "man topology.yaml")。 未来的插件可能会直接从网络收集拓扑信息。 拓扑信息是可选的。 如果未提供,Slurm 将执行最佳匹配算法,假设 节点在配置的一维数组中,并且通信 成本与该数组中的节点距离相关。
迁移控制器
如果用于主控制器或备份控制器的集群计算机将 长时间停用,则可能需要迁移它们。 为此,请遵循以下程序:
1. 停止旧控制器和节点上的 Slurm 守护进程。
2. 适当修改 slurm.conf 文件。
3. 将文件从 StateSaveLocation 复制到新控制器,或确保
它们通过共享驱动器对新控制器可访问。
4. 将更新后的 slurm.conf 文件分发到所有节点。
5. 在新控制器和节点上重新启动 Slurm 守护进程。
不应丢失任何待处理作业。任何正在运行的作业将获得 更新的主机信息并正常完成。 确保添加到集群的任何节点都安装了当前的 slurm.conf 文件。
注意: 如果两个节点同时配置为 主控制器(两个节点上 SlurmctldHost 指定 本地主机,并且 slurmctld 守护进程在每个节点上执行), 系统行为将是破坏性的。 如果计算节点的 SlurmctldHost 参数不正确,该节点可能会变得 不可用,但不会造成其他损害。
示例
# # 示例 /etc/slurm.conf 用于 dev[0-25].llnl.gov # 作者:John Doe # 日期:11/06/2001 # SlurmctldHost=dev0(12.34.56.78) # 主服务器 SlurmctldHost=dev1(12.34.56.79) # 备份服务器 # AuthType=auth/munge Epilog=/usr/local/slurm/epilog Prolog=/usr/local/slurm/prolog FirstJobId=65536 InactiveLimit=120 JobCompType=jobcomp/filetxt JobCompLoc=/var/log/slurm/jobcomp KillWait=30 MaxJobCount=10000 MinJobAge=300 PluginDir=/usr/local/lib:/usr/local/slurm/lib ReturnToService=0 SchedulerType=sched/backfill SlurmctldLogFile=/var/log/slurm/slurmctld.log SlurmdLogFile=/var/log/slurm/slurmd.log SlurmctldPort=7002 SlurmdPort=7003 SlurmdSpoolDir=/var/spool/slurmd.spool StateSaveLocation=/var/spool/slurm.state TmpFS=/tmp WaitTime=30 # # 节点配置 # NodeName=DEFAULT CPUs=2 RealMemory=2000 TmpDisk=64000 NodeName=DEFAULT State=UNKNOWN NodeName=dev[0-25] NodeAddr=edev[0-25] Weight=16 # 更新特定 DOWN 节点的记录 DownNodes=dev20 State=DOWN Reason="power,ETA=Dec25" # # 分区配置 # PartitionName=DEFAULT MaxTime=30 MaxNodes=10 State=UP PartitionName=debug Nodes=dev[0-8,18-25] Default=YES PartitionName=batch Nodes=dev[9-17] MinNodes=4 PartitionName=long Nodes=dev[9-17] MaxTime=120 AllowGroups=admin
包含修饰符
可以在指定的路径名中使用 "include" 关键字和修饰符。这些修饰符将根据指定的修饰符替换为集群名称或其他信息。如果包含的文件 不是绝对路径名(即不以斜杠开头),则将在与 slurm.conf 文件相同的目录中搜索。
示例
ClusterName=linux include /home/slurm/etc/%c_config # 上述行解释为 # "include /home/slurm/etc/linux_config"
文件和目录权限
有三类文件: 由 slurmctld 使用的文件必须对用户 SlurmUser 可访问,并且对主控制和备份控制机器可访问。 由 slurmd 使用的文件必须对 root 用户可访问,并且 从每个计算节点可访问。 一些文件需要在所有登录和 计算节点上对普通用户可访问。 虽然下面列出了许多文件和目录,但大多数文件在大多数配置中不会使用。
- Epilog
- 必须对 root 用户可执行。 建议所有用户可读该文件。 该文件必须在每个计算节点上存在。
-
- EpilogSlurmctld
- 必须对用户 SlurmUser 可执行。 建议所有用户可读该文件。 该文件必须对主控制和备份控制机器可访问。
-
- HealthCheckProgram
- 必须对 root 用户可执行。 建议所有用户可读该文件。 该文件必须在每个计算节点上存在。
-
- JobCompLoc
- 如果指定为文件,则必须对用户 SlurmUser 可写。 该文件必须对主控制和备份控制机器可访问。
-
- MailProg
- 必须对用户 SlurmUser 可执行。 普通用户不得写入。 该文件必须对主控制和备份控制机器可访问。
-
- Prolog
- 必须对 root 用户可执行。 建议所有用户可读该文件。 该文件必须在每个计算节点上存在。
-
- PrologSlurmctld
- 必须对用户 SlurmUser 可执行。 建议所有用户可读该文件。 该文件必须对主控制和备份控制机器可访问。
-
- ResumeProgram
- 必须对用户 SlurmUser 可执行。 该文件必须对主控制和备份控制机器可访问。
-
- slurm.conf
- 在所有节点上对所有用户可读。 普通用户不得写入。
-
- SlurmctldLogFile
- 必须对用户 SlurmUser 可写。 该文件必须对主控制和备份控制机器可访问。
-
- SlurmctldPidFile
- 必须对 root 用户可写。 最好对 SlurmUser 可写和可删除。 该文件必须对主控制和备份控制机器可访问。
-
- SlurmdLogFile
- 必须对 root 用户可写。 每个计算节点上必须存在不同的文件。
-
- SlurmdPidFile
- 必须对 root 用户可写。 每个计算节点上必须存在不同的文件。
-
- SlurmdSpoolDir
- 必须对 root 用户可写。权限必须设置为 755,以便 作业脚本可以从该目录执行。 每个计算节点上必须存在不同的文件。
-
- SrunEpilog
- 必须对所有用户可执行。 该文件必须在每个登录和计算节点上存在。
-
- SrunProlog
- 必须对所有用户可执行。 该文件必须在每个登录和计算节点上存在。
-
- StateSaveLocation
- 必须对用户 SlurmUser 可写。 该文件必须对主控制和备份控制机器可访问。
-
- SuspendProgram
- 必须对用户 SlurmUser 可执行。 该文件必须对主控制和备份控制机器可访问。
-
- TaskEpilog
- 必须对所有用户可执行。 该文件必须在每个计算节点上存在。
-
- TaskProlog
- 必须对所有用户可执行。 该文件必须在每个计算节点上存在。
-
- UnkillableStepProgram
- 必须对用户 SlurmdUser 可执行。 该文件必须对主控制和备份控制机器可访问。
-
日志记录
请注意,虽然 Slurm 守护进程根据需要创建日志文件和其他文件, 但它将缺少父目录视为致命错误。 这会阻止守护进程在关键文件系统未挂载时运行,并将最小化冷启动(在不保留作业的情况下启动)的风险。
日志文件和作业会计文件 可能需要由 "SlurmUser" uid 创建/拥有才能成功 访问。使用 "chown" 和 "chmod" 命令适当地设置所有权 和权限。 有关 Slurm 使用的各种文件和目录的信息,请参见 文件和目录权限 部分。
建议使用 logrotate 实用程序,以确保 各种日志文件不会变得过大。 这也适用于用于会计、 进程跟踪和 slurmdbd 日志的文本文件(如果使用)。
以下是一个示例 logrotate 配置。进行适当的站点修改 并保存为 /etc/logrotate.d/slurm 在所有节点上。 有关更多详细信息,请参见 logrotate 手册页。
## # Slurm 日志轮换配置 ## /var/log/slurm/*.log { compress missingok nocopytruncate nodelaycompress nomail notifempty noolddir rotate 5 sharedscripts size=5M create 640 slurm root postrotate pkill -x --signal SIGUSR2 slurmctld pkill -x --signal SIGUSR2 slurmd pkill -x --signal SIGUSR2 slurmdbd exit 0 endscript }
版权
版权 (C) 2002-2007 加州大学理事会。 在劳伦斯利弗莫尔国家实验室制作(参见免责声明)。版权 (C) 2008-2010 劳伦斯利弗莫尔国家安全。
版权 (C) 2010-2022 SchedMD LLC。
该文件是 Slurm 的一部分,这是一个资源管理程序。 有关详细信息,请参见 <https://slurm.schedmd.com/>。
Slurm 是自由软件;您可以根据 自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;许可证的第 2 版,或(根据您的选择) 任何更高版本。
Slurm 的分发是希望它会有用,但不提供任何 保证;甚至没有适销性或特定用途适用性的隐含保证。有关更多详细信息,请参见 GNU 通用公共许可证。
文件
/etc/slurm.conf另见
cgroup.conf(5), getaddrinfo(3), getrlimit(2), gres.conf(5), group(5), hostname(1), scontrol(1), slurmctld(8), slurmd(8), slurmdbd(8), slurmdbd.conf(5), srun(1), spank(8), syslog(3), topology.conf(5)
索引
该文档由 man2html 使用手册页创建。
时间:2025年7月02日 13:21:55 GMT