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
隐含所有其他可用选项,除了 nojobsnosteps

associations
不允许运行新的作业,除非系统中存在相应的关联。

limits
用户可以根据关联被限制为定义的任何作业大小或运行时间限制。隐含 associations

nojobs
Slurm 将不对系统上的任何作业或步骤进行计费。 隐含 nosteps

nosteps
Slurm 将不对任何已运行的步骤进行计费。

qos
作业将不会被调度,除非指定了有效的 qos。 隐含 associations

safe
只有在作业能够完成时,才会针对具有设置 TRES-分钟限制的关联或 qos 启动作业。如果未设置此选项,只要其使用未达到 TRES-分钟限制,作业将被启动。这可能导致作业被启动但在达到限制时被终止。设置此选项后,即使在作业启动后限制发生变化,导致关联或 qos 违反更新后的限制,作业也不会因限制而被终止。隐含 limitsassociations

wckeys
作业将不会被调度,除非指定了有效的工作负载特征键。隐含 associationsTrackWCKey(一个单独的配置选项)。

AccountingStorageExternalHost
外部 slurmdbd 的以逗号分隔的列表(<host/ip>[:port][,...]),用于注册。如果未给出端口,将使用 AccountingStoragePort

这允许与外部 slurmdbd 注册的集群使用 --cluster/-M 客户端命令选项相互通信。

如果外部 slurmdbd 中不存在该集群,则该集群将添加到外部 slurmdbd。如果外部 slurmdbd 中已经存在非外部集群,则 slurmctld 将忽略注册到外部 slurmdbd。

AccountingStorageHost
承载会计存储数据库的机器名称。 仅在使用 SlurmDBD 的系统中使用,其他情况下被忽略。

AccountingStorageParameters
以逗号分隔的选项列表。
max_step_records=#
每个作业记录在数据库中的步骤数量 - 不包括批处理、外部和交互步骤。

以下以逗号分隔的键值选项用于建立与数据库的安全连接:
SSL_CERT
客户端公钥证书文件的路径名。

SSL_CA
证书颁发机构(CA)证书文件的路径名。

SSL_CAPATH
包含受信任的 SSL CA 证书文件的目录的路径名。

SSL_KEY
客户端私钥文件的路径名。

SSL_CIPHER
SSL 加密的允许密码列表。

AccountingStoragePass
用于访问数据库以存储会计数据的密码。仅用于数据库类型存储插件,其他情况下被忽略。在使用 MUNGE 身份验证的 SlurmDBD(数据库守护进程)中,可以配置为使用专门配置的 MUNGE 守护进程,以在集群之间提供身份验证,而默认的 MUNGE 守护进程提供集群内部的身份验证。在这种情况下,AccountingStoragePass 应指定用于与备用 MUNGE 守护进程通信的命名端口(例如 "/var/run/munge/global.socket.2")。默认值为 NULL。

AccountingStoragePort
会计存储数据库服务器的监听端口。 仅用于数据库类型存储插件,其他情况下被忽略。 默认值为系统构建时建立的 SLURMDBD_PORT。如果未明确指定值,将设置为 6819。 此值必须等于 slurmdbd.conf 文件中的 DbdPort 参数。

AccountingStorageTRES
您希望在集群上跟踪的资源的以逗号分隔的列表。 这些是 sbatch/srun 作业提交时请求的资源。目前包括任何 GRES、BB(突发缓冲区)或许可证,以及 CPU、内存、节点、能量、FS/[磁盘|Lustre]、IC/OFED、页面和 VMem。默认情况下,计费、CPU、能量、内存、节点、FS/磁盘、页面和 VMem 会被跟踪。这些默认 TRES 不能被禁用,但只能附加。 AccountingStorageTRES=gres/craynetwork,license/iop1 将跟踪计费、cpu、能量、内存、节点、fs/磁盘、页面和 vmem,以及名为 craynetwork 的 gres 和名为 iop1 的许可证。每当这些资源在集群上使用时,它们都会被记录。TRES 会在 slurmctld 启动时自动设置在数据库中。

如果跟踪多种不同类型的 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。

AccountingStorageType
会计存储机制类型。默认未设置,表示不维护会计记录。

当前选项包括:

accounting_storage/slurmdbd
会计记录将写入 SlurmDBD,该数据库管理一个底层的 MySQL 数据库。有关更多信息,请参见 "man slurmdbd"。

AccountingStoreFlags
以逗号分隔的列表,用于修改 slurmctld 发送到会计数据库的字段。
当前选项包括:

job_comment
在发送到会计存储数据库的作业完成消息中包含作业的注释字段。 请注意,AdminComment 和 SystemComment 始终记录在数据库中。

job_env
在发送到会计存储数据库的作业启动消息中包含作业提交时使用的批处理作业环境变量。

job_extra
在发送到会计存储数据库的作业完成消息中包含作业的额外字段。

job_script
在发送到会计存储数据库的作业启动消息中包含作业的批处理脚本。

no_stdio
在作业或步骤启动时记录数据到数据库时排除 stdio 路径。作业和步骤的 StdOut、StdErr 和 StdIn 数据库字段将为空。

AcctGatherNodeFreq
AcctGather 插件的节点会计采样间隔。 对于 AcctGather 插件值为 none,此参数被忽略。 对于所有其他值,此参数是节点会计样本之间的秒数。对于 acct_gather_energy/rapl 插件,设置小于 300 的值,因为计数器可能会超出此速率。 默认值为零。此值禁用节点的会计采样。注意:作业的会计采样间隔由 JobAcctGatherFrequency 的值决定。

AcctGatherEnergyType
标识用于能耗会计的插件。 jobacct_gather 插件和 slurmd 守护进程调用此插件以收集作业和节点的能耗数据。能耗数据的收集发生在节点级别,因此仅在独占作业分配的情况下,能耗测量将反映作业的实际消耗。在作业之间共享节点的情况下,通过 sstat 或 sacct 报告的每个作业的能耗将不会反映作业的实际能耗。默认情况下不收集任何数据。

目前可配置的值包括:

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)收集能耗数据。

AcctGatherInterconnectType
标识用于互连网络流量会计的插件。 jobacct_gather 插件和 slurmd 守护进程调用此插件以收集作业和节点的网络流量数据。 网络流量数据的收集发生在节点级别,因此仅在独占作业分配的情况下,收集的值将反映作业的真实流量。在作业之间共享节点的情况下,通过 sstat 或 sacct 报告的每个作业的网络流量将不会反映作业的真实网络流量。

目前可配置的值包括:

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

AcctGatherFilesystemType
标识用于文件系统流量会计的插件。 jobacct_gather 插件和 slurmd 守护进程调用此插件以收集作业和节点的文件系统流量数据。 文件系统流量数据的收集发生在节点级别,因此仅在独占作业分配的情况下,收集的值将反映作业的真实流量。在作业之间共享节点的情况下,通过 sstat 或 sacct 报告的每个作业的文件系统流量将不会反映作业的真实文件系统流量。

目前可配置的值包括:

acct_gather_filesystem/lustre
Lustre 文件系统流量数据是从 /proc/fs/lustre/ 中的计数器收集的。 为了对每个作业的 lustre 流量进行计费,请将 "fs/lustre" TRES 添加到 AccountingStorageTRES

AcctGatherProfileType
标识用于详细作业分析的插件。 jobacct_gather 插件和 slurmd 守护进程调用此插件以收集详细数据,例如 I/O 计数、内存使用或作业和节点的能耗。此插件中有接口用于在步骤开始和完成、任务开始和完成以及会计收集频率时收集数据。节点级别收集的数据仅在独占作业分配的情况下与作业相关。

目前可配置的值包括:

acct_gather_profile/hdf5
启用 HDF5 插件。配置文件存储目录和收集的值在 acct_gather.conf 文件中配置。

acct_gather_profile/influxdb
启用 influxdb 插件。配置文件中配置 influxdb 实例主机、端口、数据库、保留策略和收集的值。

AllowSpecResourcesUsage
如果设置为 "YES",Slurm 允许单个作业覆盖节点的配置 CoreSpecCount 值。为了使作业利用此功能,必须指定命令行选项 --core-spec。此选项的默认值为 Cray 系统为 "YES",其他系统类型为 "NO"。

AuthAltTypes
逗号分隔的替代身份验证插件列表,slurmctld 将允许进行通信。目前可接受的值包括 auth/jwt

注意: 如果未使用 AuthAltParameters 指定 jwt_hs256.key 的路径,则 slurmctld 将默认查找该路径在 StateSaveLocation 中。 jwt_hs256.key 应仅对 SlurmUser 和 root 可见。建议不要将 jwt_hs256.key 放置在运行 slurmctldslurmdbd 的机器以外的任何节点上。 auth/jwt 可以通过存在 SLURM_JWT 环境变量来激活。当激活时,它将覆盖默认的 AuthType

AuthAltParameters
用于定义替代身份验证插件选项。多个选项可以用逗号分隔。
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 之外生成的令牌兼容。(此字段也可能称为授权。) 默认:(禁用)

AuthInfo
用于 Slurm 守护进程(slurmctld 和 slurmd)与 Slurm 客户端之间通信身份验证的附加信息。此选项的解释特定于配置的 AuthType。 可以在以逗号分隔的列表中指定多个选项。 如果未指定,将使用默认身份验证信息。
cred_expire
默认作业步骤凭证生命周期,单位为秒(例如 "cred_expire=1200")。 必须足够长,以加载用户环境、运行前置程序、处理 slurmd 被分页出内存等。 这还控制重新排队的作业必须等待多长时间才能再次启动。 默认值为 120 秒。

socket
要使用的 MUNGE 守护进程套接字的路径名(例如 "socket=/var/run/munge/munge.socket.2")。 默认值为 "/var/run/munge/munge.socket.2"。 由 auth/mungecred/munge 使用。

ttl
凭证生命周期,单位为秒(例如 "ttl=300")。 默认值取决于使用的 AuthType。 对于 auth/munge,默认值取决于 MUNGE 安装,但通常为 300 秒。对于 auth/slurm,默认值为 60 秒。对于 auth/jwt,默认值为 1800 秒。

use_client_ids
允许 auth/slurm 插件在不依赖于 LDAP 或操作系统的用户信息的情况下对用户进行身份验证。

AuthType
Slurm 组件之间通信的身份验证方法。 在更改 AuthType 的值之前,必须终止所有 Slurm 守护进程和命令,然后重新启动。 对该值的更改将中断未完成的作业步骤并阻止它们完成。 目前可接受的值:
auth/munge
表示将使用 MUNGE(默认)。 (有关更多信息,请参见 "https://dun.github.io/munge/")。

auth/slurm
使用 Slurm 的内部身份验证插件。

BackupAddr
已弃用选项,请参见 SlurmctldHost

BackupController
已弃用选项,请参见 SlurmctldHost

BatchStartTimeout
批处理作业被允许启动的最大时间(以秒为单位),在此时间之前被视为缺失并释放分配。默认值为 10(秒)。如果执行 Prolog、加载用户环境变量或 slurmd 守护进程被分页出内存需要更多时间,则可能需要更大的值。

注意: 对作业成功启动的测试仅在计算节点上的 Slurm 守护进程向头节点上的 slurmctld 守护进程注册状态时执行,这种情况发生得相对较少。 因此,如果作业的启动时间超过 BatchStartTimeout,作业不一定会被终止。 此配置参数也适用于启动任务,避免因长时间运行的 Prolog 脚本而中止 srun 命令。

BcastExclude
在通过 sbcastsrun --bcast 自动检测和广播可执行共享对象依赖项时要排除的绝对目录路径的以逗号分隔的列表。关键字 "none" 可用于指示不应排除任何目录路径。默认值为 "/lib,/usr/lib,/lib64,/usr/lib64"。此选项可以通过 sbcast --excludesrun --bcast-exclude 被覆盖。

BcastParameters
控制 sbcast 和 srun --bcast 行为。可以在以逗号分隔的列表中指定多个选项。 支持的值包括:
DestDir=
要广播到分配的计算节点的文件的目标目录。 默认值为当前工作目录,或如果设置则为 srun 的 --chdir。

Compression=
指定要使用的默认文件压缩库。 支持的值为 "lz4" 和 "none"。 sbcast --compress 选项的默认值为 "lz4",否则为 "none"。 某些压缩库可能在某些系统上不可用。

send_libs
如果设置,尝试自动检测并广播可执行文件的共享对象依赖项到分配的计算节点。文件被放置在与可执行文件并排的目录中。仅对于 srunLD_LIBRARY_PATH 会自动更新以包含此缓存目录。 这可以通过 sbcastsrun --send-libs 选项进行覆盖。默认情况下,此选项被禁用。

BurstBufferType
用于管理突发缓冲区的插件。默认未设置。 目前可接受的值包括:
burst_buffer/datawarp
使用 Cray DataWarp API 提供突发缓冲区功能。

burst_buffer/lua
此插件提供了一个 API 的钩子,该 API 由 Lua 脚本定义。此插件旨在为系统管理员提供在作业生命周期的不同阶段执行任何任务(不仅仅是文件分阶段)的方法。

CertgenParameters
以逗号分隔的选项,标识 certgen 插件选项。 支持的值包括:
certgen_script=
生成自签名 TLS 证书的可执行脚本的绝对路径。 由 keygen_script 生成的私钥通过 stdin 传递,且仅应将证书 PEM 文件打印到 stdout。成功时必须返回 0,出错时返回非零。

keygen_script=
生成稍后用于生成自签名证书的私钥的可执行脚本的绝对路径。仅应将私钥 PEM 文件打印到 stdout,该文件稍后将作为 stdin 发送到 certgen_script。成功时必须返回 0,出错时返回非零。

CertgenType
指定将使用的 certgen 插件。 目前可接受的值包括:
certgen/script
使用内置/配置的脚本生成证书密钥对。

CertmgrParameters
用于定义 certmgr 插件的参数。
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 运行。

CertmgrType
用于动态更新 slurmd/sackd 的 TLS 证书的插件。
certmgr/script
使用脚本钩子来实现证书管理。有关如何设置这些脚本的详细信息,请参见 CertmgrParameters

CliFilterPlugins
以逗号分隔的命令行接口选项过滤/修改插件列表。指定的插件将按列出的顺序执行。默认情况下不使用 cli_filter 插件。目前可接受的值包括:
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"。

ClusterName
此 Slurm 管理的集群在计费数据库中所知的名称。这是区分多个集群向同一数据库报告的计费记录所必需的。由于某些数据库的限制,名称中的任何大写字母将被静默映射为小写。为了避免混淆,建议名称使用小写。集群名称必须为 40 个字符或更少,以符合 MySQL/MariaDB 表名的最大长度限制。

CommunicationParameters
以逗号分隔的选项,标识通信选项。
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。

CompleteWait
当任何作业处于 COMPLETING 状态时,等待的时间(以秒为单位),在此之后才会调度任何其他作业。这是为了尝试保持最近使用的节点上的作业,以防止资源碎片化。如果设置为零,待处理作业将尽快启动。由于 COMPLETING 作业的资源在每个节点的 Epilog 完成后立即释放以供其他作业使用,这可能导致资源分配非常碎片化。为了提供作业最小的响应时间,建议设置为零(不等待)。为了最小化资源的碎片化,建议设置为等于 KillWait 加二。在这种情况下,将 KillWait 设置为小值可能是有益的。CompleteWait 的默认值为零秒。该值不得超过 65533。

注意:设置 reduce_completing_frag 会影响 CompleteWait 的行为。

ControlAddr
已弃用选项,请参见 SlurmctldHost

ControlMachine
已弃用选项,请参见 SlurmctldHost

