@@ -54,7 +54,7 @@ icon: fontawesome/solid/tasks
5454??? tip "munge 测试"
5555
5656 可通过以下命令测试 munge 是否配置正确:
57-
57+
5858 ```text
5959 harry@foo:~$ echo 'Hello World' | munge | ssh bar unmunge
6060 STATUS: Success (0)
@@ -68,15 +68,15 @@ icon: fontawesome/solid/tasks
6868 UID: harry (1000)
6969 GID: harry (1000)
7070 LENGTH: 12
71-
71+
7272 Hello World
7373 ```
7474
7575统一的文件系统(如 NFS 或分布式文件系统)、网络配置和用户管理(如 LDAP)并非部署任何作业调度系统的强制要求,但通常是高性能计算集群的基础设施。请参阅本项目中的其他文档对此部分进行配置。
7676
7777### Slurm 配置文件 {#slurm-config-files}
7878
79- Slurm 需要的所有配置文件均存储在 ` /etc/slurm ` 下,管理员** 务必** 时刻保证集群中所有节点上文件内容一致(Slurm 会检查 hash),否则可能导致不可预期的错误。目前推荐的方式是使用 Configless Slurm(见后文) ,仅在管理节点上维护配置文件,其他节点实时进行拉取,以减少管理负担。
79+ Slurm 需要的所有配置文件均存储在 ` /etc/slurm ` 下,管理员** 务必** 时刻保证集群中所有节点上文件内容一致(Slurm 会检查 hash),否则可能导致不可预期的错误。目前推荐的方式是使用 [ Configless Slurm] ( #configless-slurm ) ,仅在管理节点上维护配置文件,其他节点实时进行拉取,以减少管理负担。
8080
8181Debian 打包的 Slurm 没有提供默认配置文件,可通过官方的 [ Configuration Tool] ( https://slurm.schedmd.com/configurator.html ) 生成 ` slurm.conf ` ,并根据实际情况进行修改。一些关键的配置项包括:
8282
@@ -182,7 +182,7 @@ Slurm 的权限管理依赖于其账户数据库,因此需要 slurmdbd 的支
182182 * `normal` 是所有选课学生,优先级系数为 5,每个任务最多使用 112 个 CPU 核心,最长运行时间为 2 分钟,每个用户最多同时提交 5 个任务,超过限制的任务会被拒绝。
183183 * `lab-ta` 是课程助教,优先级系数为 10,没有其他限制。
184184 * `lab-out` 为其他用户,优先级系数为 0,每个任务最长运行时间为 5 分钟,每个用户最多同时提交 3 个任务,超过限制的任务会被拒绝。
185-
185+
186186 此集群 `slurm.conf` 中的优先级相关配置是:
187187
188188 ```ini
@@ -231,26 +231,26 @@ Slurm 的权限管理依赖于其账户数据库,因此需要 slurmdbd 的支
231231
232232 在作者管理的集群上,sshd 的 PAM 配置如下:
233233
234- ```text
234+ ```shell
235235 # PAM configuration for the Secure Shell service
236-
236+
237237 # Standard Un*x authentication.
238238 @include common-auth
239-
239+
240240 # Disallow non-root logins when /etc/nologin exists.
241241 account sufficient pam_listfile.so item=user sense=allow file=/etc/ssh/allowed_users onerr=fail
242242 account sufficient pam_listfile.so item=user sense=allow file=/etc/ssh/allowed_groups onerr=fail
243243 -account required pam_slurm_adopt.so action_adopt_failure=deny action_generic_failure=deny
244244 account required pam_nologin.so
245-
245+
246246 # Uncomment and edit /etc/security/access.conf if you need to set complex
247247 # access limits that are hard to express in sshd_config.
248248 # account required pam_access.so
249-
249+
250250 # Standard Un*x authorization.
251251 @include common-account
252252 ```
253-
253+
254254 `/etc/ssh/allowed_users` 和 `/etc/ssh/allowed_groups` 额外列出了允许登录的用户和用户组,无论它们是否有正在运行的作业。作者还配置了更严格的 `action_adopt_failure=deny` 选项,进一步防止有用户进程残留。
255255
256256### Configless Slurm
@@ -261,26 +261,26 @@ Slurm 的权限管理依赖于其账户数据库,因此需要 slurmdbd 的支
261261
2622621. 在 `slurm.conf` 中配置 `SlurmctldParameters=enable_configless` 并重启 slurmctld;
2632632. 使得 slurmd 能找到 slurmctld:可以通过 DNS SRV 记录或者启动时传递 `--conf-server` 参数,或者传递 `SLURM_CONF_SERVER` 环境变量;
264- 3. 如果使用 SRV 记录,需要保证 slurmd 启动时本地没有任何配置(因为 [搜索顺序](https://slurm.schedmd.com/configless_slurm.html#NOTES) 中 SRV 记录优先级最低)。
264+ 3. 如果使用 DNS SRV 记录,需要保证 slurmd 启动时本地没有任何配置(因为 [搜索顺序](https://slurm.schedmd.com/configless_slurm.html#NOTES) 中 DNS SRV 记录优先级最低)。
265265
266266简单起见,可以选择传参的方案,即在所有安装 slurmd 的节点上修改 `/etc/default/slurmd`,在 `SLURMD_OPTIONS` 中添加:
267267
268- ```text
268+ ```shell
269269SLURMD_OPTIONS="--conf-server your_ctl_server:6817"
270270```
271271
272272(此部分可选)保险起见,还可以通过 systemd 对 slurmd 隐藏整个 ` /etc/slurm ` 的文件夹,避免潜在的冲突/混淆问题。运行 ` systemctl edit slurmd ` ,增加:
273273
274- ``` init
274+ ``` ini
275275[Service]
276276TemporaryFileSystem =/etc/slurm
277277```
278278
279- ??? tip "trixie 前的特殊配置"
279+ ??? tip "Trixie 前的特殊配置"
280+
281+ 较旧(Debian Trixie 前)的 `slurmd.service` 中含有多余的 `ConditionPathExists=/etc/slurm/slurmd.conf`,需要一并覆盖清除,否则会导致无配置的情况下,服务无法正常启动:
280282
281- 较旧(trixie 前)的 `slurmd.service` 中含有多余的 `ConditionPathExists=/etc/slurm/slurmd.conf`,需要一并覆盖清除,否则会导致无配置的情况下,服务无法正常启动:
282-
283- ```init
283+ ```ini
284284 [Unit]
285285 ConditionPathExists=
286286 ```
@@ -309,7 +309,7 @@ systemctl enable --now sackd
309309
310310 目前 Slurm 对容器的支持仍然比较初级,配置较为晦涩难懂(如对共享文件系统有更复杂的要求),且对不同的容器运行时支持程度不一,限制较多。作者尚未成功配置过此功能,建议有兴趣的读者仔细阅读官方文档,谨慎部署。
311311
312- ### Slurm Restful API (slurmrestd)
312+ ### Slurm Restful API (slurmrestd) {#slurmrestd}
313313
314314通过运行 slurmrestd 守护进程,可以为 Slurm 提供基于 RESTful 的 API 接口,方便用户和管理员通过 HTTP 请求与 Slurm 进行结构化的数据交互,而无需拼接命令、解析文本。很多图形化的作业提交平台正是基于此接口实现的。
315315
0 commit comments