Slurm(Simple Linux Utility for Resource Management)是 SchedMD 开发并维护的开源集群资源管理与作业调度系统,广泛应用于大型与超大型 Linux 集群的节点分配、作业排队与并行任务启动。它的核心设计是「资源声明式使用」:用户提交作业时只描述「要多少节点、多少 CPU/GPU 核、跑多久、放进哪个分区」,由调度器在整集群范围内统一决策,而不是靠管理员手工分机器。全球 Top500 超级计算榜单中的大量系统以及国内绝大多数智算中心、高校超算平台,都把 Slurm 作为标准调度层。本文按从零上手路径组织:先看速览卡建立整体认知,再完成安装配置、用 30 分钟跑通第一个作业,之后深入核心架构,接着讲生产部署与监控,最后提供同类工具对比、常见误区、面试题与学习资源,让读者读完即可在自己环境里落地。
对 AI 从业者而言,Slurm 是通往大模型训练与推理集群的「标准交接语言」——掌握它的分区、队列、GPU 调度与记账机制,是从单卡开发走向集群生产的必备技能。
目录
速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。
为什么需要 Slurm:从手工分发任务到统一调度
在没有调度器的集群里,管理员的日常工作是在每个节点上手动执行训练脚本:先 ssh node1 "nohup python train.py &",再逐台重复同样的操作;用户想知道哪些机器空闲,只能靠口头询问或 Excel 表格记录。这种方式有三个无法回避的问题:一是资源视图不透明,GPU 被谁占了、占多久完全不可知;二是多用户同时抢机器时没有排队机制,冲突只能靠人工协调;三是完全没有资源限额与记账,无法回答「这个项目一个月用了多少卡时」这类成本问题。
Slurm 把这些问题收敛为一个「资源池 + 队列」模型:所有计算节点统一注册进集群,节点按用途划分为分区(Partition);用户通过 sbatch 把作业投递到分区排队,调度器依据优先级、公平共享与回填策略决定作业何时何地运行;slurmctld 负责全局决策,slurmd 在每个节点上执行任务。记账层 slurmdbd 把每次作业的资源使用量写入数据库,让「谁用的、用多少」有据可查。对 AI 训练场景,Slurm 还通过 GRES(通用资源)机制原生支持 GPU 的申请、隔离与绑定,使得「申请 2 张 A100、独占单卡、绑定 NUMA」这类需求可以直接写进作业脚本。
与 OpenPBS、LSF 等同类工具相比,Slurm 的插件化架构是其特征:调度算法、记账后端、任务启动方式、认证机制都以插件形式加载,同一套二进制可以适配从小型 GPU 工作站到 Top500 超算的不同规模。也正因如此,Slurm 的初始配置比 PBS 略繁琐,但换来的是一致的行为模型与大规模验证的稳定性。
安装与环境配置:完成 MUNGE 认证与单节点集群
安装 Slurm 前先理解两个基础概念:slurmctld 是集群的控制守护进程,负责作业调度与资源状态管理;slurmd 是计算节点的执行守护进程,负责在本机启动和监控任务;MUNGE 是 Slurm 默认的认证机制,为节点间通信提供一致性凭证。以下步骤在单台机器上搭建一个最小的四 CPU「伪集群」,跑通后再横向扩展到多节点。
第一步,安装依赖与 MUNGE,并让 MUNGE 在开机自启。第二步,从官方下载站拉取源码包,编译并安装 Slurm。第三步,创建运行时目录与最小配置文件 slurm.conf,其中 NodeName 必须与机器主机名一致。第四步,依次启动 slurmctld 与 slurmd,通过 sinfo 验证节点进入 idle 状态。
# 第一步:安装 MUNGE 与编译工具(以 RHEL/CentOS 系为例)sudo dnf install -y munge munge-libs munge-devel gcc make rpm-build openssl-develsudo systemctl enable --now munge # 第二步:编译安装 Slurm(以 24.11 为例)wget https://download.schedmd.com/slurm/slurm-24.11.0.tar.bz2tar xjf slurm-24.11.0.tar.bz2 && cd slurm-24.11.0./configure --prefix=/usr --sysconfdir=/etc/slurmmake -j$(nproc) && sudo make install # 第三步:准备目录并写入最小配置(NodeName 替换为当前主机名)sudo mkdir -p /etc/slurm /var/spool/slurmctld /var/spool/slurmdsudo chown -R $(whoami) /var/spool/slurmctld /var/spool/slurmdcat <<'EOF' | sudo tee /etc/slurm/slurm.confClusterName=localclusterSlurmctldHost=$(hostname)ProctrackType=proctrack/linuxprocReturnToService=2SlurmctldPidFile=/var/run/slurmctld.pidSlurmdPidFile=/var/run/slurmd.pidSlurmdSpoolDir=/var/spool/slurmdStateSaveLocation=/var/spool/slurmctldSwitchType=switch/noneTaskPlugin=task/noneSchedulerType=sched/backfillSelectType=select/cons_resSelectTypeParameters=CR_CoreNodeName=$(hostname) CPUs=4 State=UNKNOWNPartitionName=debug Nodes=$(hostname) Default=YES MaxTime=01:00:00 State=UPEOF # 第四步:启动并验证sudo slurmctld -c && sudo slurmd -csinfo
快速上手:30 分钟跑通第一个批处理作业
最小可行流程的思路:用 sbatch 提交一个打印主机名与任务序号的脚本,通过 squeue 观察作业从排队(PD)到运行(R)再到完成的过程,最后在输出文件里看到结果。sbatch 与后面要讲的 srun 的核心区别在于:sbatch 提交后立即返回、作业由调度器在后台找资源执行,适合训练、仿真这类耗时任务。
1. 在工作目录创建 hello.sh,文件内以 #SBATCH 开头的行是资源声明,写到 #!/bin/bash 之后:
2. 提交脚本:sbatch hello.sh,终端会打印 job id(例如 Submitted batch job 42)。
3. 立即执行 squeue 查看队列,此时作业状态为 R(运行中),ST 列下方还有 PD(排队)等状态码含义可在 man squeue 中查询。
4. 等待脚本结束,查看同目录下的 slurm-42.out,其中包含输出文本;用 sacct -j 42 查看该作业的 CPU 使用量与结束码(ExitCode 为 0:0 表示成功)。
进阶技巧:给 sbatch 增加 --gres=gpu:1 即可在配置了 GPU 的分区中申请单卡;需要调整脚本参数时不必改文件,sbatch --cpus-per-task=4 hello.sh 会覆盖脚本内的同名声明。批量运行不同超参数组合时,使用 --array=0-9 让同一个脚本并行跑 10 个副本,用环境变量 $SLURM_ARRAY_TASK_ID 区分任务序号。
#!/bin/bash #SBATCH --job-name=hello #SBATCH --partition=debug #SBATCH --nodes=1 #SBATCH --ntasks=1 #SBATCH --time=00:05:00 echo "Hello from $SLURMD_NODENAME" sleep 30
核心能力详解:五大支柱
支柱一:分区与节点管理。节点按用途分组为分区(Partition),例如 debug 分区用于短时测试、gpu 分区挂载 GPU 节点、fat 分区挂载大内存节点。sinfo 展示分区与节点状态,scontrol show node 查看单节点详细资源(CPU、内存、GPU、空闲与分配情况)。分区支持 Priority、MaxTime、QOS 等约束,从入口控制作业的准入条件。
支柱二:作业调度与回填。Slurm 默认使用 sched/backfill 调度器:在保证高优先级作业按序运行的前提下,把低优先级的短作业「回填」进高优先级作业尚未占用的时间窗口,显著提升集群利用率。作业生命周期由状态机管理,从 PD(排队)到 R(运行)再到 CG(完成中)的每一次迁移都可通过 squeue -l 追溯。多因子优先级(priority/multifactor)综合 Age、Fairshare、QOS、Partition 等维度计算分数,兼顾公平与吞吐。
支柱三:作业依赖与阵列。--dependency=afterok:123 表示等待作业 123 成功后才启动,适用于数据生产、模型训练、结果评估的流水线编排;afterany、afternotok、singleton 分别覆盖其他失败/并发场景。作业阵列(--array=1-100%5)一次提交 100 个任务、并发不超过 5 个,是超参数搜索的标准姿势;任务间通过 $SLURM_ARRAY_TASK_ID 区分。
支柱四:GPU 与异构资源调度。GRES(Generic Resource)机制将 GPU 建模为可申请资源:--gres=gpu:2 申请 2 张卡,--gpus-per-node=a100:1 指定每节点 1 张 A100。配合 SelectTypeParameters=CR_Core 与 cgroup 插件,任务获得与申请一致的 CPU/GPU 隔离,避免「申请了 2 卡却跑 4 卡」的超卖问题。
支柱五:记账与配额。slurmdbd 配合 MySQL/MariaDB 记录每次作业的 submit time、run time、CPU 消耗与卡时;sacct 按作业、用户或项目维度查询历史用量,sshare 查看 Fairshare 配额与使用情况。多集群场景下通过 AccountingStorageHost 统一接入同一个数据库,实现跨集群的一体化成本核算。
生产部署与监控:从上线到运维
部署方式一:主备控制节点 HA。slurmctld 是整个集群的中枢,生产环境必须做高可用。在 slurm.conf 中配置 BackupController= 与 BackupAddr= 后,主节点宕机时备用节点自动接管;常见做法是主备节点各跑一个 slurmd,配合 keepalived 或 Pacemaker 管理虚拟 IP,实现秒级切换。数据库层 slurmdbd 同样需做主备或使用云 RDS,避免记账单点。
部署方式二:多节点扩容。新计算节点加入集群只需三步:安装相同版本的 Slurm 与 MUNGE;将主节点的 /etc/munge/munge.key 拷贝到新节点并重启 munge 服务;在 slurm.conf 的 NodeName 行追加新节点并执行 scontrol reconfigure。节点启动后自动向 slurmctld 注册,sinfo 显示 idle 即就绪。需注意所有节点的 Slurm 版本必须一致或保持兼容,否则注册会被拒绝。
可观测性。日常排障入口:sinfo -R 查看节点 DOWN/DRAIN 原因,squeue -l -u 用户名 查看用户作业详情,sacct -j 作业号 -l 查看完整记账记录,sstat -j 作业号 --format=MaxRSS,MaxVMSize 查看运行中作业的内存峰值。进监控系统层面,官方维护的 Prometheus exporter(SchedMD/slurm_exporter)周期抓取 sinfo、squeue、sacct 数据,可把队列深度、节点状态、GPU 利用率接入 Grafana 告警。
<p class=“para-label“>避坑清单:</p><ul class=”dash-list”><li>MUNGE 密钥不一致:所有节点必须共享完全相同的 /etc/munge/munge.key;密钥不匹配时 slurmd 反复向 slurmctld 注册失败,节点显示 DOWN。先验证 munge -n | munge -w 在两端输出一致再排查其他原因。</li><li>NodeName 与主机名不匹配:slurm.conf 中的 NodeName 必须与 hostname 输出一致,否则节点始终无法从 DRAIN 恢复,sinfo 报 NodeNotResponding。</li><li>slurmctld 无状态目录权限:StateSaveLocation 指向的目录若属主错误,主备切换或重启会丢失作业状态;保持该目录仅由运行 slurmctld 的用户可写。</li><li>--mem 是调度承诺而非强制限制:未启用 cgroup 插件时任务实际内存超限不会被杀掉,会拖垮同节点其他作业;生产环境务必配置 proctrack/cgroup 并开启 ConstrainRAMSpace。</li><li>手动 scancel 时把数组作业 ID 当普通作业:取消数组作业需 scancel 数组的 JobID,或加 --array 参数精确到某子任务;直接按子任务号逐个取消易遗漏。</li></ul>
| 维度 | Slurm | OpenPBS | IBM LSF | Altair Grid Engine |
|---|---|---|---|---|
| 定位 | 开源集群调度事实标准,超算/智算中心主流 | 开源 PBS 系继任者,主打 HPC 与云上 PBS | 商业企业级负载管理,金融/工业仿真常见 | 商业衍生版 Grid Engine,侧重传统 Unix 集群 |
| 调度策略 | 多因子优先级 + 回填,可插拔调度插件 | 优先级队列 + 回填,配置模型较传统 | 内置负载均衡、资源预留与抢占策略 | 队列间优先级 + 资源共享,策略相对静态 |
| 规模支撑 | Top500 超算前茅,万节点级规模化验证充分 | 中大规模 HPC 平台,千节点级成熟 | 大规模企业集群,金融/制造场景验证充分 | 中规模集群,架构偏旧 |
| GPU/异构资源 | GRES 原生支持 GPU 分配与绑定 | 支持 GPU,但资源建模精细度弱于 GRES | 支持异构资源池,功能完整但深度依赖版本 | 对 GPU 支持有限,新版才逐步完善 |
| 企业级功能 | 记账/配额成熟,HA 需自行搭建 | 记账完整,企业支持由 Altair 提供 | 内置高可用、license 管理、混合云调度 | 商业支持,基础记账与配额齐全 |
| License | GPL v2.0 开源免费 | 开源免费,商业咨询另购 | 商业订阅,按节点或按年计费 | 商业订阅,前景存疑 |
| 学习曲线 | 中等偏陡:配置项多,但资料与社区最丰富 | 中等:命令与 Slurm 相似,概念易迁移 | 中等:文档完善,但网上案例少于开源系 | 平缓:设计简单,新功能演进慢 |
| 适合谁 | AI Infra 工程师、超算管理员、学术/智算平台 | 已有 PBS 历史的政府/高校超算中心 | 对 SLA 与商业支持敏感的企业用户 | 仅维护既有 Grid Engine 存量系统的团队 |
选型建议:新建 AI 训练集群或智算平台,优先选择 Slurm——它在 GPU 调度、开源社区与超算规模验证方面的综合优势最明显;若企业已有 PBS 历史资产和运维惯性,继续用 OpenPBS 可降低迁移成本;金融、半导体仿真等对商业 SLA 有硬性要求的场景选 LSF;Grid Engine 不建议新项目采用,只宜存量维护并规划迁移。
版本迭代
Slurm 自 2002 年发布以来,从单一调度器演化为高度插件化的架构,SchedMD 约每半年发布一个功能版本,代号随日期命名(如 23.11 即 2023 年 11 月版),每年末的版本通常承担长期维护角色。下文列表覆盖 21.08 至 24.11 的功能版本线。(截至训练数据,SchedMD 可能已发布 25.05 等更新版本)
| 版本 | 时间 | 变化 | 提升 |
|---|---|---|---|
| 21.08 | 2021-08 | slurmrestd API 与插件框架增强 | 作业外部管理能力提升,为 Infra 平台对接提供稳定入口 |
| 22.05 | 2022-05 | GPU 参数规范化与容器支持 | 引入标准化 GPU 申请参数,改善容器内作业的资源感知 |
| 23.02 | 2023-02 | 健康检查与故障转移优化 | 节点健康检测更细粒度,HA 切换健壮性提升 |
| 23.11 | 2023-11 | LTS 长期支持版本 | 进入长周期维护,适合生产环境稳定基座 |
| 24.05 | 2024-05 | 配置校验与启动流程优化 | 提高大规模部署下配置错误检出率与作业拉起速度 |
| 24.11 | 2024-11 | 调度特性与系统维护持续演进 | 当前功能版本,社区主力使用版本之一 |
Slurm 的版本演进主线是「从调度核心走向平台基础设施」——21.08 起 slurmrestd 让外部系统能通过 REST API 管理作业,22.05 后对 GPU 和容器的支持日趋成熟,23.11 以 LTS 形态锁定一批稳定生产版本。选型建议:生产环境选择 LTS 或已发布 6 个月以上的功能版本(如 23.11、24.05),避免追随最新版首个小版本;新功能尝鲜再跟进 24.11 及后续迭代。Slurm 无公开的 AI 基准评测分数(如 MMLU 类),其「评测」主要体现在 Top500 装机占比与超算社区的工程验证,此处不做数值罗列。
AI 应用场景
大模型 GPU 训练集群的资源调度
阶段:集群基础层 / 训练作业管理
解决的问题:多团队共享 GPU 集群时,手工分配机器导致空闲碎片与争抢并存。Slurm 将 GPU 纳入 GRES 统一池化,数据预处理、训练、评估作业在同一套队列里有序调度,管理员通过分区把「测试环境」与「生产训练」物理隔离,避免相互干扰。
具体案例:某智算中心用 Slurm 管理千卡集群,算法团队提交 sbatch --gres=gpu:8 --nodes=8 train.sbatch 启动 8 机 64 卡训练;配合 sched/backfill 与 Fairshare 配额,官方文档及社区部署报告显示,回填策略可将集群整体资源利用率提升 20%-30%,超参数搜索阵列(--array=0-50%10)免去人工循环提交脚本。
多团队共享集群的公平调度与成本核算
阶段:资源治理 / 成本归因
解决的问题:多个业务线共用一套集群时,高优先级团队可能长期饿死其他团队。Slurm 的多因子优先级把 Fairshare(公平份额)、QOS(服务质量)纳入分数计算,配以 sacct 记账数据,管理员能够量化回答「A 团队本月用了多少卡时、应摊多少成本」。
具体案例:高校超算平台按课题组配置 Fairshare 系数与 GrpTRES 组配额,sshare 展示各组历史使用占比,超配额作业自动排队等释放;月底导出 sacct -a -X --format=User,Group,Elapsed,TRESUsageInGpu 直接生成账单明细,管理员工作量相比 Excel 人工统计下降一个数量级。
周期性批处理与科学计算流水线
阶段:批量推理 / 定时作业
解决的问题:每日定时跑数据清洗、模型重训、批量推理的任务,放在裸机上需要大量 cron 脚本管理依赖与资源抢占。Slurm 以作业依赖链与 sbatch --begin=HH:MM 定时提交承载这类流水线,脚本内部再通过 srun 切分并行任务。
具体案例:推荐系统团队把「取数 → 特征工程 → 训练 → 评估」四个阶段写成独立 sbatch 脚本,用 --dependency=afterok:上一作业ID 串联;失败分支由 afternotok 触发告警作业。依赖链将 4 个阶段的总排队时间从人工逐段监督的数小时压缩到作业间自动交接的分钟级。
常见误区
误区我在终端用 `srun python train.py` 能跑,说明 srun 就是 sbatch 的另一种写法,以后都用 srun 提交算了。
正解二者职责不同。srun 是「并行任务启动器」:它在前台创建资源分配并在分配内启动任务,终端关闭作业即终止,主要用于交互式调试(srun --pty bash)或批处理脚本内部切分并行任务;sbatch 是「批处理作业投递器」:提交后立即返回,作业由调度器在后台排队并运行,与终端生命周期无关。生产训练必须用 sbatch,把 srun 当作提交工具会留下「作业随 SSH 断开而中断」的风险。
为何常见:在小集群上单机交互调试时 srun 表现正常,初学者容易把它与提交作业混为一谈,直到遭遇终端断连导致作业丢失才开始区分。
误区`squeue` 显示的队列很全,过去跑完的作业翻翻屏幕就能找到。
正解squeue 只展示当前处于排队(PD)、运行(R)、完成中(CG)等活跃状态的作业,作业一出队列就离开该视图。查询历史数据必须用 sacct,它从 slurmdbd 数据库读取记账信息,可指定 -j 作业ID、-u 用户、-S 2024-01-01 等条件回溯任意时间段的运行时长、CPU/GPU 消耗、结束码。把两命令混用是排障时找不到「消失的作业」的最常见原因。
为何常见:squeue 是日常默认敲的第一个命令,且交互输出里作业号连续,容易让人误以为它覆盖了全部记录。
误区我给每个节点都执行了 `create-munge-key`,MUNGE 服务也起来了,为什么节点还是 DOWN?
正解MUNGE 认证要求整个集群所有节点共用同一份密钥文件 /etc/munge/munge.key。在每台机器上独立生成,等于每台机器各说各的「密码」,slurmctld 校验不通过,节点注册必然失败。正确做法是:在一台节点生成密钥后,通过 scp/配置管理工具分发到所有节点,并确认属主为 munge 用户、权限为 0600;新增节点时同样要分发同一份密钥。验证方法:在两台节点上分别执行 munge -n | munge -w,输出必须一致。
为何常见:MUNGE 的生成命令每次都能成功执行,命令本身不报错,故障被延迟到节点注册阶段暴露,排查时容易先怀疑网络或 Slurm 配置。
误区我提交作业时写了 `--mem=16G`,任务内存超了肯定会被系统杀掉,不会影响别人。
正解--mem 在默认配置下只是调度层面的资源预留承诺——它让调度器把「16G 内存」计入资源账本、决定哪些作业能在这节点共处,但若未启用 cgroup 插件,任务实际超用内存时内核不会主动清理,会蚕食同节点其他作业的内存。生产环境必须在 slurm.conf 中配置 ProctrackType=proctrack/cgroup、ConstrainRAMSpace=yes,并确保 systemd 与 cgroup v2 配置正确,内存限制才具有强制力。同样地,--cpus-per-task 也只在 cgroup 下才变成硬性 CPU 限制。
为何常见:用户从「申请资源」的角度理解参数,而 Slurm 的核心机制是「记账 + 脚本触发的强制隔离」,两者在默认配置下有壁,文档不读完就上线是常态。
面试题
Q1. 以下哪个命令用于提交批处理作业并立即返回,作业在后台排队执行?
- A.srun
- B.sbatch← 正确答案
- C.salloc
- D.sinfo
答案:B。sbatch 提交作业到队列后立即返回控制权,作业由调度器后台执行;srun 是前台并行任务启动器,salloc 是交互式资源分配,sinfo 查看节点/分区状态。
Q2. squeue 输出中状态码 R 表示作业处于哪种状态?
- A.排队中(Pending)
- B.运行中(Running)← 正确答案
- C.已取消(Cancelled)
- D.配置中(Configuring)
答案:B。Slurm 作业状态机中 R 即 Running,表示资源已分配且任务正在执行;PD 排队、CA 取消、CF 配置中、CG 完成中。squeue 手册的 JOB STATE CODES 一节是必查参考。
Q3. 查看集群中所有分区、节点及其资源状态的命令是?
- A.squeue
- B.sinfo← 正确答案
- C.sacct
- D.scontrol reassign
答案:B。sinfo 展示分区(PARTITION)、节点状态(STATE)、资源量(CPUS、MEM、GRES)等集群级视图;squeue 查询作业队列,sacct 查询历史记账,scontrol reassign 是资源回收操作。
Q4. 在 sbatch 脚本中添加 --dependency=afterok:123,其行为是?
- A.无论作业 123 结果如何,本作业都立即启动
- B.仅当作业 123 成功结束后本作业才启动← 正确答案
- C.仅当作业 123 失败后本作业才启动
- D.本作业与作业 123 同时启动
答案:B。afterok 依赖要求前置作业以 0 状态退出才触发;afterany 是无论成败都触发,afternotok 是仅失败触发,after 是仅在指定时间后触发。这道题考依赖状态机,混淆点在 A/D。
Q5. 在已配置 GPU 资源的集群中,申请 2 张 GPU 的正确 sbatch 参数是?
- A.--gres=gpu:2← 正确答案
- B.--gres=cpu:2
- C.--gpus-per-task=1
- D.--mem=2G
答案:A。GRES 申请语法为 --gres=<资源名>:<数量>,gpu:2 申请 2 张卡;--gpus-per-task=1 在单任务时只申请 1 张,mem 申请的是内存。注意 --gpus=2 是较新版本中对 --gres=gpu:2 的简化等价写法。
Q6. 需要每个计算节点跑 4 个任务、每任务分配 2 个 CPU 核,节点数 2,正确的参数组合是?
- A.--nodes=2 --ntasks=4 --cpus-per-task=2
- B.--nodes=2 --ntasks-per-node=4 --cpus-per-task=2← 正确答案
- C.--nodes=2 --ntasks=8 --cpus-per-task=2
- D.--nodes=4 --ntasks=4 --cpus-per-task=2
答案:B。--ntasks 是总任务数不变,--ntasks-per-node 才表示每个节点上的任务数。A 变为总共 4 个任务分布在 2 节点、C 为总共 8 个任务、D 节点数为 4,均不满足每节点 4 任务、共 8 任务的诉求。
Q7. 取消作业 ID 为 42 的批处理作业,正确的命令是?
- A.scancel 42← 正确答案
- B.scancel --name 42
- C.scontrol delete 42
- D.squeue --cancel 42
答案:A。scancel 后接作业 ID 是标准取消方式,也可用 -u 按用户、-p 按分区批量取消;scontrol 是配置管理工具,无 delete 作业的动作,squeue 只读不可写。
Q8. 以下哪些是 Slurm 在集群节点上运行的核心守护进程?
- A.slurmctld← 正确答案
- B.slurmd← 正确答案
- C.slurmdbd← 正确答案
- D.sshd
答案:ABC。slurmctld 是控制节点上的中央调度进程,slurmd 是每个计算节点上的执行进程,slurmdbd 负责记账数据库接入;sshd 是 SSH 服务,与 Slurm 调度体系无直接关系,因此不选。
Q9. 计算节点被标记为 DOWN 的常见原因包括?
- A.该节点 MUNGE 密钥与其他节点不一致← 正确答案
- B.该节点 slurmd 服务未启动或崩溃← 正确答案
- C.节点与主控时钟偏差过大导致心跳超时← 正确答案
- D.该节点上未安装 squeue 命令
答案:ABC。MUNGE 认证失败使注册被拒,slurmd 未运行导致心跳缺失,时钟漂移使时间戳校验不通过,三者都会触发节点 DOWN;squeue 是客户端查询工具,不在节点端运行依赖,D 与 DOWN 无关。
Q10. Slurm 多因子优先级调度中,下列哪些因素会影响作业最终优先级分数?
- A.Age(作业等待时间)← 正确答案
- B.Fairshare(公平份额历史用量)← 正确答案
- C.QOS(服务质量等级)← 正确答案
- D.Requeue(作业是否被重排队)
答案:ABC。多因子优先级(PriorityType=priority/multifactor)默认计算维度包括 Age、Fairshare、Partition、QOS、JobSize 等,各维度以 PriorityWeightAge、PriorityWeightFairshare 等参数加权求和;Requeue 是作业因节点故障被重新排队后使用的 RUN_LIMIT 策略参数,不参与优先级打分,故不选 D。
参考来源
- webpageSchedMD 官网发行版公告、商业支持与案例信息