CpuFreqDef
运行作业步骤时使用的默认 CPU 调节器,如果未通过 --cpu-freq 选项显式设置。当前可接受的值包括以下调节器之一:
Conservative
尝试使用 Conservative CPU 调节器

OnDemand
尝试使用 OnDemand CPU 调节器

Performance
尝试使用 Performance CPU 调节器

PowerSave
尝试使用 PowerSave CPU 调节器
默认:使用系统默认。未指定 --cpu-freq 选项时,不会尝试设置调节器。

CpuFreqGovernors
允许使用 salloc、sbatch 或 srun 选项 --cpu-freq 设置的 CPU 频率调节器列表。当前可接受的值包括:
Conservative
尝试使用 Conservative CPU 调节器

OnDemand
尝试使用 OnDemand CPU 调节器(默认值)

Performance
尝试使用 Performance CPU 调节器(默认值)

PowerSave
尝试使用 PowerSave CPU 调节器

SchedUtil
尝试使用 SchedUtil CPU 调节器

UserSpace
尝试使用 UserSpace CPU 调节器(默认值)
默认:OnDemand、Performance 和 UserSpace。

CredType
用于创建作业步骤凭证的加密签名工具。当前可接受的值包括:
cred/munge
表示使用 Munge(默认)。

cred/slurm
使用 Slurm 的内部凭证格式。

DataParserParameters=<data_parser>
应用 data_parser 插件参数的默认值。有关详细信息,请参见 --json--yaml 参数在 sacct(1)、scontrol(1)、sinfo(1)、squeue(1)、sacctmgr(1)、sdiag(1) 和 sshare(1)。
默认值:最新的 data_parser 插件版本,未选择任何标志。

DebugFlags
定义应提供更详细事件日志记录的特定子系统。可以使用逗号分隔符指定多个子系统。如果 SlurmctldDebug 处于 'verbose' 或更高状态,大多数 DebugFlags 将导致识别的子系统生成额外的日志消息。更多的日志记录可能会影响性能。

注意:您还可以通过在进程(客户端命令、守护进程等)启动时定义 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 触发器

DefCpuPerGPU
每个分配的 GPU 分配的默认 CPU 数量。仅在作业未指定 --cpus-per-task 和 --cpus-per-gpu 时使用此值。

DefMemPerCPU
每个可用分配 CPU 的默认实际内存大小(以兆字节为单位)。用于避免过度订阅内存并导致分页。DefMemPerCPU 通常在整个节点分配给作业时使用(SelectType=select/cons_tres)。默认值为 0(无限制)。另请参见 DefMemPerGPUDefMemPerNodeMaxMemPerCPUDefMemPerCPUDefMemPerGPUDefMemPerNode 是互斥的。

注意:这适用于作业分配中的 可用 分配 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

DefMemPerGPU
每个分配的 GPU 的默认实际内存大小(以兆字节为单位)。默认值为 0(无限制)。请注意,尽力预测系统上将使用哪些 GPU,但这可能会在作业提交和启动时间之间发生变化,导致 MaxMemPerNode 可能无法按预期工作,特别是对于异构作业。另请参见 DefMemPerCPUDefMemPerNodeDefMemPerCPUDefMemPerGPUDefMemPerNode 是互斥的。

DefMemPerNode
每个分配的节点的默认实际内存大小(以兆字节为单位)。用于避免过度订阅内存并导致分页。DefMemPerNode 通常在整个节点分配给作业时使用(SelectType=select/linear)并且资源被过度订阅(OverSubscribe=yesOverSubscribe=force)。默认值为 0(无限制)。另请参见 DefMemPerCPUDefMemPerGPUMaxMemPerCPUDefMemPerCPUDefMemPerGPUDefMemPerNode 是互斥的。

DependencyParameters
多个选项可以用逗号分隔。
disable_remote_singleton
默认情况下,当联邦作业具有单例依赖关系时,联邦中的每个集群必须清除单例依赖关系,才能认为作业的单例依赖关系已满足。启用此选项意味着仅源集群必须清除单例依赖关系。此选项必须在联邦中的每个集群中设置。

kill_invalid_depend
如果作业具有无效依赖关系且永远无法运行,则终止它并将其状态设置为 JOB_CANCELLED。默认情况下,作业保持待处理状态,原因是 DependencyNeverSatisfied。

max_depend_depth=#
测试循环作业依赖关系的最大作业数量。在测试此数量的作业依赖关系后停止测试。默认值为 10 个作业。

DisableRootJobs
如果设置为 "YES",则用户 root 将被禁止运行任何作业。默认值为 "NO",这意味着用户 root 将能够执行作业。DisableRootJobs 也可以按分区设置。

EioTimeout
srun 等待 slurmstepd 关闭用于在用户应用程序和 srun 之间中继数据的 TCP/IP 连接的秒数,当用户应用程序终止时。默认值为 60 秒。不得超过 65533。

EnforcePartLimits
控制在作业提交到集群时是否强制执行分区限制。此选项考虑的分区限制包括其配置的 MaxMemPerCPU、MaxMemPerNode、MinNodes、MaxNodes、MaxTime、AllocNodes、AllowAccounts、AllowGroups、AllowQOS 和 QOS 使用阈值。它还考虑作业请求的节点数是否超过分区中存在的节点数。如果设置,则不能提交超过分区限制的作业和作业 QOS。
ALL
超过分区中的节点数和/或其任何配置限制的作业将在提交时被拒绝。如果作业提交到多个分区,则作业必须满足所有请求分区的限制。

ANY
如果作业满足至少一个请求分区的限制,则将接受作业。

NO
在提交时不强制执行分区限制,但在调度期间仍将强制执行。这包括请求的节点数超过任何分区中存在的节点数的作业,因此作业可以提交到空分区。超过所有请求分区限制的作业将保持排队,直到更改分区限制。这是默认值。

Epilog
每当用户的作业完成时,在每个节点上以用户 root 身份执行的脚本的路径名(例如 "/usr/local/slurm/epilog")。如果它不是绝对路径名(即不以斜杠开头),则将在与 slurm.conf 文件相同的目录中进行搜索。也可以使用 glob 模式(参见 glob (7))来运行多个 epilog 脚本(例如 "/etc/slurm/epilog.d/*")。当配置多个 epilog 脚本时,它们将按字母逆序(z-a -> Z-A -> 9-0)执行。Epilog 脚本可用于清除文件、禁用用户登录等。默认情况下没有 epilog。有关更多信息,请参见 Prolog 和 Epilog 脚本

注意:可以通过在多行中包含此选项来配置多个 epilog 脚本。

EpilogMsgTime
slurmctld 守护进程处理来自 slurmd 守护进程的 epilog 完成消息所需的微秒数。此参数可用于防止同时发送大量 epilog 完成消息,这应有助于防止丢失消息并提高大作业的吞吐量。默认值为 2000 微秒。对于 1000 节点作业,这将使 epilog 完成消息在两秒内分散。

EpilogSlurmctld
在作业分配终止时,slurmctld 执行的程序的完全限定路径名(例如 "/usr/local/slurm/epilog_controller")。该程序以 SlurmUser 身份执行,这使其有权限排空节点并在发生故障时重新排队作业(参见 scontrol(1))。程序的具体操作及其实现完全由系统管理员自行决定。有关作业的信息,包括其分配的节点等,通过环境变量传递给程序。有关更多信息,请参见 Prolog 和 Epilog 脚本

注意:可以通过在多行中包含此选项来配置多个 epilog 脚本。

EpilogTimeout
Slurm 等待 Epilog 的时间(以秒为单位),然后终止它们。默认值为 PrologEpilogTimeout。此间隔适用于 slurmd 守护进程在作业之后运行的 Epilog、slurmctld 守护进程运行的 EpilogSlurmctld,以及 SPANK 插件 epilog 调用:slurm_spank_job_epilog。
如果 Epilog 或 slurm_spank_job_epilog 超时,则节点将被排空。在所有情况下,错误都会被记录。

FairShareDampeningFactor
减轻超过用户或组的公平份额分配资源的影响。较高的值将提供更大的能力来区分在高水平上超过公平份额的情况(例如,值为 1 的情况下,过度消费 10 倍和 100 倍之间几乎没有区别,而值为 5 将导致优先级的显著差异)。默认值为 1。

FederationParameters
用于定义联邦选项。多个选项可以用逗号分隔。
fed_display
如果设置,则客户端状态命令(例如 squeue、sinfo、sprio 等)将默认以联邦视图显示信息。此选项在功能上等同于在每个命令上使用 --federation 选项。使用客户端的 --local 选项可以覆盖联邦视图,并获取给定集群的本地视图。

允许客户端命令使用 --cluster 选项,即使 slurmdbd 已关闭,通过从 slurmctld 检索集群记录。

FirstJobId
用于提交给 Slurm 的第一个作业的作业 ID。生成的作业 ID 值将为每个后续作业递增 1。值必须大于 0。默认值为 1。另请参见 MaxJobId

GresTypes
要管理的通用资源的以逗号分隔的列表(例如 GresTypes=gpu,mps). 这些资源可能有一个同名的 GRES 插件,提供额外的功能。 默认情况下不管理任何通用资源。 确保此参数在集群中的所有节点上保持一致,以确保正常操作。

GroupUpdateForce
如果设置为非零值,则将定期更新有关哪些用户是允许使用分区的组成员的信息,即使 /etc/group 文件没有发生变化。 如果设置为零,则仅在 /etc/group 文件更新后更新组成员信息。 默认值为 1。 另请参见 GroupUpdateTime 参数。

GroupUpdateTime
控制有关哪些用户是允许使用分区的组成员的信息更新的频率,以及用户组成员列表的缓存时间。 时间间隔以秒为单位,默认值为 600 秒。 值为零将阻止定期更新组成员信息。 另请参见 GroupUpdateForce 参数。

GpuFreqDef=[<type]=value>[,<type=value>]
在运行作业步骤时使用的默认 GPU 频率,如果未通过 --gpu-freq 选项显式设置。 此选项可用于独立配置 GPU 及其内存频率。 没有默认值。如果未设置,如果未设置 --gpu-freq 选项,则不会尝试更改 GPU 频率。 作业完成后,所有受影响的 GPU 的频率将重置为最高可能值。 在某些情况下,系统功率限制可能会覆盖请求的值。 type 字段可以是 "memory"。 如果未指定 type,则隐含为 GPU 频率。 value 字段可以是 "low"、"medium"、"high"、"highm1" 或以兆赫(MHz)为单位的数值。 如果指定的数值不可用,则将使用尽可能接近的值。 下面是值的定义。 使用示例包括 "GpuFreqDef=medium,memory=high" 和 "GpuFreqDef=450"。

支持的 value 定义:

low
最低可用频率。

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

high
最高可用频率。

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

HashPlugin
识别用于网络通信的哈希插件类型。 可接受的值包括:

hash/k12
哈希由 KangorooTwelve 加密哈希函数生成。 这是默认值。

hash/sha3
哈希由 SHA-3 加密哈希函数生成。

注意: 确保 HashPlugin 在 slurm.conf 和 slurmdbd.conf 中具有相同的值。

HealthCheckInterval
执行 HealthCheckProgram 的间隔(以秒为单位)。 默认值为零,禁用执行。

HealthCheckNodeState
识别应执行 HealthCheckProgram 的节点状态。 可以使用逗号分隔符指定多个状态值。 默认值为 ANY,在任何状态的节点上执行。
ALLOC
在 ALLOC 状态的节点上运行(所有 CPU 已分配)。

ANY
在任何状态的节点上运行。

CYCLE
而不是同时在所有节点上运行健康检查程序, 在 HealthCheckInterval 的过程中循环运行所有计算节点。可以与各种节点状态选项结合使用。

IDLE
在 IDLE 状态的节点上运行。

NONDRAINED_IDLE
在处于 IDLE 状态且未被排水的节点上运行。

MIXED
在 MIXED 状态的节点上运行(某些 CPU 空闲,其他 CPU 已分配)。

HealthCheckProgram
作为 root 用户定期在所有 处于 NOT_RESPONDING 状态的计算节点上执行的脚本的完全限定路径名。此程序可用于验证节点是否完全正常,并在检测到问题时排水节点或发送电子邮件。 任何要采取的行动必须由程序显式执行(例如,执行 "scontrol update NodeName=foo State=drain Reason=tmp_file_system_full" 来排水节点)。 执行间隔由 HealthCheckInterval 参数控制。 请注意,HealthCheckProgram 将同时在所有节点上执行,以最小化其对并行程序的影响。 如果该程序在 60 秒内未正常终止,将被终止。 该程序还将在 slurmd 守护进程首次启动时执行,并在其与 slurmctld 守护进程注册之前执行。 默认情况下,不会执行任何程序。

InactiveLimit
在非响应作业分配命令(例如 srunsalloc)后,经过的秒数,作业将被终止。如果执行命令的节点失败或命令异常终止,这将终止其作业分配。 此选项对批处理作业没有影响。 设置值时,请考虑使用 srun 启动应用程序的调试器可能会将 srun 命令保持在停止状态较长时间。 对于在设置了 RootOnly 标志的分区中运行的作业,此限制将被忽略(以 root 身份运行的调度程序将负责该作业)。 默认值为无限制(零),且不得超过 65533 秒。

InteractiveStepOptions
当 LaunchParameters=use_interactive_step 启用时,启动 salloc 将自动启动一个带有 InteractiveStepOptions 的 srun 进程,以在作业分配中的节点上启动终端。 默认值为 "--interactive --preserve-env --pty $SHELL"。 "--interactive" 选项在 srun 手册页中故意未记录。它仅用于 InteractiveStepOptions 中,以创建一个不会消耗资源的 "交互步骤",以便其他步骤可以与交互步骤并行运行。

JobAcctGatherType
JobAcctGather 插件在任务级别收集内存、CPU、IO、互连、能量和 GPU 使用信息,具体取决于在 Slurm 中配置的插件。此参数将控制如何收集这些指标中的一些。默认情况下未设置。

目前可配置的值包括:

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 并将统计信息聚合到单个指标中,然后这些值需要聚合到任务统计信息中。

注意: 在集群中运行作业时更改插件类型是可能的。已经运行的步骤将继续使用先前的插件机制,而新步骤将使用新机制。

JobAcctGatherFrequency
作业会计和分析采样间隔,为每种数据类型指定。可以指定多个以逗号分隔的 <datatype>=<interval> 间隔。如果提供了没有数据类型的间隔,则将分配给 task 数据类型。支持的数据类型如下:
影响会计和分析:

task=<interval>
作业会计收集插件的任务使用的采样间隔(以秒为单位)和 acct_gather_profile 插件的任务分析。 默认为 30。

如果此间隔为 0(禁用),则仅在作业终止时收集会计信息,这减少了 Slurm 对作业的干扰,但也意味着有关作业的统计信息仅来自单个样本,不反映作业生命周期中多个样本的平均值或最大值。

仅影响分析:

energy=<interval>
使用 acct_gather_energy 插件进行能量分析的采样间隔(以秒为单位)。默认为 0(禁用)。

network=<interval>
使用 acct_gather_interconnect 插件进行 Infiniband 分析的采样间隔(以秒为单位)。默认为 0(禁用)。

filesystem=<interval>
使用 acct_gather_filesystem 插件进行文件系统分析的采样间隔(以秒为单位)。默认为 0(禁用)。

较小(非零)值对作业性能影响更大, 但对于任务少于 10,000 的应用程序,30 秒的值不太可能被注意到。

用户可以在提交作业时使用 --acctg-freq 选项独立覆盖每个间隔。
在使用 acct_gather_energy/ipmi 或 xcc 插件时,此值应小于或等于 EnergyIPMIFreq,否则将不必要地在连续轮询中获取重复值。

