Slurm作业处于Pending状态但资源可用,资源配置预期不符技术问询
我来帮你梳理下这个Slurm的问题,结合你给出的配置片段,咱们一步步拆解可能的原因和排查方向:
先看配置里的关键疑点
你给出的配置片段里有几个需要重点关注的地方:
- 你用的是回填调度器(
SchedulerType=sched/backfill),这种调度器会优先调度长作业,再用空闲资源回填短作业,但对时间分辨率和资源匹配度要求较高。 SchedulerParameters里设置了bf_resolution=90,这意味着调度器只会以90秒为时间粒度评估作业的调度窗口,如果作业预估运行时间和现有作业的时间窗口不契合,可能会暂时无法调度。- 第66行的
SelectTypeParameters=CR_CPU_Mem...看起来是截断的!select/cons_res插件的CR_CPU_Mem参数要求作业的CPU和内存请求是绑定的(比如每个CPU核心对应固定内存),如果配置不完整,或者作业请求的CPU/内存比例和节点实际比例不匹配,很容易出现“有资源但无法分配”的情况。
可能的原因分析
SelectTypeParameters配置不完整/不匹配
如果CR_CPU_Mem后面缺了参数(比如CR_ONE_TASK_PER_CORE这类绑定规则),或者节点的CPU-内存比例和作业请求的比例不一致——比如节点是每核8G内存,但作业请求1核10G——那即使节点有空核,也满足不了内存需求,作业就会一直Pending。回填调度器的时间窗口限制
你的bf_resolution=90会让调度器只在90秒的整数倍时间点评估作业,加上bf_interval=45的检查间隔,可能会导致作业延迟调度。另外,如果现有运行的长作业占据了后续90秒窗口内的资源,回填调度器不会提前调度你的作业。资源碎片化问题
系统显示有可用资源,但可能是碎片化的:比如节点总共有20核,现有作业占了11核,你的作业请求10核,剩下的9核不够;或者内存总容量够,但单节点的可用内存达不到作业的请求值。分区/优先级/QOS限制
作业提交的分区和可用资源所在分区不匹配,或者分区设置了最大作业数、CPU上限;另外作业优先级太低,或者QOS配置了资源限制,也会导致无法抢占资源。
具体排查步骤
补全并验证SelectTypeParameters配置
把第66行的配置补完整(比如SelectTypeParameters=CR_CPU_Mem,CR_ONE_TASK_PER_CORE),然后用sinfo -o "%N %c %m %O"查看节点的CPU、内存和配置参数,确认节点的CPU-内存比例和作业请求的一致。检查作业的资源请求
用squeue -l -j <你的作业ID>查看作业的CPU、内存请求,再用sinfo -N -l看节点的可用资源,对比是否匹配。查看调度器日志
Slurm调度器日志一般在/var/log/slurm/sched.log,里面会详细记录作业Pending的原因,比如“Insufficient memory for job”或者“Fragmented core resources”,这是最直接的排查依据。提交测试作业验证
提交一个极简的测试作业:srun --nodes=1 --ntasks=1 --mem=1G sleep 60,如果这个作业能正常运行,说明问题出在你原来的作业资源请求或者配置细节上;如果也Pending,那就要重点排查节点和分区的配置。调整回填调度器参数测试
暂时把bf_resolution改成30(更小的时间粒度),重启Slurm调度器后再测试,看是否改善作业调度延迟的问题。
内容的提问来源于stack exchange,提问作者celavek

