You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Slurm集群单节点仅运行1个单线程作业的解决求助

问题:Slurm集群单线程作业节点资源分配优化

我正在搭建新的Slurm集群,对资源分配机制不太熟悉。集群包含4个节点,每个节点配备32核。提交单线程作业时,每个节点仅能运行1个作业,其余作业均处于pending(等待)状态。所有作业均为单线程,仅占用1个核心,我希望每个节点能同时运行32个作业,请问该如何配置实现?

当前squeue输出

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
           249  computes freesurf     nidb PD       0:00      1 (Resources)
           250  computes freesurf     nidb PD       0:00      1 (Priority)
           251  computes freesurf     nidb PD       0:00      1 (Priority)
           252  computes freesurf     nidb PD       0:00      1 (Priority)
           253  computes freesurf     nidb PD       0:00      1 (Priority)
           254  computes freesurf     nidb PD       0:00      1 (Priority)
           255  computes freesurf     nidb PD       0:00      1 (Priority)
           256  computes freesurf     nidb PD       0:00      1 (Priority)
           257  computes freesurf     nidb PD       0:00      1 (Priority)
           258  computes freesurf     nidb PD       0:00      1 (Priority)
           259  computes freesurf     nidb PD       0:00      1 (Priority)
           260  computes freesurf     nidb PD       0:00      1 (Priority)
           261  computes freesurf     nidb PD       0:00      1 (Priority)
           262  computes freesurf     nidb PD       0:00      1 (Priority)
           263  computes freesurf     nidb PD       0:00      1 (Priority)
           245  computes freesurf     nidb  R       8:00      1 compute60
           246  computes freesurf     nidb  R       7:40      1 compute61
           247  computes freesurf     nidb  R       7:19      1 compute62
           248  computes freesurf     nidb  R       6:55      1 compute63

当前slurm.conf节点与分区配置

NodeName=compute60 NodeAddr=10.35.10.110 CPUs=64 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=2 RealMemory=515827 State=UNKNOWN
NodeName=compute61 NodeAddr=10.35.10.111 CPUs=64 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=2 RealMemory=515827 State=UNKNOWN
NodeName=compute62 NodeAddr=10.35.10.112 CPUs=64 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=2 RealMemory=515827 State=UNKNOWN
NodeName=compute63 NodeAddr=10.35.10.113 CPUs=64 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=2 RealMemory=515827 State=UNKNOWN

PartitionName=computes Nodes=compute60,compute61,compute62,compute63 Default=NO MaxTime=INFINITE State=UP

解决方案

1. 检查作业资源请求

先确认已运行作业的资源请求情况,执行:

sacct -j 245 --format=JobID,Nodes,CPUs,ReqCPUs

如果输出中ReqCPUs为64,说明作业默认请求了节点全部CPU资源,导致每个节点只能运行一个作业。

2. 明确指定作业CPU请求

  • 提交作业时指定:在提交命令中添加--cpus-per-task=1,例如:
    sbatch --cpus-per-task=1 your_job_script.sh
    
  • 在作业脚本中指定:在脚本开头添加SBATCH指令:
    #SBATCH --cpus-per-task=1
    

3. 设置全局默认CPU请求(可选)

如果希望所有未指定CPU资源的作业默认只请求1个核心,在slurm.conf中添加:

DefCpusPerTask=1

4. 调整节点CPU配置(按需选择)

你的节点配置中CPUs=64是开启超线程后的逻辑CPU数,物理核心为32:

  • 若不需要超线程,修改节点配置为:
    NodeName=compute60 NodeAddr=10.35.10.110 CPUs=32 Boards=1 SocketsPerBoard=2 CoresPerSocket=16 ThreadsPerCore=1 RealMemory=515827 State=UNKNOWN
    
    这样每个节点可用CPU数为32,刚好匹配物理核心数,可同时运行32个单线程作业。
  • 若保留超线程,每个节点可运行64个单线程作业,按需调整。

5. 分区默认配置(可选)

给computes分区添加默认CPU请求,修改分区配置行:

PartitionName=computes Nodes=compute60,compute61,compute62,compute63 Default=NO MaxTime=INFINITE State=UP DefaultCPUsPerTask=1

6. 重载Slurm配置

修改slurm.conf后,在控制节点执行以下命令重载配置,无需重启整个集群:

scontrol reconfigure

7. 验证效果

提交多个测试作业,用squeue查看节点运行的作业数量,用sinfo查看节点CPU资源使用情况,确认每个节点可同时运行32个单线程作业。

内容的提问来源于stack exchange,提问作者Greg B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 23:38:19