JobAcctGatherParams
作业会计收集插件的任意参数。 目前可接受的值包括:
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 驱动程序响应缓慢。

JobCompHost
托管作业完成数据库的机器名称。 仅用于数据库类型存储插件,其他情况下被忽略。

JobCompLoc
此选项设置一个字符串,其含义取决于 JobCompType
如果 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 没有默认值。需要显式配置,否则插件将无法初始化。

JobCompParams
传递任意文本字符串给作业完成插件。 另请参见 JobCompType

可选的以逗号分隔的列表,用于 jobcomp/elasticsearch:

send_script
将作业脚本作为作业完成消息的一部分发送。

可选的以逗号分隔的列表,用于 jobcomp/kafka:

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 主题。

JobCompPass
用于访问数据库以存储作业完成数据的密码。 仅用于数据库类型存储插件,其他情况下被忽略。

JobCompPort
作业完成数据库服务器的监听端口。 仅用于数据库类型存储插件,其他情况下被忽略。

JobCompType
作业完成日志记录机制类型。默认情况下未设置。 目前可接受的值包括:
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 参数指定的脚本,并提供作业信息的环境变量。

JobCompUser
访问作业完成数据库的用户帐户。 仅用于数据库类型存储插件,其他情况下被忽略。

JobContainerType
识别用于通过 Linux 命名空间进行作业隔离的插件。 注意: 请参见 ProctrackType 以获取资源限制和使用跟踪。 目前可接受的值包括:
job_container/tmpfs
用于为作业创建私有文件系统命名空间,其中包含每个作业的临时文件系统(/tmp 和 /dev/shm)。必须设置 'PrologFlags=Contain' 才能使用此插件。

JobFileAppend
此选项控制在作业启动时如果作业的输出或错误文件存在该怎么办。 如果 JobFileAppend 设置为 1,则将附加到现有文件。 默认情况下,任何现有文件都会被截断。

JobRequeue
此选项控制批处理作业的默认重排能力。 作业可以由系统管理员显式重新排队,节点故障后,或在被更高优先级作业抢占时。 如果 JobRequeue 设置为 1,则批处理作业可以重新排队,除非用户显式禁用。 如果 JobRequeue 设置为 0,则批处理作业将不会重新排队,除非用户显式启用。 使用 sbatch --no-requeue--requeue 选项可以更改单个作业的默认行为。 默认值为 1。

JobSubmitPlugins
这些插件旨在特定于站点的插件,可用于设置默认作业参数和/或记录事件。如果需要,可以配置 Slurm 使用多个 job_submit 插件,必须指定为以逗号分隔的列表,并将按列出顺序执行。
例如,针对多个 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",然后修改代码以满足您的需求。

KillOnBadExit
如果设置为 1,则如果任何任务崩溃或中止(以非零退出代码表示),步骤将立即终止。 默认值为 0,如果其中一个进程崩溃或中止,其他进程将继续运行,而崩溃或中止的进程将等待。用户可以通过使用 srun 的 -K--kill-on-bad-exit 来覆盖此配置参数。

KillWait
在达到时间限制时,作业进程之间的 SIGTERM 和 SIGKILL 信号之间的间隔(以秒为单位)。 如果作业未能在指定的间隔内正常终止,将被强制终止。 默认值为 30 秒。 该值不得超过 65533。

MaxBatchRequeue
批处理作业在标记为 JobHeldAdmin 之前可以自动重新排队的最大次数。(主要在启用 SchedulerParameters 选项 nohold_on_prolog_fail 时有用。) 默认值为 5。

NodeFeaturesPlugins
识别用于支持可能随时间变化的节点特性的插件。例如,可能使用不同 BIOS 设置启动的节点。通过使用节点的 active_features 和 available_features 信息来支持此功能。 目前可接受的值包括:
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

LaunchParameters
识别作业启动插件的选项。 可接受的值包括:
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,正如在常规步骤中运行的任务所做的那样。

Licenses
指定可以分配给作业的许可证(或集群所有节点上可用的其他资源)。 许可证名称可以选择性地后跟冒号和计数,默认计数为 1。 多个许可证名称应以逗号分隔(例如 "Licenses=foo:4,bar")。 请注意,如果所需的许可证规范不可用,Slurm 会阻止作业调度。 Slurm 不会阻止作业使用未在作业提交规范中明确列出的许可证。

LogTimeFormat
Format of the timestamp in slurmctld and slurmd log files. Accepted format values include "iso8601", "iso8601_ms", "rfc5424", "rfc5424_ms", "rfc3339", "clock", "short" and "thread_id". The values ending in "_ms" differ from the ones without in that fractional seconds with millisecond precision are printed. The default value is "iso8601_ms". The "rfc5424" formats are the same as the "iso8601" formats except that the timezone value is also shown. The "clock" format shows a timestamp in microseconds retrieved with the C standard clock() function. The "short" format is a short date and time format. The "thread_id" format shows the timestamp in the C standard ctime() function form without the year but including the microseconds, the daemon's process ID and the current thread name and ID.

MailDomain
如果没有明确给出电子邮件地址,则域名用于限定用户名 与 "--mail-user" 选项一起使用。如果未设置,地方 MTA 将需要自己限定 本地地址。对 MailDomain 的更改将仅影响新作业。

MailProg
用于根据用户请求发送电子邮件的程序的完全限定路径名。 默认值为 "/bin/mail"(如果 "/bin/mail" 不存在但 "/usr/bin/mail" 存在,则为 "/usr/bin/mail")。 该程序使用适合默认邮件命令的参数调用, 但是有关作业的附加信息以环境变量的形式传递。

附加变量与传递给 PrologSlurmctldEpilogSlurmctld 的变量相同,并在以下上下文中具有附加变量:

ALL
SLURM_JOB_STATE
当调用 MailProg 时作业的基本状态。
SLURM_JOB_MAIL_TYPE
触发邮件的邮件类型。
BEGIN
SLURM_JOB_QEUEUED_TIME
作业排队的时间。
END, FAIL, REQUEUE, TIME_LIMIT_*
SLURM_JOB_RUN_TIME
作业运行的时间。
END, FAIL
SLURM_JOB_EXIT_CODE_MAX
作业的退出代码或数组作业的最高退出代码。
SLURM_JOB_EXIT_CODE_MIN
数组作业的最低退出代码。
SLURM_JOB_TERM_SIGNAL_MAX
数组作业的最高信号。
STAGE_OUT
SLURM_JOB_STAGE_OUT_TIME
作业的阶段时间。

MaxArraySize
最大作业数组任务索引值将比 MaxArraySize 小 1 以允许零的索引值。 将 MaxArraySize 配置为 0 以禁用作业数组使用。 该值不得超过 4000001。 MaxJobCount 的值应远大于 MaxArraySize。 默认值为 1001。 另请参见调度参数中的 max_array_tasks

MaxDBDMsgs
当无法与 SlurmDBD 通信时,slurmctld 将排队 在 SlurmDBD 再次可用时处理的消息。 为了避免耗尽内存,slurmctld 只会排队这么多 消息。默认值为 10000,或 MaxJobCount * 2 + 节点数 * 4,以较大者为准。该值不能少于 10000。

MaxJobCount
slurmctld 同时可以在内存中拥有的最大作业数。 与 MinJobAge 结合使用,以确保 slurmctld 守护进程不会耗尽 其内存或其他资源。一旦达到此限制,提交 额外作业的请求将失败。默认值为 10000 个作业。 注意:作业数组的每个任务都算作一个作业,即使它们不会 在修改或启动之前占用单独的作业记录。 如果作业超过几十万个,性能可能会受到影响。 通常建议为每个用户设置 MaxSubmitJobs,以防止单个 用户填满系统作业。 这可以通过使用 Slurm 的数据库并配置资源限制的强制执行来实现。

MaxJobId
用于提交给 Slurm 的作业的最大作业 ID,未指定 请求的值。作业 ID 是无符号 32 位整数,前 26 位 保留用于本地作业 ID,剩余 6 位保留用于集群 ID 以识别联邦作业的来源。允许的最大本地作业 ID 为 67,108,863 (0x3FFFFFF)。默认值为 67,043,328 (0x03ff0000)。 MaxJobId 仅适用于本地作业 ID,而不适用于联邦作业 ID。 生成的作业 ID 值将为每个后续作业递增 1。一旦 达到 MaxJobId,下一个作业将被分配 FirstJobId。 联邦作业将始终具有 67,108,865 或更高的作业 ID。 另请参见 FirstJobId

MaxMemPerCPU
每个分配的 CPU 可用的最大实际内存大小(以兆字节为单位)。 用于避免过度分配内存并导致分页。 MaxMemPerCPU 通常在单个处理器 分配给作业时使用(SelectType=select/cons_tres)。 默认值为 0(无限制)。 另请参见 DefMemPerCPUDefMemPerGPUMaxMemPerNodeMaxMemPerCPUMaxMemPerNode 是互斥的。

注意:如果作业指定的每个 CPU 内存限制超过此系统 限制,该作业的每个任务 CPU 数量将尝试自动增加。 这可能导致作业由于 CPU 数量限制而失败。此 自动调整功能是尽力而为的,由于可能存在异构配置和 多分区/qos 作业,无法保证最佳分配。如果这是一个问题,建议使用作业 提交 LUA 插件来强制调整以满足您的特定需求。

MaxMemPerNode
每个作业分配中分配节点可用的最大实际内存大小(以兆字节为单位)。用于避免过度分配内存并导致分页。 MaxMemPerNode 通常在整个节点分配给作业时使用(SelectType=select/linear)并且 资源被过度分配(OverSubscribe=yesOverSubscribe=force)。 默认值为 0(无限制)。 另请参见 DefMemPerNodeMaxMemPerCPUMaxMemPerCPUMaxMemPerNode 是互斥的。

MaxNodeCount
控制器中可能存在的最大节点数。默认情况下,MaxNodeCount 将设置为在 slurm.conf 中找到的节点数。如果小于在 slurm.conf 中找到的节点数,则将忽略 MaxNodeCount。系统中的节点总数不能超过 65536。增加 MaxNodeCount 以容纳动态创建的节点和动态节点 注册以及使用 scontrol 创建的节点。

MaxStepCount
任何作业可以启动的最大步骤数。此参数 旨在限制坏批处理脚本的影响。 默认值为 40000 步。

MaxTasksPerNode
Slurm 允许作业步骤在单个节点上生成的最大任务数。默认 MaxTasksPerNode 为 512。 不得超过 65533。

MCSParameters
MCS = 多类别安全 MCS 插件参数。 支持的参数特定于 MCSPlugin。 对该值的更改在重新配置 Slurm 守护进程时生效。 有关 MCS 的更多信息,请访问这里 <https://slurm.schedmd.com/mcs.html>。

MCSPlugin
MCS = 多类别安全:将安全标签关联到作业,并确保 节点只能在使用相同安全标签的作业之间共享。 默认情况下未设置。可接受的值包括:
mcs/account
只有具有相同账户的用户才能共享节点(需要启用会计)。

mcs/group
只有具有相同组的用户才能共享节点。

mcs/user
节点不能与其他用户共享。

mcs/label
只有具有相同任意标签字符串的作业才能共享节点。

MessageTimeout
允许完成往返通信的时间(以秒为单位)。默认值为 10 秒。对于具有 共享节点的系统,slurmd 守护进程可能会被换出并 需要更高的值。

MinJobAge
完成作业的最小年龄,在其记录从 slurmctld 保持的作业列表中清除之前。与 MaxJobCount 结合使用,以确保 slurmctld 守护进程不会耗尽 其内存或其他资源。默认值为 300 秒。 值为零将防止任何作业记录清除。 在回填周期期间不会清除作业,因此如果使用回填调度插件,清除作业可能需要超过 MinJobAge 秒。 为了消除一些可能的竞争条件,建议的 MinJobAge 最小非零值为 2。

MpiDefault
标识要使用的默认 MPI 类型。 默认情况下未设置,这允许 Slurm 与其他版本的 MPI 一起工作 列在下面。 Srun 可能会在任何情况下覆盖此配置参数。 当前支持的版本包括: pmi2pmix。 有关 MPI 使用的更多信息,请访问这里 mpi_guide

MpiParams
与 MPI 相关的参数。多个参数可以用逗号分隔。当前 支持的参数包括:

ports=#-#
标识由原生 Cray 的 PMI 使用的通信端口范围。

disable_slurm_hydra_bootstrap
禁用以下变量的环境变量注入:I_MPI_HYDRA_BOOTSTRAP、I_MPI_HYDRA_BOOTSTRAP_EXEC_EXTRA_ARGS、 HYDRA_BOOTSTRAP、HYDRA_LAUNCHER_EXTRA_ARGS。

手动将 I_MPI_HYDRA_BOOTSTRAP 或 HYDRA_BOOTSTRAP 设置为 'slurm' 在 分配中将跳过此参数,额外参数的注入将 按常规进行。

OverTimeLimit
作业可以超过其时间限制的分钟数,才能被取消。 通常,作业的时间限制被视为 限制,作业将在达到该限制时被 终止。 配置 OverTimeLimit 将导致作业的时间限制被 视为 限制。 将 OverTimeLimit 值添加到 时间限制提供了一个 时间限制,在此时作业被取消。 这对于基于每个作业的软时间限制的回填调度特别有用。 默认值为零。 不得超过 65533 分钟。 还支持值为 "UNLIMITED"。

PluginDir
标识查找 Slurm 插件的位置。 这是一个以冒号分隔的目录列表,类似于 PATH 环境变量。 默认值是配置时给出的前缀 + "/lib/slurm"。

PlugStackConfig
使用堆叠插件架构进行节点作业 (K) 控制 (SPANK) 的 Slurm 堆叠插件的配置文件位置。 这提供了对高度可配置插件集的支持 在每个用户作业步骤的执行之前和/或之后调用。默认位置是 "plugstack.conf" 在与系统 slurm.conf 相同的目录中。有关 SPANK 插件的更多信息,请参见 spank(8) 手册。

PreemptMode
用于抢占作业或启用群体调度的机制。当 PreemptType 参数设置为启用抢占时, PreemptMode 选择用于抢占集群中合格作业的默认机制。
PreemptMode 可以按分区指定,以覆盖此 默认值,如果 PreemptType=preempt/partition_prio。或者,如果 PreemptType=preempt/qos,它可以按 QOS 指定。在任何情况下,当启用抢占时,必须为整个集群指定有效的默认 PreemptMode 值。
GANG 选项用于启用群体调度,无论 是否启用抢占(即独立于 PreemptType 设置)。它可以与 PreemptMode 设置一起指定,两个选项用逗号分隔(例如 PreemptMode=SUSPEND,GANG)。
有关更多详细信息,请参见 <preempt> 和 <gang_scheduling>。

注意: 出于性能原因,回填调度程序为作业保留整个节点, 而不是部分节点。如果在回填调度期间,作业抢占一个或多个 其他作业,则这些被抢占作业的整个节点将为 抢占作业保留,即使抢占作业请求的资源少于该值。 在该回填周期内,这些保留的节点在其他作业期间不可用,即使其他作业可以适应这些节点。因此,作业在单个回填迭代中可能会抢占比它们请求的更多资源。
注意: 对于异构作业,所有组件必须符合抢占条件才能被考虑抢占。当要抢占异构作业时,作业中第一个识别的组件将具有最高的 PreemptMode (SUSPEND(最高)、REQUEUECANCEL(最低))将用于设置所有组件的 PreemptMode。每个异构作业组件的 GraceTime 和用户警告信号保持唯一。 异构作业被排除在 GANG 调度操作之外。

OFF
是默认值,禁用作业抢占和群体调度。 它仅与全局级别禁用抢占兼容。 此参数的常见用例是在分区上设置它,以禁用 该分区的抢占。

CANCEL
被抢占的作业将被取消。

GANG
启用同一分区作业的群体调度(时间切片),并 允许恢复挂起的作业。为了使用群体调度,必须在集群级别指定 GANG 选项。

注意: 如果 GANG 调度与 PreemptType=preempt/partition_prio 一起启用,则控制器将忽略 PreemptExemptTime 和以下 PreemptParametersreorder_countstrict_orderyoungest_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 值的子集上直接设置。

PreemptParameters
多个选项可以用逗号分隔。
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 插件。)

PreemptType
指定用于识别哪些作业可以被抢占以启动待处理作业的插件。默认情况下未设置。
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 手册页。

PreemptExemptTime
所有作业在考虑抢占之前的最小运行时间的全局选项。任何 QOS PreemptExemptTime 优先于全局 选项。此选项仅适用于 PreemptMode=REQUEUEPreemptMode=CANCEL
时间为 -1 将禁用该选项,相当于 0。可接受的时间格式 包括 "分钟"、"分钟:秒"、"小时:分钟:秒"、"天-小时"、 "天-小时:分钟" 和 "天-小时:分钟:秒"。

PrEpParameters
要传递给 PrEpPlugins 的参数。

PrEpPlugins
希望为 Prolog 和 Epilog (PrEp) 脚本编写自己的插件的程序员的资源。默认值,且当前唯一实现的插件是 prep/script。可以在逗号分隔的列表中指定其他插件。有关更多信息,请参见 PrEp 插件 API 文档页面: <https://slurm.schedmd.com/prep_plugins.html>

PriorityCalcPeriod
半衰期衰减重新计算的时间段(以分钟为单位)。 仅适用于 PriorityType=priority/multifactor。 默认值为 5(分钟)。

PriorityDecayHalfLife
这控制了在确定 关联(用户、银行账户和 集群)的服务过度或不足时,先前资源使用的考虑时间。 使用记录将随着时间的推移而衰减,原始值的一半 在 PriorityDecayHalfLife 年龄时清除。 如果设置为 0,则不应用衰减。 如果您想对每个关联强制执行硬时间限制,这很有帮助。如果 设置为 0,则必须将 PriorityUsageResetPeriod 设置为某个间隔。 仅适用于 PriorityType=priority/multifactor。 单位是时间字符串(即 min、hr:min:00、days-hr:min:00、 或 days-hr)。默认值为 7-0(7 天)。

PriorityFavorSmall
指定小作业应获得优先调度优先级。 仅适用于 PriorityType=priority/multifactor。 支持的值为 "YES" 和 "NO"。默认值为 "NO"。

PriorityFlags
修改优先级行为的标志。 仅适用于 PriorityType=priority/multifactor。 下面的关键字没有关联值 (例如 "PriorityFlags=ACCRUE_ALWAYS,SMALL_RELATIVE_TO_TIME")。
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
如果设置,作业的大小组件将基于作业大小本身,而不是 作业大小除以其时间限制。

PriorityMaxAge
指定将获得最大年龄因子的作业年龄,以计算 优先级。例如,30 分钟的值将导致所有超过 30 分钟的作业获得相同的基于年龄的优先级。 仅适用于 PriorityType=priority/multifactor。 单位是时间字符串(即 min、hr:min:00、days-hr:min:00、 或 days-hr)。默认值为 7-0(7 天)。

PriorityParameters
由 PriorityType 插件使用的任意字符串。

PrioritySiteFactorParameters
由 PrioritySiteFactorPlugin 插件使用的任意字符串。

PrioritySiteFactorPlugin
指定一个可选插件,用于与 "priority/multifactor" 一起使用, 旨在最初设置和持续更新 SiteFactor 优先级因子。默认情况下未设置。

PriorityType
指定用于建立作业调度的插件 优先级。 另请参见 PriorityFlags 以获取配置选项。 默认值为 "priority/multifactor"。
priority/basic
作业以先进先出(FIFO)方式进行评估。

priority/multifactor
作业根据多种因素分配优先级,包括大小、年龄、公平共享等。

在非 FIFO 调度时,作业按以下顺序优先考虑:

1. 可以抢占的作业
2. 具有提前预留的作业
3. 分区优先级
4. 作业优先级
5. 作业提交时间
6. 作业 ID

PriorityUsageResetPeriod
在此间隔内,关联的使用量将重置为 0。如果 您想对每个关联强制执行硬时间使用限制,则会使用此方法。如果 PriorityDecayHalfLife 设置为 0,则不会发生衰减,这是 重置正在运行的作业所累积的使用量的唯一方法。默认情况下,此功能关闭,建议使用 PriorityDecayHalfLife 选项,以避免 在集群上没有任何作业运行,但如果您的模式设置为 仅允许系统上的某些时间量,则这是实现此目标的方法。 仅适用于 PriorityType=priority/multifactor。
NONE
永远不清除历史使用。默认值。

NOW
立即清除历史使用。 在启动和重新配置时执行。

DAILY
每天午夜清除。

WEEKLY
每周日的 00:00 清除。

MONTHLY
每月的第一天 00:00 清除。

QUARTERLY
每个季度的第一天 00:00 清除。

YEARLY
每年的第一天 00:00 清除。

优先级权重年龄
一个整数值,设置队列等待时间组件对作业优先级的贡献程度。 仅在 PriorityType=priority/multifactor 时适用。 需要 AccountingStorageType=accounting_storage/slurmdbd。 默认值为 0。

优先级权重关联
一个整数值,设置关联组件对作业优先级的贡献程度。 仅在 PriorityType=priority/multifactor 时适用。 默认值为 0。

优先级权重公平共享
一个整数值,设置公平共享组件对作业优先级的贡献程度。 仅在 PriorityType=priority/multifactor 时适用。 需要 AccountingStorageType=accounting_storage/slurmdbd。 默认值为 0。

优先级权重作业大小
一个整数值,设置作业大小组件对作业优先级的贡献程度。 仅在 PriorityType=priority/multifactor 时适用。 默认值为 0。

优先级权重分区
在计算作业优先级时,优先级/多因素插件使用的分区因子。 仅在 PriorityType=priority/multifactor 时适用。 默认值为 0。

优先级权重QOS
一个整数值,设置服务质量组件对作业优先级的贡献程度。 仅在 PriorityType=priority/multifactor 时适用。 默认值为 0。

优先级权重TRES
一个以逗号分隔的 TRES 类型和权重列表,设置每个 TRES 类型对作业优先级的贡献程度。
例如:
PriorityWeightTRES=CPU=1000,Mem=2000,GRES/gpu=3000

仅在 PriorityType=priority/multifactor 时适用,并且如果 AccountingStorageTRES 为每个 TRES 类型配置。 允许负值。 默认值为 0。

私有数据
控制普通用户无法查看的信息类型。 默认情况下,所有信息对所有用户可见。 用户 SlurmUserroot 始终可以查看所有信息。 可以使用逗号分隔指定多个值。 可接受的值包括:
账户
(仅限非 SlurmDBD 记账) 防止用户查看任何账户 定义,除非他们是这些账户的协调员。

事件
防止用户查看事件信息,除非他们具有操作员状态 或更高权限。

作业
防止用户查看属于其他用户的作业或作业步骤。(仅限非 SlurmDBD 记账) 防止用户查看 属于其他用户的作业记录,除非他们是运行作业的关联的协调员。

节点
防止用户查看节点状态信息。

分区
防止用户查看分区状态信息。

预留
防止普通用户查看他们无法使用的预留。

使用情况
防止用户查看任何其他用户的使用情况,这适用于 sshare。 (仅限非 SlurmDBD 记账) 防止用户查看 任何其他用户的使用情况,这适用于 sreport。

用户
(仅限非 SlurmDBD 记账) 防止用户查看 除了他们自己以外的任何用户的信息,这也使得用户只能 看到他们处理的关联。 协调员可以看到他们所协调的账户中所有用户的关联,但在列出用户时只能看到自己。

进程跟踪类型
标识用于按作业步骤进行进程跟踪的插件。 slurmd 守护进程使用此机制识别所有进程 它为用户作业步骤生成的子进程。 注意:“proctrack/linuxproc”和“proctrack/pgid”可能无法 识别与作业相关的所有进程,因为进程 可能成为 init 进程的子进程(当父进程 终止时)或更改其进程组。 为了可靠地跟踪所有进程,强烈推荐使用“proctrack/cgroup”。 注意JobContainerType 适用于作业命名空间隔离, 而 ProctrackType 适用于作业资源限制和跟踪。 目前可接受的值包括:
proctrack/cgroup
使用 Linux cgroups 来约束和跟踪进程,并且是支持 cgroup 的系统的默认值。
注意:有关配置详细信息,请参见“man cgroup.conf”。

proctrack/linuxproc
使用 Linux 进程树和父进程 ID。

proctrack/pgid
使用进程组 ID。
注意:这是 BSD 系列的默认值。

前置脚本
当 slurmd 被要求从新的作业分配中运行作业步骤时,执行的程序的路径名。如果它不是绝对路径名(即不以斜杠开头),它将在与 slurm.conf 文件相同的目录中进行搜索。也可以使用通配符模式(参见 glob (7))指定要运行的多个程序(例如“/etc/slurm/prolog.d/*”)。当配置多个前置脚本时,它们将按字母逆序执行(z-a -> Z-A -> 9-0)。slurmd 在启动第一个作业步骤之前执行前置脚本。前置脚本可以用于清除文件、启用用户登录等。默认情况下没有前置脚本。任何配置的脚本都应快速完成执行(在 MessageTimeout 规定的时间内)。 如果前置脚本失败(返回非零退出代码),将导致节点被设置为 DRAIN 状态,作业被重新排队。作业将处于保持状态,除非在 SchedulerParameters 中配置了 nohold_on_prolog_fail。 有关更多信息,请参见 前置和后置脚本

注意:可以通过在多行中包含此选项来配置多个前置脚本。

前置后置超时
Slurm 等待前置和后置脚本的时间(以秒为单位),在终止它们之前。默认行为是无限期等待。此间隔适用于 slurmd 守护进程在作业之前和之后运行的前置和后置脚本,slurmctld 守护进程运行的 PrologSlurmctld 和 EpilogSlurmctld,以及 SPANK 插件前置/后置调用:slurm_spank_job_prolog 和 slurm_spank_job_epilog。
如果 PrologSlurmctld 超时,作业将被重新排队(如果可能)。 如果前置脚本或 slurm_spank_job_prolog 超时,作业将被重新排队(如果可能),并且节点将被排空。 如果后置脚本或 slurm_spank_job_epilog 超时,节点将被排空。 在所有情况下,错误将被记录。
注意:如果配置了 PrologTimeout,则此值不适用于前置脚本。 同样,如果配置了 EpilogTimout,则此值不适用于后置脚本。

前置超时
Slurm 等待前置脚本的时间(以秒为单位),在终止它们之前。默认值为 前置后置超时。此间隔适用于 slurmd 守护进程在作业之前运行的前置脚本,slurmctld 守护进程运行的 PrologSlurmctld,以及 SPANK 插件前置调用:slurm_spank_job_prolog。
如果 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 标志隐式地启用包含和分配标志。

前置Slurmctld
slurmctld 守护进程在授予新的作业分配之前执行的程序的完全限定路径名(例如“/usr/local/slurm/prolog_controller”)。 该程序以 SlurmUser 身份在 slurmctld 守护进程执行的同一节点上执行,允许其排空 节点并在发生故障时重新排队作业,或在适当时取消作业。 程序的具体操作及其实现完全由系统管理员决定。 有关正在启动的作业、其分配节点等的信息通过环境变量传递给程序。 在此程序运行期间,与作业相关的节点将被设置为 POWER_UP/CONFIGURING 标志,其状态可以轻松查看。 slurmctld 守护进程将无限期等待该程序完成。 一旦程序以零退出代码完成,节点将被视为可用,程序将被启动。 如果某些节点无法使用,则程序应排空该节点(通常使用 scontrol 命令)并以非零退出代码终止。 非零退出代码将导致作业被重新排队(如果可能)或被终止。请注意,只有批处理作业可以被重新排队。 有关更多信息,请参见 前置和后置脚本

注意:可以通过在多行中包含此选项来配置多个前置脚本。

传播优先级进程
控制用户生成任务的调度优先级(nice 值)。
0
任务将继承来自 slurm 守护进程的调度优先级。 这是默认值。

1
任务将继承用于提交它们的命令的调度优先级(例如 srunsbatch)。 除非作业由用户 root 提交,否则任务的调度优先级不会高于生成它们的 slurm 守护进程。

2
任务将继承用于提交它们的命令的调度优先级(例如 srunsbatch),但限制它们的 nice 值始终比 slurm 守护进程高一个(即任务的调度优先级将低于 slurm 守护进程)。

传播资源限制
一个以逗号分隔的资源限制名称列表。 slurmd 守护进程使用这些名称从提交节点的用户进程环境中获取相关的(软)限制值。 然后将这些限制传播并应用于将在计算节点上运行的作业。 当系统限制在节点之间变化时,此参数可能会很有用。 任何不出现在列表中的资源限制都不会被传播。 但是,用户可以通过在 sbatch 或 srun 中指定要传播的资源限制,覆盖此设置,使用“--propagate”选项。如果没有配置 传播资源限制传播资源限制例外,并且未指定“--propagate”选项,则默认操作是传播所有限制。只能指定其中一个参数,传播资源限制或传播资源限制例外。 用户限制不能超过 slurmd 守护进程操作的硬限制。如果用户限制未被传播,则 slurmd 守护进程的限制将传播到用户的作业中。用于 Slurm 守护进程的限制可以在 /etc/sysconf/slurm 文件中设置。有关更多信息,请参见: https://slurm.schedmd.com/faq.html#memlock Slurm 支持以下限制名称(尽管某些选项可能在某些系统上不受支持):
所有
以下列出的所有限制(默认)

以下列出的限制均不适用

地址空间
进程的最大地址空间(虚拟内存)。

核心
核心文件的最大大小

CPU
最大 CPU 时间

数据
进程数据段的最大大小

文件大小
创建的文件的最大大小。请注意,如果用户将文件大小设置为小于 slurmd.log 的当前大小,作业启动将失败,并出现“文件大小限制超出”错误。

内存锁定
可以锁定到内存中的最大大小
打开文件数
最大打开文件数

进程数
可用的最大进程数

RSS
最大常驻集大小。请注意,这仅在 Linux 内核 2.4.30 或更早版本或 BSD 中有效。

堆栈
最大堆栈大小

传播资源限制例外
一个以逗号分隔的资源限制名称列表。 默认情况下,所有资源限制将被传播(如 传播资源限制 参数所述),除了出现在此列表中的限制。用户可以通过在 sbatch 或 srun 中指定要传播的资源限制,覆盖此设置,使用“--propagate”选项。 有关有效限制名称的列表,请参见上面的 传播资源限制

重启程序
在每个计算节点上执行的程序以重启它。在授权用户执行“scontrol reboot”命令或提交作业时使用“--reboot”选项时,在每个节点上调用。 重启后,节点返回正常使用。 请参见 ResumeTimeout 配置您期望重启完成的时间。 如果节点在 ResumeTimeout 内未重启,将标记为 DOWN。

重新配置标志
控制在发出“scontrol reconfig”命令时可能采取的各种操作的标志。当前选项包括:
保持分区信息
如果设置,“scontrol reconfig”命令将保持分区“状态”的内存值 以及可能通过“scontrol update”动态更新的其他参数。slurm.conf 文件中的分区信息将与内存数据合并。此标志优先于 KeepPartState 标志。

保持分区状态
如果设置,“scontrol reconfig”命令将仅保留内存分区的当前“状态”值,并将重置所有可能通过“scontrol update”动态更新的分区的其他参数为 slurm.conf 文件中的值。slurm.conf 文件中的分区信息将与内存数据合并。

保持节能设置
如果设置,“scontrol reconfig”命令将保留 SuspendExcNodes、SuspendExcParts 和 SuspendExcStates 的当前状态。

上述标志的默认值未设置,“scontrol reconfig”将使用 slurm.conf 文件中的定义重建分区信息。

重新排队退出
启用自动重新排队对于以指定值退出的批处理作业。 用逗号分隔多个退出代码,和/或使用“-”分隔符指定数字范围(例如“RequeueExit=1-9,18”) 作业将被放回待处理状态,稍后再次调度。 重新启动的作业将有环境变量 SLURM_RESTART_COUNT 设置为作业已重新启动的次数。

重新排队退出保持
启用自动重新排队对于以指定值退出的批处理作业,这些作业在用户手动释放之前将被保持。 用逗号分隔多个退出代码,和/或使用“-”分隔符指定数字范围(例如“RequeueExitHold=10-12,16”) 这些作业将处于 JOB_SPECIAL_EXIT 退出状态。 重新启动的作业将有环境变量 SLURM_RESTART_COUNT 设置为作业已重新启动的次数。

恢复失败程序
当节点未能恢复到 ResumeTimeout 时,将执行的程序。程序的参数将是失败节点的名称(使用 Slurm 的主机列表表达式格式)。 如果它们运行超过配置的最大全局或分区 ResumeTimeoutSuspendTimeout,程序将被终止。

恢复程序
Slurm 支持一种机制,以减少长时间处于空闲状态的节点的功耗。 这通常通过降低电压和频率或关闭节点来实现。 恢复程序 是在分配给处于省电模式的节点工作时将执行的程序。 出于可靠性原因,恢复程序 可能会在节点上执行多次,当 slurmctld 守护进程崩溃并重新启动时。 如果 恢复程序 无法将节点恢复到服务状态,且 slurmd 响应并更新 BootTime,则应将节点状态设置为 DOWN,这将导致与该节点关联的任何作业重新排队 - 如果节点在 ResumeTimeout 内未注册,这将自动发生。 SchedulerParameters=requeue_on_resume_failure 可用于在这种情况下始终重新排队批处理作业,即使作业请求不重新排队。 如果节点实际上未重启(即在配置了多个 slurmd 时),使用“-b”选项启动 slurmd 可能会有用。 该程序以 SlurmUser 身份执行。 程序的参数将是要从省电模式中移除的节点名称(使用 Slurm 的主机列表表达式格式)。通过读取由 SLURM_RESUME_FILE 环境变量指定的临时文件,可以获得作业到节点的映射。 该文件在 slurmctld 关闭时关闭。如果恢复程序正在运行,slurmctld 的关闭将延迟最多十秒,以便给恢复程序时间读取该文件。因此,该文件应在恢复程序开始时读取。 默认情况下,不运行任何程序。 如果它们运行超过配置的最大全局或分区 ResumeTimeoutSuspendTimeout,程序将被终止。

恢复速率
通过 恢复程序 将处于省电模式的节点恢复到正常操作的速率。 该值是每分钟的节点数量,可以用于防止在同一时间分配大量处于省电模式的节点工作时出现电力激增(例如,启动大型作业)。 值为零将导致不施加限制。 默认值为每分钟 300 个节点。

恢复超时
发出节点恢复请求和节点实际可用之间允许的最大时间(以秒为单位)。 在此时间范围内未能响应的节点将被标记为 DOWN,调度在该节点上的作业将被重新排队(如果可能)。 在此时间范围之后重启的节点将被标记为 DOWN,原因是“节点意外重启”。 默认值为 60 秒,最大值为 65533 或 INFINITE。

预留后置脚本
slurmctld 在预留结束时执行的程序的完全限定路径名。它在运行中的预留被删除时不运行。该程序可用于取消作业、修改 分区配置等。 将传递命名的预留作为程序的参数。 默认情况下没有后置脚本。

预留超时
描述在达到预留结束时间后,已在预留中运行的作业应被允许执行的时间。 时间段以分钟为单位指定,默认值为 0(立即终止作业)。 该值不得超过 65533 分钟,尽管支持值“UNLIMITED”,以允许作业在其预留终止后无限期运行。

预留前置脚本
slurmctld 在预留开始时执行的程序的完全限定路径名。该程序可用于取消作业、修改 分区配置等。 将传递命名的预留作为程序的参数。 默认情况下没有前置脚本。

返回服务
控制何时将 DOWN 节点恢复到服务。 默认值为 0。 支持的值包括
0
节点将保持在 DOWN 状态,直到系统管理员显式更改其状态(即使 slurmd 守护进程注册并恢复通信)。

1
只有当 DOWN 节点由于无响应而被设置为 DOWN 时,节点在注册有效配置后将可用于使用。 如果节点因任何其他原因(内存不足、意外重启等)被设置为 DOWN,则其状态不会自动更改。 节点在注册有效配置时,如果其内存、GRES、CPU 数等等于或大于 slurm.conf 中配置的值。

2
无论节点因何原因被设置为 DOWN,节点在注册有效配置后将可用于使用。 节点在注册有效配置时,如果其内存、GRES、CPU 数等等于或大于 slurm.conf 中配置的值。

调度程序参数
此参数的解释因 SchedulerType 而异。 多个选项可以用逗号分隔。
允许零许可证
如果设置,则请求超过配置许可证的作业提交不会被拒绝。

关联限制停止
如果设置,并且由于关联限制作业无法启动,则不要尝试在该分区中启动任何低优先级作业。设置此项可能会降低系统吞吐量和利用率,但可以通过防止较大作业无限期启动来避免潜在的饥饿。

批处理调度延迟=#
批处理作业调度可以延迟的时间(以秒为单位)。 这在高吞吐量环境中非常有用,在该环境中,批处理作业以非常高的速度提交(即使用 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_userbf_max_job_partbf_max_job_testbf_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_depthbf_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_partbf_max_job_testbf_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_partbf_max_job_testbf_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=#
在运行作业完成或其他常规操作发生时,尝试调度的默认作业数量(即队列深度),但是调度器的运行频率可能会受到 defersched_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,仍支持以向后兼容。

SchedulerTimeSlice
启用群体调度时每个时间片的秒数(PreemptMode=SUSPEND,GANG)。 值必须在 5 秒到 65533 秒之间。 默认值为 30 秒。

SchedulerType
标识要使用的调度器类型。 可以使用 scontrol 命令手动更改作业优先级(如果需要)。 可接受的值包括:
sched/backfill
用于回填调度模块,以增强默认的 FIFO 调度。 回填调度将在不延迟任何高优先级作业的预期启动时间的情况下启动低优先级作业。 回填调度的有效性取决于用户是否指定作业时间限制,否则所有作业将具有相同的时间限制,回填将变得不可能。 请注意上述 SchedulerParameters 选项的文档。 这是默认配置。

sched/builtin
这是 FIFO 调度器,按优先级顺序启动作业。 如果分区中的任何作业无法调度,则该分区中的任何低优先级作业都将不会被调度。 对于由于分区约束(例如时间限制)或关闭/排水节点而无法运行的作业,将做出例外。 在这种情况下,可以启动低优先级作业,而不会影响高优先级作业。

ScronParameters
多个选项可以用逗号分隔。
enable
启用使用 scrontab 提交和管理定期重复作业。

explicit_scancel
取消 scrontab 作业时,要求用户在 scancel 中显式请求使用 --cron 标志取消作业。

SelectType
标识要使用的资源选择算法类型。 更改时,所有作业信息(运行和待处理)将丢失,因为每个插件使用的作业状态保存格式不同。 唯一的例外是从遗留的 cons_res 更改为 cons_tres。

可接受的值包括

select/cons_tres
节点内的资源(核心、内存、GPU 和所有其他可跟踪资源)作为可消耗资源单独分配。 请注意,可以通过使用 OverSubscribe=Exclusive 选项将整个节点分配给作业以供选择的分区。 有关更多信息,请参见分区 OverSubscribe 参数。 这是默认值。

select/linear
用于假设一维节点数组的整个节点分配,其中顺序节点更可取。 对于异构集群(例如,各个节点上的 CPU 数量不同),资源分配将根据作业的节点和 CPU 规范优先考虑高 CPU 数量的节点,如果配置了 TopologyPlugin=topology/flat。使用其他拓扑插件与 select/linear 和异构节点不建议使用,可能导致有效的作业分配请求被拒绝。线性插件不设计用于跟踪节点上的通用资源。在需要跟踪通用资源(例如 GPU)的情况下,应使用 cons_tres 插件。

SelectTypeParameters
SelectTypeParameters 的允许值取决于配置的 SelectType 值。 对于 SelectType=select/linear,唯一支持的选项是 CR_ONE_TASK_PER_CORECR_Memory,这将内存视为可消耗资源,并防止作业抢占或群体调度时的内存过度分配。 默认情况下,SelectType=select/linear 将整个节点分配给作业,而不考虑其内存消耗。 默认情况下,SelectType=select/cons_tres 使用 CR_Core_Memory,在考虑作业的内存消耗的同时将核心分配给作业。

以下选项由 SelectType=select/cons_tres 插件支持:

CR_CPU
CPU 是可消耗资源。 配置每个节点上的 CPU 数量,这可能等于核心或超线程的数量,具体取决于所需的最小资源分配。 节点的 BoardsSocketsCoresPerSocketThreadsPerCore 可以选择性配置,从而导致作业分配具有更好的局部性;但是这样做将防止在每个核心上分配多个作业。

CR_CPU_Memory
CPU 和内存是可消耗资源。 配置每个节点上的 CPU 数量,这可能等于核心或超线程的数量,具体取决于所需的最小资源分配。 节点的 BoardsSocketsCoresPerSocketThreadsPerCore 可以选择性配置,从而导致作业分配具有更好的局部性;但是这样做将防止在每个核心上分配多个作业。 强烈建议为 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=YESOverSubscribe=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选项仅用于过滤掉配置内存较低的节点,并不考虑正在运行的作业。例如,两个请求节点所有内存的作业可以同时运行。

SlurmctldAddr
用于与当前活动的slurmctld守护进程进行通信的可选地址,通常与当前活动服务器的虚拟IP地址一起使用。 如果未指定此参数,则每个主服务器和备份服务器将具有其自己的唯一地址,用于根据SlurmctldHost参数中指定的内容进行通信。 如果指定了此参数,则SlurmctldHost参数仍将用于与特定的slurmctld主服务器或备份服务器进行通信,例如使它们全部读取当前配置文件或关闭。 另请参见SlurmctldPrimaryOffProgSlurmctldPrimaryOnProg配置参数,以配置程序以操作虚拟IP地址。

SlurmctldDebug
提供slurmctld守护进程日志的详细程度。 默认值为info。 如果slurmctld守护进程以-v或--verbose选项启动,则该调试级别将在重新配置时保留或恢复。
quiet
不记录任何内容

fatal
仅记录致命错误

error
仅记录错误

info
记录错误和一般信息消息

verbose
记录错误和详细信息消息

debug
记录错误、详细信息消息和调试消息

debug2
记录错误、详细信息消息和更多调试消息

debug3
记录错误、详细信息消息和甚至更多调试消息

debug4
记录错误、详细信息消息和甚至更多调试消息

debug5
记录错误、详细信息消息和甚至更多调试消息

SlurmctldHost
执行Slurm控制守护进程的机器的短名称或长名称(即命令“hostname -s”返回的名称)。 此主机名可选地后跟IP地址或可以识别该地址的名称,括在括号中。例如:
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目录,该目录必须始终可由主控制器和所有备份控制器读取和写入。

如果需要更改此设置,请参阅重新定位控制器部分。

SlurmctldLogFile
完全限定的文件路径,用于写入slurmctld守护进程的日志。 默认值为无(通过syslog执行日志记录)。
如果指定了路径名,请参阅日志记录部分。

SlurmctldParameters
多个选项可以用逗号分隔。
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检索配置文件和PrologEpilog脚本,并且在任何“scontrol reconfigure”命令上,新的配置和脚本将自动推送并应用于以“无配置”模式运行的节点。 有关更多详细信息,请参见https://slurm.schedmd.com/configless_slurm.html

注意:使用Include指令的包含文件仅在文件名没有路径分隔符并且位于slurm.conf旁边时被推送。

注意PrologEpilog脚本仅在文件名没有路径分隔符并且位于slurm.conf旁边时被推送。 不支持通配符模式(参见glob(7))。

idle_on_node_suspend
在使用SuspendProgram挂起节点时,将节点标记为空闲,无论当前状态如何,以便节点在稍后时间可以恢复。

node_reg_mem_percent=#
节点允许注册的内存百分比,而不被标记为低内存无效。默认值为100。对于State=CLOUD节点,默认值为90。要禁用此功能,请将其设置为100。config_overrides优先于此选项。

建议配置task/cgroupConstrainRamSpace。内存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。

SlurmctldPidFile
完全限定的文件路径,用于写入slurmctld守护进程的进程ID。这可用于自动信号处理。 默认值为“/var/run/slurmctld.pid”。

SlurmctldPort
Slurm控制器slurmctld监听的工作端口号。默认值为在系统构建时建立的SLURMCTLD_PORT。如果没有明确指定,它将设置为6817。 SlurmctldPort还可以配置为支持一系列端口号,以便通过指定两个用破折号分隔的数字(例如SlurmctldPort=6817-6818)来接受更多的传入消息。 注意slurmctldslurmd守护进程必须不在同一节点上执行,或者SlurmctldPortSlurmdPort的值必须不同。

注意:在Cray系统上,特定于领域的IP地址(RSIP)将自动尝试与在端口8192-60000上打开的任何内容进行交互。 配置SlurmctldPort以使用配置的SrunPortRange和RSIP的端口范围之外的端口。

SlurmctldPrimaryOffProg
当作为主服务器运行的slurmctld守护进程变为备份服务器时执行此程序。控制器将在完全关闭之前等待此脚本结束。默认情况下不执行任何程序。 另请参见相关的“SlurmctldPrimaryOnProg”参数。

SlurmctldPrimaryOnProg
当作为备份服务器运行的slurmctld守护进程变为主服务器时执行此程序。控制器将在完全启动之前等待此脚本结束。默认情况下不执行任何程序。 当使用虚拟IP地址管理高可用Slurm服务时,可以使用此程序将IP地址添加到接口(并可选地尝试杀死无响应的slurmctld守护进程并刷新本地以太网设备上的ARP缓存)。 另请参见相关的“SlurmctldPrimaryOffProg”参数。

SlurmctldSyslogDebug
slurmctld守护进程将在指定的详细程度下将事件记录到syslog文件。如果未设置,slurmctld守护进程将在fatal级别记录到syslog,除非没有SlurmctldLogFile并且它在后台运行,在这种情况下,它将在SlurmctldDebug指定的级别记录到syslog(如果SlurmctldDebug设置为quiet,则为fatal),或者在前台运行时,将设置为安静。
quiet
不记录任何内容

fatal
仅记录致命错误

error
仅记录错误

info
记录错误和一般信息消息

verbose
记录错误和详细信息消息

debug
记录错误、详细信息消息和调试消息

debug2
记录错误、详细信息消息和更多调试消息

debug3
记录错误、详细信息消息和甚至更多调试消息

debug4
记录错误、详细信息消息和甚至更多调试消息

debug5
记录错误、详细信息消息和甚至更多调试消息

注意:默认情况下,Slurm的systemd服务文件在前台启动守护进程,使用-D选项。这意味着systemd将捕获stdout/stderr输出并将其打印到syslog,而不管Slurm是否直接打印到syslog。要防止systemd这样做,请在各自的服务文件或覆盖文件中添加“StandardOutput=null”和“StandardError=null”。

SlurmctldTimeout
备份控制器在假设控制权之前等待主控制器响应的时间间隔(以秒为单位)。 默认值为120秒。 不得超过65533。

SlurmdDebug
提供slurmd守护进程日志的详细程度。 默认值为info
quiet
不记录任何内容

fatal
仅记录致命错误

error
仅记录错误

info
记录错误和一般信息消息

verbose
记录错误和详细信息消息

debug
记录错误和详细信息消息以及调试消息

debug2
记录错误和详细信息消息以及更多调试消息

debug3
记录错误和详细信息消息以及甚至更多调试消息

debug4
记录错误和详细信息消息以及甚至更多调试消息

debug5
记录错误和详细信息消息以及甚至更多调试消息

SlurmdLogFile
完全限定的文件路径,用于写入slurmd守护进程的日志。 默认值为无(通过syslog执行日志记录)。 名称中的第一个“%h”将被替换为运行slurmd的主机名。 名称中的第一个“%n”将被替换为运行slurmd的Slurm节点名称。
如果指定了路径名,请参阅日志记录部分。

SlurmdParameters
特定于Slurmd的参数。 多个选项可以用逗号分隔。
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()调用将在作业容器内运行。

SlurmdPidFile
完全限定的文件路径,用于写入slurmd守护进程的进程ID。这可用于自动信号处理。 名称中的第一个“%h”将被替换为运行slurmd的主机名。 名称中的第一个“%n”将被替换为运行slurmd的Slurm节点名称。 默认值为“/var/run/slurmd.pid”。

SlurmdPort
Slurm计算节点守护进程slurmd监听的工作端口号。默认值为在系统构建时建立的SLURMD_PORT。如果没有明确指定,其值将为6818。 注意slurmctldslurmd守护进程必须不在同一节点上执行,或者SlurmctldPortSlurmdPort的值必须不同。

注意:在Cray系统上,特定于领域的IP地址(RSIP)将自动尝试与在端口8192-60000上打开的任何内容进行交互。 配置SlurmdPort以使用配置的SrunPortRange和RSIP的端口范围之外的端口。

SlurmdSpoolDir
完全限定的文件路径,用于写入slurmd守护进程的状态信息和批处理作业脚本信息。这必须是所有节点的公共路径名,但应表示每个节点的本地目录(引用本地文件系统)。默认值为“/var/spool/slurmd”。 名称中的第一个“%h”将被替换为运行slurmd的主机名。 名称中的第一个“%n”将被替换为运行slurmd的Slurm节点名称。

SlurmdSyslogDebug
slurmd守护进程将在指定的详细程度下将事件记录到syslog文件。如果未设置,slurmd守护进程将在fatal级别记录到syslog,除非没有SlurmdLogFile并且它在后台运行,在这种情况下,它将在SlurmdDebug指定的级别记录到syslog(如果SlurmdDebug设置为quiet,则为fatal),或者在前台运行时,将设置为安静。
quiet
不记录任何内容

fatal
仅记录致命错误

error
仅记录错误

info
记录错误和一般信息消息

verbose
记录错误和详细信息消息

debug
记录错误和详细信息消息以及调试消息

debug2
记录错误和详细信息消息以及更多调试消息

debug3
记录错误和详细信息消息以及甚至更多调试消息

debug4
记录错误和详细信息消息以及甚至更多调试消息

debug5
记录错误和详细信息消息以及甚至更多调试消息

OPT_debug3_3" href="#OPT_debug3_3">
记录错误和详细信息消息,甚至更多的调试消息

debug4
记录错误和详细信息消息,甚至更多的调试消息

debug5
记录错误和详细信息消息,甚至更多的调试消息

注意: 默认情况下,Slurm 的 systemd 服务文件以 -D 选项在前台启动守护进程。这意味着 systemd 将捕获 stdout/stderr 输出并将其打印到 syslog,而不依赖 Slurm 直接打印到 syslog。要防止 systemd 这样做,请在相应的服务文件或覆盖文件中添加 "StandardOutput=null" 和 "StandardError=null"。

SlurmdTimeout
Slurm 控制器等待 slurmd 响应的时间间隔(以秒为单位),在此之后将该节点的状态配置为 DOWN。值为零表示该节点不会被 slurmctld 测试以确认 slurmd 的状态,该节点不会自动设置为 DOWN 状态,表示 slurmd 不响应,其他工具将负责监控每个计算节点及其 slurmd 守护进程的状态。Slurm 的分层通信机制用于 ping slurmd 守护进程,以最小化系统噪声和开销。默认值为 300 秒。该值不得超过 65533 秒。

SlurmdUser
执行 slurmd 守护进程的用户名称。该用户必须在集群的所有节点上存在,以便进行 Slurm 组件之间通信的身份验证。默认值为 "root"。

SlurmSchedLogFile
调度事件日志文件的完全限定路径名。此参数的语法与 SlurmctldLogFile 相同。为了配置调度器日志记录,必须同时设置 SlurmSchedLogFileSlurmSchedLogLevel 参数。

SlurmSchedLogLevel
调度事件日志记录的初始级别,类似于用于控制 slurmctld 日志记录初始级别的 SlurmctldDebug 参数。SlurmSchedLogLevel 的有效值为 "0"(禁用调度器日志记录)和 "1"(启用调度器日志记录)。如果省略此参数,则默认值为 "0"(禁用)。为了配置调度器日志记录,必须同时设置 SlurmSchedLogFileSlurmSchedLogLevel 参数。可以使用 scontrol 动态更改调度器日志记录级别。

SlurmUser
执行 slurmctld 守护进程的用户名称。出于安全考虑,建议使用除 "root" 以外的用户。该用户必须在集群的所有节点上存在,以便进行 Slurm 组件之间通信的身份验证。默认值为 "root"。

SrunEpilog
在作业步骤完成后由 srun 运行的可执行文件的完全限定路径名。可执行文件的命令行参数将是作业步骤的命令和参数。此配置参数可以被 srun 的 --epilog 参数覆盖。请注意,虽然其他 "Epilog" 可执行文件(例如,TaskEpilog)是在执行任务的计算节点上由 slurmd 运行的,但 SrunEpilog 在执行 "srun" 的节点上运行。

SrunPortRange
srun 创建一组侦听端口以与控制器、slurmstepd 通信并处理应用程序 I/O。默认情况下,这些端口是临时的,意味着端口号由内核选择。使用此参数允许站点配置一系列端口,从中选择 srun 端口。如果站点希望仅允许某些端口范围在其网络上,这将非常有用。

注意: 在 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 个侦听端口。

SrunProlog
在作业步骤启动之前由 srun 运行的可执行文件的完全限定路径名。可执行文件的命令行参数将是作业步骤的命令和参数。此配置参数可以被 srun 的 --prolog 参数覆盖。请注意,虽然其他 "Prolog" 可执行文件(例如,TaskProlog)是在执行任务的计算节点上由 slurmd 运行的,但 SrunProlog 在执行 "srun" 的节点上运行。

StateSaveLocation
Slurm 控制器 slurmctld 保存其状态的目录的完全限定路径名(例如 "/usr/local/slurm/checkpoint")。Slurm 状态将保存在这里以便从系统故障中恢复。SlurmUser 必须能够在此目录中创建文件。如果您配置了次要的 SlurmctldHost,则该位置应可由两个系统读取和写入。由于所有运行和待处理的作业信息都存储在这里,建议使用可靠的文件系统(例如 RAID)。默认值为 "/var/spool"。如果任何 slurm 守护进程异常终止,其核心文件也将写入此目录。

SuspendExcNodes
指定即使节点在长时间空闲的情况下也不应进入省电模式的节点。使用 Slurm 的主机列表表达式或 NodeSets 识别节点,使用可选的 ":" 分隔符和要从前面的范围中排除的节点计数。例如 "nid[10-20]:4" 将防止在 "nid[10-20]" 集合中关闭 4 个已供电的节点。可以使用逗号分隔的列表指定多个节点集(例如 "nid[10-20]:4,nid[80-90]:2")。默认情况下,没有节点被排除。此值可以使用 scontrol 更新。有关设置持久性的,请参见 ReconfigFlags=KeepPowerSaveSettings

SuspendExcParts
指定即使节点在长时间空闲的情况下也不应进入省电模式的分区。可以通过逗号识别并分隔多个分区。默认情况下,没有节点被排除。此值可以使用 scontrol 更新。有关设置持久性的,请参见 ReconfigFlags=KeepPowerSaveSettings

SuspendExcStates
指定不应自动关闭的节点状态。有效状态包括 CLOUD、DOWN、DRAIN、DYNAMIC_FUTURE、DYNAMIC_NORM、FAIL、INVALID_REG、MAINTENANCE、NOT_RESPONDING、PERFCTRS、PLANNED 和 RESERVED。默认情况下,如果这些状态中的任何一个空闲时间超过 SuspendTime,将会被关闭。此值可以使用 scontrol 更新。有关设置持久性的,请参见 ReconfigFlags=KeepPowerSaveSettings

SuspendProgram
SuspendProgram 是在节点长时间空闲时执行的程序。该程序应将节点置于某种省电模式。这可以用于降低节点的频率和电压或完全关闭节点。该程序以 SlurmUser 身份执行。程序的参数将是要置于省电模式的节点名称(使用 Slurm 的主机列表表达式格式)。默认情况下,不运行任何程序。如果程序运行时间超过配置的最大全局或分区 ResumeTimeoutSuspendTimeout,将被终止。

SuspendRate
通过 SuspendProgram 将节点置于省电模式的速率。该值为每分钟节点数,可用于防止电力消耗大幅下降(例如,在大型作业完成后)。值为零表示不施加限制。默认值为每分钟 60 个节点。

SuspendTime
在此秒数内保持空闲或关闭的节点将被 SuspendProgram 置于省电模式。将 SuspendTime 设置为除 INFINITE(或 -1)以外的任何值将启用省电模式。INFINITE 是默认值。

SuspendTimeout
允许的最大时间(以秒为单位),在发出节点挂起请求和节点关闭之间。在此时,节点必须准备好根据需要发出恢复请求以进行新工作。默认值为 30 秒。

SwitchParameters
交换插件的可选参数。

在配置了 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_cafm_mtls_certfm_mtls_key

注意: 设置 fm_urlenable_stepmgr 是启用 Slingshot 硬件集合所必需的。

fm_mtls_ca
证书颁发机构(CA)捆绑文件或包含由 fabric manager 证书签名的文件的目录的路径。如果设置,当启用 Slingshot 硬件集合时,将验证 fabric manager 服务器的身份。另请参见 fm_mtls_certfm_mtls_key

注意: 此选项不是启用与 fabric manager 的 mTLS 身份验证所必需的。但是,如果没有它,客户端(slurmctld 和 stepmgr 进程)将无法验证服务器身份。

fm_mtls_cert
客户端公钥的路径。当启用 Slingshot 硬件集合时,这是启用与 fabric manager 的 mTLS 身份验证所必需的。另请参见 fm_mtls_cafm_mtls_key

fm_mtls_key
客户端私钥的路径。当启用 Slingshot 硬件集合时,这是启用与 fabric manager 的 mTLS 身份验证所必需的。另请参见 fm_mtls_cafm_mtls_cert

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

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

max_<rsrc>=<val>
此资源的每节点最大应用程序。

可以配置的资源包括:

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。

在配置了 SwitchType=switch/nvidia_imex 的系统上,支持以下参数:

imex_channel_count
可以配置的通道数量。通道允许节点创建共享内存的安全方法。默认值为 2048。

注意: 批处理和交互步骤将不会创建 imex 通道,因为它们在单个节点上运行。一旦开始创建跨节点的作业步骤,您将看到通道被创建。

SwitchType
标识用于应用程序通信的交换机或互连的类型。默认值是没有特殊插件需要特殊处理作业启动或终止(以太网和 InfiniBand)。所有 Slurm 守护进程、命令和正在运行的作业必须重新启动或重新配置,以使 SwitchType 的更改生效。如果在 slurmctld 重新启动时存在正在运行的作业,并且使用了新的 SwitchType 值,则可能会丢失所有处于任何状态的作业记录。可接受的值包括:
switch/hpe_slingshot
适用于 HPE Slingshot 系统。

switch/nvidia_imex
用于在 NVIDIA IMEX 域内分配唯一通道。

TaskEpilog
在每个任务终止后作为 slurm 作业的所有者执行的程序的完全限定路径名。有关执行顺序的详细信息,请参见 TaskProlog

TaskPlugin
标识任务启动插件的类型,通常用于提供节点内的资源管理(例如,将任务绑定到特定处理器)。可以在逗号分隔的列表中指定多个任务插件。"task/" 的前缀是可选的。默认情况下未设置。可接受的值包括:
task/affinity
使用 sched_setaffinity() 将进程绑定到指定资源。这启用 --cpu-bind 和/或 --mem-bind srun 选项。

task/cgroup
使用 Cgroups cpuset 接口启用对指定资源的进程限制。这启用 --cpu-bind 和/或 --mem-bind srun 选项。注意: 请参见 "man cgroup.conf" 以获取配置详细信息。

注意: 建议在配置 TaskPlugin 时将 task/cgroup,task/affinity 一起堆叠,并在 cgroup.conf 中设置 ConstrainCores=yes。此设置使用 task/affinity 插件为任务设置 CPU 掩码,并使用 task/cgroup 插件将任务限制在分配的 CPU 中。

TaskPluginParam
任务插件的可选参数。多个选项应以逗号分隔。NoneSocketsCoresThreads 是互斥的,并被视为 --cpu-bind 默认的最后可能来源。另请参见节点和分区 CpuBind 选项。
Cores
默认情况下将任务绑定到核心。覆盖自动绑定。

None
默认情况下不执行任何任务绑定。覆盖自动绑定。

Sockets
默认情况下绑定到插槽。覆盖自动绑定。

Threads
默认情况下绑定到线程。覆盖自动绑定。

SlurmdSpecOverride
如果 slurmd 在具有 cpuset 或内存限制的 cgroup 中启动,则 CpuSpecList 和 MemSpecLimit 将被设置并覆盖配置的值。这将避免从这些限制中调度资源。在 cgroup/v1 中,slurmd 和 slurmstepd 守护进程将无法使用这些资源。在正常行为中,cgroup/v1 将守护进程限制在 CpuSpecList 和 MemSpecLimit。

SlurmdOffSpec
如果为节点识别了专用核心或 CPU(即为节点配置了 CoreSpecCountCpuSpecList),则在计算节点上运行的 Slurm 守护进程(即 slurmd 和 slurmstepd)应在这些资源之外运行(即专用资源对 Slurm 守护进程和由 Slurm 生成的作业完全不可用)。

OOMKillStep
设置此参数以在步骤的任何任务触发 OOM 事件时终止所有节点中的整个步骤。

这适用于整个分配,但不适用于外部步骤。可以由用户覆盖。

注意: 此参数需要 task/cgroup 插件、Cgroups v2 和内核版本高于 4.19。

Verbose
在任务运行之前详细报告绑定信息。

Autobind
在 "自动绑定" 找不到匹配项的情况下设置默认绑定。设置为 Threads、Cores 或 Sockets(例如 TaskPluginParam=autobind=threads)。

TaskProlog
在每个任务启动之前作为 slurm 作业的所有者执行的程序的完全限定路径名。除了正常的环境变量外,还有 SLURM_TASK_PID 可用于识别正在启动的任务的进程 ID。此程序的标准输出可用于控制用户程序的环境变量和输出。
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 中的函数

TCPTimeout
建立 TCP 连接的允许时间。默认值为 2 秒。

TLSParameters
TLSType 配置的 TLS 插件的逗号分隔选项。支持的值包括:
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。

TLSType
指定将使用的 TLS 实现。默认情况下未设置。当前可接受的值:
tls/s2n
使用 s2n TLS 插件。需要额外配置并导致显著的处理开销,但允许所有 Slurm 通信加密。有关更多详细信息,请参阅 TLS 指南:<https://slurm.schedmd.com/tls.html>

TmpFS
可供用户作业临时存储的文件系统的完全限定路径名。此参数用于建立节点的 TmpDisk 空间。默认值为 "/tmp"。

TopologyParam
逗号分隔的选项,标识网络拓扑选项。
Dragonfly
为 Dragonfly 网络优化分配。有效时 TopologyPlugin=topology/tree

RoutePart
使用分区节点列表从控制器路由通信,而不是使用插件的默认路由计算。一旦在计算节点上,通信将使用请求插件的正常算法进行路由,遵循 TreeWidth(如果适用)。如果节点在多个分区中,将使用第一个看到的分区。控制器将直接与不在分区中的任何节点进行通信。

SwitchAsNodeRank
将相同的节点排名分配给一个叶子交换机下的所有节点。如果节点的命名约定与网络拓扑不匹配,这可能会很有用。

RouteTree
使用 topology.conf 文件中定义的交换机层次结构进行路由,而不仅仅是调度。有效时 TopologyPlugin=topology/tree。与动态节点不兼容。

TopoMaxSizeUnroll=#
从最小-最大节点作业规范自动展开的单个作业大小的最大数量。默认值:-1(选项禁用)。有效时 TopologyPlugin=topology/block

TopoOptional
仅在作业包含交换机选项时优化网络拓扑的分配。由于为拓扑优化资源分配涉及更高的系统开销,因此可以使用此选项仅对可以利用它的作业施加额外的开销。如果大多数作业分配未针对网络拓扑进行优化,它们可能会碎片化资源,以至于其他作业的拓扑优化将难以实现。 注意: 启用此选项后,作业可以跨越没有共同父交换机的节点。

TopologyPlugin
指定用于网络拓扑的插件。有效值包括 topology/treetopology/block。OPT_TopologyPlugin" href="#OPT_TopologyPlugin">

确定用于确定网络拓扑和优化作业分配以最小化网络争用的插件。有关详细信息,请参见下面的网络拓扑。未来可能提供其他插件,以直接从网络收集拓扑信息。可接受的值包括:
topology/block
用于块网络拓扑,如topology.conf(5)手册页中所述。

topology/flat
在一维拓扑上进行最佳适应逻辑。这是默认值。

topology/tree
用于具有select/cons_tres插件的分层网络,如topology.conf(5)手册页中所述。

注意: 如果存在topology.yaml,则忽略此选项。

TrackWCKey
布尔值是或否。用于设置工作负载特征密钥的显示和跟踪。必须设置为跟踪正确的wckey使用情况。 注意: 您还必须在slurmdbd.conf文件中设置TrackWCKey以创建历史使用报告。

TreeWidth
Slurmd守护进程使用虚拟树网络进行通信。TreeWidth指定树的宽度(即扇出)。默认值为16,这意味着每个slurmd守护进程可以与最多16个其他slurmd守护进程通信。此值在卸载slurmctld(最大16个线程运行)、通信时间和节点故障容忍度(4368个节点可以通过三次消息跳跃联系)之间取得平衡。默认值对于大多数集群来说效果良好,但在更大系统上可以增加此值,以避免在节点无响应的情况下出现长时间超时和重传。该值不得超过65533。

UnkillableStepProgram
如果作业步骤中的进程在UnkillableStepTimeout变量指定的时间内被确定为不可杀死,则将执行UnkillableStepProgram指定的程序。默认情况下不运行任何程序。

有关更多信息,请参见不可杀死步骤程序脚本部分。

UnkillableStepTimeout
Slurm在决定作业步骤中的进程不可杀死之前等待的时间长度(以秒为单位)(在它们被SIGKILL信号后)。默认超时值为60秒或MessageTimeout值的五倍,以较大者为准。如果超过此值,计算节点将被排空,以防止将来在该节点上调度作业。

注意: 确保UnkillableStepTimeout至少是MessageTimeout的5倍,否则可能导致节点意外排空。

UsePAM
如果设置为1,将启用PAM(Linux的可插拔认证模块)。PAM用于建立资源限制的上限。启用PAM支持后,本地系统管理员可以动态配置系统资源限制。更改资源限制的上限不会改变正在运行的作业的限制,只有在更改后启动的作业才会采用新限制。默认值为0(不启用PAM支持)。请记住,PAM还需要配置以支持Slurm作为服务。对于使用PAM目录基础配置选项的站点,应创建名为slurm的配置文件。应在文件中包含的模块类型、控制标志和模块路径名称为:
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的设置值工作。

VSizeFactor
作业请求中的内存规格适用于实际内存大小(也称为常驻集大小)。可以通过将虚拟内存限制为其实际内存分配的某个百分比来强制执行作业和作业步骤的虚拟内存限制。VSizeFactor参数指定作业或作业步骤的虚拟内存限制作为其实际内存限制的百分比。例如,如果作业的实际内存限制为500MB,且VSizeFactor设置为101,则如果其实际内存超过500MB或其虚拟内存超过505MB(实际内存限制的101%),作业将被终止。默认值为0,禁用虚拟内存限制的强制执行。该值不得超过65533百分比。

注意: 此参数取决于在JobAcctGatherParams中配置的OverMemoryKill。还可以配置TaskPlugin以使用task/cgroup进行内存强制执行。通过cgroups进行的内存强制执行不会受到VSizeFactor的影响。

WaitTime
指定srun命令在第一个任务终止后默认应等待多少秒,然后再终止所有剩余任务。srun命令行上的“--wait”选项将覆盖此值。默认值为0,禁用此功能。不得超过65533秒。

X11Parameters
用于Slurm内置的X11转发实现。
home_xauthority
如果设置,计算节点上的xauth数据将放置在~/.Xauthority中,而不是在TmpFS下的临时文件中。

 

节点配置

要由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
为系统使用保留的核心数量。根据SlurmdOffSpecTaskPluginParam选项,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的支持值为nonesocketldom(NUMA)、corethread

CPUs
节点上的逻辑处理器数量(例如“2”)。可以设置为总插槽数(仅支持select/linear)、核心或线程数。当您只想调度超线程节点上的核心时,这可能会很有用。如果省略CPUs,则其默认值将等于BoardsSocketsCoresPerSocketThreadsPerCore的乘积。

CpuSpecList
为系统使用保留的Slurm抽象CPU ID的逗号分隔列表。如果指定了此列表,则将扩展以包括同一核心上的所有其他CPU(如果有)。根据SlurmdOffSpecTaskPluginParam选项,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=resumePartitionName=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,则将根据CPUsCoresPerSocketThreadsPerCore推断。注意: 如果您有多核处理器,您可能需要指定这些参数。Sockets和SocketsPerBoard是互斥的。如果在使用Boards时指定Sockets,则Sockets被解释为SocketsPerBoard,而不是总插槽数。默认值为1。

SocketsPerBoard
基板上的物理处理器插槽/芯片数量。Sockets和SocketsPerBoard是互斥的。默认值为1。

State
节点在启动用户作业时的状态。可接受的值为CLOUDDOWNDRAINFAILFAILINGFUTUREUNKNOWN。节点状态BUSYIDLE不应在节点配置中指定,而应将节点状态设置为UNKNOWN。将节点状态设置为UNKNOWN将导致节点状态被设置为BUSYIDLE或根据恢复的系统状态信息设置为其他适当状态。默认值为UNKNOWN。另请参见下面的DownNodes参数。
CLOUD
指示节点存在于云中。其初始状态将被视为关闭。节点在从Slurm的状态保存文件恢复其状态或slurmd守护进程在计算节点上启动后将可用。

DOWN
指示节点失败并且无法分配工作。

DRAIN
指示节点无法分配工作。

FAIL
指示节点预计将很快失败,没有作业分配给它,并且不会分配给任何新作业。

FAILING
指示节点预计将很快失败,分配给它一个或多个作业,但不会分配给任何新作业。

FUTURE
指示节点为未来使用而定义,并且在Slurm守护进程启动时不需要存在。这些节点可以通过使用scontrol命令更新节点状态而简单地变为可用,而无需重新启动slurmctld守护进程。在这些节点变为可用后,改变它们在slurm.conf文件中的状态。在这些节点变为可用之前,使用任何Slurm命令将无法看到它们,也不会尝试与它们联系。FUTURE节点在重启时保留非FUTURE状态。使用scontrol将节点放回FUTURE状态。

动态未来节点
以-F[<feature>]启动的slurmd将与匹配相同配置(插槽、核心、线程)的FUTURE节点相关联,如slurmd -C报告的那样。节点的NodeAddr和NodeHostname将自动从slurmd中检索,并在设置回FUTURE状态时清除。

UNKNOWN
指示节点的状态未定义,但将在该节点的slurmd守护进程注册时建立(设置为BUSYIDLE)。UNKNOWN是默认状态。

ThreadsPerCore
单个物理核心中的逻辑线程数量(例如“2”)。请注意,Slurm可以将资源分配给作业,直到核心的分辨率。如果您的系统配置为每个核心多个线程,则除非您配置SelectTypeParameters=CR_CPU加上CPUs,否则不支持在每个线程上执行不同作业。请勿配置SocketsCoresPerSocketThreadsPerCore。作业可以在一个作业步骤内每个线程执行一个任务,或在每个线程上执行不同的作业步骤。请注意,如果您在每个核心上运行超过1个线程,并且运行select/cons_tres插件,则希望将SelectTypeParameters变量设置为CR_CPU以避免意外结果。默认值为1。

TmpDisk
TmpFS中临时磁盘存储的总大小(以兆字节为单位)(例如“16384”)。TmpFS(“临时文件系统”)标识作业应使用的临时存储位置。请注意,这并不表示节点上可用的用户可用空间的数量,仅表示文件系统的总大小。系统管理员应确保根据需要清除此文件系统,以便用户作业可以访问大部分空间。可以使用配置文件中指定的Prolog和/或Epilog程序来确保文件系统保持干净。默认值为0。

Topology
以逗号分隔的对的列表,格式为<topology_name>:<topology_unit>。其中<topology_unit>是块名称或叶交换机的名称。可以提供中间交换机名称--以“:”分隔--并在需要时创建(例如Topology=topo-tree:sw_root:s1:s2)。此设置将覆盖在topology.conf(5)和topology.yaml(5)中指定的节点拓扑隶属配置。

Weight
节点在调度中的优先级。在所有条件相等的情况下,将为满足其要求的最低权重的节点分配作业。例如,异构节点集合可以放入单个分区,以提高系统的利用率、响应能力和能力。如果较小的内存节点能够满足作业的要求,则优先分配较小的内存节点,而不是较大的内存节点。权重的单位是任意的,但应将较大的权重分配给具有更多处理器、内存、磁盘空间、更高处理器速度等的节点。请注意,如果作业分配请求无法使用最低权重的节点满足,则将下一组最低权重的节点添加到考虑使用的节点集合中(根据需要重复以获取更高的权重值)。如果您绝对希望最小化分配给作业的较高权重节点的数量(以更高的调度开销为代价),则为每个节点分配一个不同的Weight值,它们将单独添加到考虑调度的节点池中。

默认值为1。

注意: 节点权重首先在当前可用节点中考虑。例如,POWERED_DOWN和POWERING_UP节点的较低权重将在启动的IDLE节点之前不会被评估。

 

DOWN节点配置

DownNodes=参数允许您将某些节点标记为DOWNDRAINFAILFAILINGFUTURE状态,而不更改在NodeName=规范下列出的永久配置。

DownNodes
来自NodeName=规范的任何节点名称或节点名称列表。

Reason
识别节点处于DOWNDRAINFAILFAILINGFUTURE状态的原因。使用引号括起多个单词的原因。

State
节点在启动用户作业时的状态。可接受的值为DOWNDRAINFAILFAILINGFUTURE。有关这些状态的更多信息,请参见上面State部分的描述。默认值为DOWN

 

NODESET配置

nodeset配置允许您为特定节点集定义名称,这可以简化分区配置部分,特别是对于异构或公寓式系统。每个nodeset可以通过显式节点列表和/或通过特定配置特征过滤节点来定义。如果同时使用Feature=Nodes=,则nodeset将是两个子集的并集。请注意,nodeset目前仅用于简化分区定义,无法在分区配置之外使用。

Feature
所有具有此特征的节点将作为此nodeset的一部分包含。仅允许单个特征。

Nodes
此集合中的节点列表。

NodeSet
节点集的唯一名称。不得与任何NodeName定义重叠。

 

分区配置

分区配置允许您为不同的节点组(或分区)建立不同的作业限制或访问控制。节点可以在多个分区中,使分区作为通用队列。例如,可以将相同的节点集放入两个不同的分区,每个分区具有不同的约束(时间限制、作业大小、允许使用该分区的组等)。作业在单个分区内分配资源。可以通过记录指定默认值,其中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的支持值为nonesocketldom(NUMA)、corethread

Default
如果设置此关键字,则未指定分区的作业将使用此分区。可能的值为“YES”和“NO”。默认值为“NO”。

DefaultTime
未指定值的作业使用的运行时间限制。如果未设置,则将使用MaxTime。格式与MaxTime相同。

DefCpuPerGPU
每个分配的GPU分配的CPU的默认数量。此值仅在作业未指定--cpus-per-task和--cpus-per-gpu时使用。

DefMemPerCPU
每个分配的CPU可用的默认实际内存大小(以兆字节为单位)。用于避免内存过度订阅和导致分页。DefMemPerCPU通常在将单个处理器分配给作业时使用(SelectType=select/cons_tres)。如果未设置,将使用整个集群的DefMemPerCPU值。另请参见DefMemPerGPUDefMemPerNodeMaxMemPerCPUDefMemPerCPUDefMemPerGPUDefMemPerNode是互斥的。

DefMemPerGPU
每个分配的GPU可用的默认实际内存大小(以兆字节为单位)。请注意,系统将尽力预测将使用哪些GPU,但这可能会在作业提交和开始时间之间发生变化,从而导致MaxMemPerNode在异构作业中可能无法按预期工作。另请参见DefMemPerCPUDefMemPerNodeMaxMemPerCPUDefMemPerCPUDefMemPerGPUDefMemPerNode是互斥的。

DefMemPerNode
每个分配的节点可用的默认实际内存大小(以兆字节为单位)。用于避免内存过度订阅和导致分页。DefMemPerNode通常在整个节点分配给作业时使用(SelectType=select/linear)并且资源被过度订阅(OverSubscribe=yesOverSubscribe=force)。如果未设置,将使用整个集群的DefMemPerNode值。另请参见DefMemPerCPUDefMemPerGPUMaxMemPerCPUDefMemPerCPUDefMemPerGPUDefMemPerNode是互斥的。

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值。另请参见DefMemPerCPUMaxMemPerNodeMaxMemPerCPUMaxMemPerNode是互斥的。

MaxMemPerNode
在作业分配中每个分配节点可用的最大实际内存大小(以兆字节为单位)。用于避免内存过度订阅和导致分页。MaxMemPerNode通常在整个节点分配给作业时使用(SelectType=select/linear)并且资源被过度订阅(OverSubscribe=yesOverSubscribe=force)。如果未设置,将使用整个集群的MaxMemPerNode值。另请参见DefMemPerNodeMaxMemPerCPUMaxMemPerCPUMaxMemPerNode是互斥的。

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=NOOverSubscribe=FORCE:1禁用同一分区中资源的常规过度订阅,但仍允许由于抢占或在具有相同PriorityTier的重叠分区中进行过度订阅。设置OverSubscribe=NO将防止在所有情况下发生过度订阅。

注意:如果使用PreemptType=preempt/qos,可以为FORCE指定大于1的值。例如,OverSubscribe=FORCE:2将允许每个资源通常有两个作业,但只有在基于QOS的抢占情况下才能启动第三个作业。

注意:如果在slurm.conf中将OverSubscribe配置为FORCEYES,并且系统未配置为使用抢占(PreemptMode=OFF),则会计可能会轻易增长到超过实际利用率的值。在此类系统上,可能会在slurmdbd日志中收到错误消息:“我们分配的时间超过了可能的时间。”

YES
使分区中的所有资源(除了GRES)在作业请求时可用于共享。资源仅在用户在作业提交时明确请求“--oversubscribe”选项时才会被过度订阅。后面可以跟冒号和正在运行或挂起状态的最大作业数。例如“OverSubscribe=YES:4”使每个节点、插槽或核心可以同时执行最多四个作业。仅建议用于运行帮派调度的系统(PreemptMode=suspend,gang)。

NO
所选资源分配给单个作业。没有资源将分配给多个作业。

注意:即使您使用PreemptMode=suspend,gang,设置OverSubscribe=NO将禁用该分区上的抢占。如果您希望禁用常规过度订阅,但仍允许因抢占而挂起,则使用OverSubscribe=FORCE:1

OverTimeLimit
作业可以超过其时间限制的分钟数,超过后将被取消。通常,作业的时间限制被视为限制,达到该限制时作业将被终止。配置OverTimeLimit将导致作业的时间限制被视为限制。将OverTimeLimit值添加到时间限制提供了时间限制,在此时作业被取消。这对于基于每个作业的软时间限制的回填调度特别有用。如果未设置,将使用整个集群的OverTimeLimit值。不得超过65533分钟。也支持值“UNLIMITED”。

PartitionName
分区可以被引用的名称(例如“Interactive”)。此名称可以在用户提交作业时指定。如果PartitionName为“DEFAULT”,则指定的值将适用于后续的分区规范,除非在该分区记录中明确设置为其他值或用不同的默认值替换。每行中PartitionName为“DEFAULT”的内容将替换或添加到先前的默认值,而不会重新初始化默认值。

PowerDownOnIdle
如果设置为“YES”,并且为分区启用了节能,则分配自该分区的节点将在分配至少一个作业后请求关闭电源。这些节点在从COMPLETING转换为IDLE之前不会关闭电源。如果设置为“NO”,则节能将按分区配置的方式运行。默认值为“NO”。有关更多详细信息,请参见<https://slurm.schedmd.com/power_save.html>和<https://slurm.schedmd.com/elastic_computing.html>。

注意:以下情况将导致从COMPLETING转换为IDLE:
完成所有正在运行的作业而没有分配其他作业。
ExclusiveUser=YES,并且在所有正在运行的作业完成后,但在分配另一个用户的作业之前。
OverSubscribe=EXCLUSIVE,并且在运行作业完成后但在分配另一个作业之前。

注意:当PowerDownOnIdle设置为NO时,节点仍然会在空闲时被关闭。

另请参见SuspendTime

PreemptMode
用于抢占作业或启用该分区的帮派调度的机制,当PreemptType=preempt/partition_prio配置时。此特定分区的PreemptMode配置参数将覆盖该分区的集群范围的PreemptMode。可以设置为OFF以禁用该分区的抢占和帮派调度。另请参见PriorityTier和上述集群范围的PreemptMode参数的描述以获取更多详细信息。
GANG选项用于启用帮派调度,而不管是否启用了抢占(即与PreemptType设置无关)。它可以与PreemptMode设置一起指定,两个选项用逗号分隔(例如PreemptMode=SUSPEND,GANG)。
有关更多详细信息,请参见<preempt>和<gang_scheduling>。

注意:出于性能原因,回填调度程序为作业保留整个节点,而不是部分节点。如果在回填调度期间,作业抢占一个或多个其他作业,则这些被抢占作业的整个节点将为抢占作业保留,即使抢占作业请求的资源少于此。即使其他作业可以适应这些节点,这些保留的节点在该回填周期内对其他作业不可用。因此,作业在单个回填迭代期间可能会抢占比它们请求的更多资源。
注意:对于异构作业被视为抢占,所有组件必须有资格进行抢占。当异构作业被抢占时,具有最高顺序的抢占模式(SUSPEND(最高)、REQUEUECANCEL(最低))的作业的第一个识别组件将用于设置所有组件的抢占模式。异构作业的GraceTime和用户警告信号保持唯一。异构作业被排除在帮派调度操作之外。

OFF
禁用作业抢占和帮派调度。

CANCEL
被抢占的作业将被取消。

GANG
启用同一分区中作业的帮派调度(时间切片),并允许恢复挂起的作业。

注意:帮派调度在每个分区中独立执行,因此,如果您只想通过OverSubscribe进行时间切片,而不进行任何抢占,则不建议配置具有重叠节点的分区。另一方面,如果您希望使用PreemptType=preempt/partition_prio允许来自更高PriorityTier分区的作业挂起来自较低PriorityTier分区的作业以在释放的资源上运行,则需要重叠分区,并且PreemptMode=SUSPEND,GANG以使用帮派调度程序恢复挂起的作业。在任何情况下,不会在不同分区之间进行时间切片。
注意:异构作业被排除在帮派调度操作之外。

REQUEUE
通过重新排队(如果可能)或取消作业来抢占作业。要重新排队,作业必须设置--requeue sbatch选项,或在slurm.conf中设置集群范围的JobRequeue参数为1

SUSPEND
被抢占的作业将被挂起,稍后帮派调度程序将恢复它们。因此,SUSPEND抢占模式始终需要在集群级别指定GANG选项。此外,由于挂起的作业仍将使用分配节点上的内存,Slurm需要能够跟踪内存资源以能够挂起作业。

如果被抢占的作业和抢占作业位于不同的分区,则被抢占的作业将保持挂起,直到抢占作业结束。
注意:由于帮派调度在每个分区中独立执行,如果使用PreemptType=preempt/partition_prio,则更高PriorityTier分区中的作业将挂起较低PriorityTier分区中的作业以在释放的资源上运行。只有当抢占作业结束时,挂起的作业才会被帮派调度程序恢复。
注意:挂起的作业将不会释放GRES。优先级更高的作业将无法抢占以获得对GRES的访问。

PriorityJobFactor
由优先级/多因素插件在计算作业优先级时使用的分区因子。默认为1。值为0将阻止此分区对作业优先级的增加。该值不得超过65533。另请参见PriorityTier。

PriorityTier
提交到具有更高PriorityTier值的分区的作业将在调度程序中优先于在具有较低PriorityTier值的分区中的待处理作业进行评估。如果PreemptType=preempt/partition_prio,它们还将被考虑抢占具有较低PriorityTier值的运行作业。该值不得超过65533。另请参见PriorityJobFactor。

QOS
用于扩展分区上QOS可用的限制。作业不会在与分区关联的情况下与此QOS关联。它们仍将与其请求的QOS关联。默认情况下,不使用任何QOS。有关更多详细信息,请参见QOS文档<https://slurm.schedmd.com/qos.html>,包括在此参数中使用相对QOS时的特殊条件。注意:如果在分区的QOS和作业的QOS中都设置了限制,则将尊重分区QOS限制,除非作业的QOS设置了OverPartQOS标志,在这种情况下,将优先考虑作业的QOS限制。

ReqResv
指定此分区的用户在提交作业时必须指定预留。此选项在限制可能具有更高优先级或额外资源的分区的使用时可能很有用,仅允许在预留内使用。可能的值为“YES”和“NO”。默认值为“NO”。

ResumeTimeout
发出节点恢复请求和节点实际可用之间允许的最大时间(以秒为单位)。在此时间范围内未能响应的节点将被标记为DOWN,并且在节点上调度的作业将尽可能重新排队。在此时间范围后重新启动的节点将被标记为DOWN,原因是“节点意外重启”。对于在多个分区中设置了此选项的节点,将采用最高时间。如果在任何分区上未设置,则节点将使用为整个集群设置的ResumeTimeout值。最大值为65533或INFINITE。

RootOnly
指定只有用户ID为零(即用户root)可以在此分区中分配资源。用户root可以为任何其他用户分配资源,但请求必须由用户root发起。此选项对于由某些外部实体(例如更高级别的作业管理器)管理的分区可能很有用,并防止用户直接使用这些资源。可能的值为“YES”和“NO”。默认值为“NO”。

SelectTypeParameters
特定于分区的资源分配类型。此选项替换全局SelectTypeParameters值。支持的值为CR_CoreCR_Core_MemoryCR_SocketCR_Socket_Memory。使用要求系统范围的SelectTypeParameters值设置为之前列出的四个支持值中的任何一个;否则,将忽略特定于分区的值。

Shared
Shared配置参数已被上述OverSubscribe参数替换。

State
分区的状态或可用性。可能的值为“UP”、“DOWN”、“DRAIN”和“INACTIVE”。默认值为“UP”。另请参见相关的“Alternate”关键字。
UP
指定可以在分区上排队新作业,并且作业可以分配节点并从该分区运行。

DOWN
指定可以在分区上排队新作业,但排队的作业不能分配节点并从该分区运行。已经在分区上运行的作业继续运行。必须显式取消作业以强制终止它们。

DRAIN
指定不允许在分区上排队新作业(作业提交请求将被拒绝并显示错误消息),但已经在分区上排队的作业可以分配节点并运行。另请参见“Alternate”分区规范。

INACTIVE
指定不允许在分区上排队新作业,并且已经排队的作业不能分配节点并运行。另请参见“Alternate”分区规范。

SuspendTime
在此秒数内保持空闲或关闭的节点将被SuspendProgram置于节能模式。对于在多个分区中设置了此选项的节点,将采用最高时间。如果在任何分区上未设置,则节点将使用为整个集群设置的SuspendTime值。将SuspendTime设置为INFINITE将禁用在此分区中挂起节点。将SuspendTime设置为除INFINITE(或-1)以外的任何值将启用节能模式。

SuspendTimeout
发出节点挂起请求和节点关闭之间允许的最大时间(以秒为单位)。在此时,节点必须准备好发出恢复请求,以便为新工作提供所需的服务。对于在多个分区中设置了此选项的节点,将采用最高时间。如果在任何分区上未设置,则节点将使用为整个集群设置的SuspendTimeout值。

Topology
topology.yaml中定义的拓扑名称,供此分区中的作业使用。

TRESBillingWeights
TRESBillingWeights用于定义每种跟踪的TRES类型的计费权重(请参见AccountingStorageTRES),这些权重将在计算作业的使用时使用。计算的使用在计算公平份额和在作业上强制执行TRES计费限制时使用。

计费权重以<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选项。

 

前置和后置脚本

有多种前置和后置程序选项可在不同的权限和不同的时间执行。最有可能使用的四个选项是:PrologEpilog(在每个计算节点上为每个作业执行一次)以及PrologSlurmctldEpilogSlurmctld(在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重新启动时重新启动。

有关作业的信息通过环境变量传递给脚本。除非另有说明,这些环境变量可在上述提到的每个脚本(PrologEpilogPrologSlurmctldEpilogSlurmctld)中使用。有关环境变量的完整列表,包括在SrunPrologSrunEpilogTaskPrologTaskEpilog中可用的环境变量,请参见前置和后置指南<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} ...”);可在PrologSlurmctldSrunPrologTaskPrologEpilogSlurmctldSrunEpilogTaskEpilog中使用。

SLURM_ARRAY_TASK_ID
如果此作业是作业数组的一部分,则将设置为任务ID。否则将不设置。要引用作业数组的此特定任务,请将SLURM_ARRAY_JOB_ID与SLURM_ARRAY_TASK_ID结合(例如“scontrol update ${SLURM_ARRAY_JOB_ID}_{$SLURM_ARRAY_TASK_ID} ...”);可在PrologSlurmctldSrunPrologTaskPrologEpilogSlurmctldSrunEpilogTaskEpilog中使用。

SLURM_ARRAY_TASK_MAX
如果此作业是作业数组的一部分,则将设置为最大任务ID。否则将不设置。可在PrologSlurmctldSrunPrologTaskPrologEpilogSlurmctldSrunEpilogTaskEpilog中使用。

SLURM_ARRAY_TASK_MIN
如果此作业是作业数组的一部分,则将设置为最小任务ID。否则将不设置。可在PrologSlurmctldSrunPrologTaskPrologEpilogSlurmctldSrunEpilogTaskEpilog中使用。

SLURM_ARRAY_TASK_STEP
如果此作业是作业数组的一部分,则将设置为任务ID的步长。否则将不设置。可在PrologSlurmctldSrunPrologTaskPrologEpilogSlurmctldSrunEpilogTaskEpilog中使用。

SLURM_CLUSTER_NAME
执行作业的集群名称。可在PrologPrologSlurmctldEpilogEpilogSlurmctld中使用。

SLURM_CONF
slurm.conf文件的位置。可在PrologSrunPrologTaskPrologEpilogSrunEpilogTaskEpilog中使用。

SLURMD_NODENAME
运行任务的节点名称。在并行作业在多个计算节点上执行的情况下,各个任务将在每个计算节点上设置此环境变量为不同的值。可在PrologSrunPrologTaskPrologEpilogSrunEpilogTaskEpilog中使用。

SLURM_JOB_ACCOUNT
用于作业的账户名称。

SLURM_JOB_COMMENT
添加到作业的注释。可在PrologPrologSlurmctldEpilogEpilogSlurmctld中使用。

SLURM_JOB_CONSTRAINTS
运行作业所需的特性。可在PrologPrologSlurmctldEpilogEpilogSlurmctld中使用。

SLURM_JOB_DERIVED_EC
所有作业步骤的最高退出代码。可在EpilogEpilogSlurmctld中使用。

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

SLURM_JOB_EXIT_CODE
作业脚本(或salloc)的退出代码。该值是由wait()系统调用返回的状态(请参见wait(2))。可在EpilogEpilogSlurmctld中使用。

SLURM_JOB_EXIT_CODE2
作业脚本(或salloc)的退出代码。该值的格式为<exit>:<sig>。第一个数字是退出代码,通常由exit()函数设置。第二个数字是导致进程终止的信号编号(如果它是由信号终止的)。可在EpilogEpilogSlurmctld中使用。

SLURM_JOB_EXTRA
添加到作业的额外字段。可在PrologPrologSlurmctldEpilogEpilogSlurmctld中使用。

SLURM_JOB_GID
作业所有者的组ID。

SLURM_JOB_GPUS
作业分配中的GPU的GPU ID(如果有)。可在PrologSrunPrologTaskPrologEpilogSrunEpilogTaskEpilog中使用。

SLURM_JOB_GROUP
作业所有者的组名称。可在PrologSlurmctldEpilogSlurmctld中使用。

SLURM_JOB_ID
作业ID。

SLURM_JOBID
作业ID。

SLURM_JOB_NAME
作业名称。 在 PrologSlurmctldSrunPrologTaskPrologEpilogSlurmctldSrunEpilogTaskEpilog 中可用。

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 文件相同的目录中搜索。

%c
将在 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)


 

索引

名称
描述
参数
节点配置
DOWN 节点配置
节点集配置
分区配置
前置和后置脚本
不可终止步骤程序脚本
网络拓扑
迁移控制器
示例
包含修饰符
文件和目录权限
日志记录
版权
文件
另见

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