Slurm节点启动失败:线程数(32)与核心数(24)不匹配求助
配置Slurm计算节点时启动失败,报错:
Thread count (32) not multiple of core count (24)
所用CPU为13代Intel Core i9-13900KS,执行lscpu输出如下:
Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 46 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 32 On-line CPU(s) list: 0-31 Vendor ID: GenuineIntel Model name: 13th Gen Intel(R) Core(TM) i9-13900KS CPU family: 6 Model: 183 Thread(s) per core: 2 Core(s) per socket: 24 Socket(s): 1 Stepping: 1
尝试的slurm.conf配置内容:
# COMPUTE NODES NodeName=aries NodeAddr=localhost CPUs=32 Sockets=1 CoresPerSocket=24 ThreadsPerCore=2 RealMemory=192000 Gres=gpu:1,mps:100 State=UNKNOWN PartitionName=system Nodes=aries Default=YES MaxTime=INFINITE State=UP
后续出现的报错信息:
error: NodeNames=aries CPUs=32 match no Sockets, SocketsCoresPerSocket or SocketsCoresPerSocket*ThreadsPerCore. Resetting CPUs.
slurmd: error: Thread count (32) not multiple of core count (24)
i9-13900KS是Intel混合架构处理器(性能核P核+能效核E核),其中8个P核支持超线程(每核2线程),16个E核不支持超线程(每核1线程),总线程数为8×2+16×1=32。而lscpu显示的ThreadsPerCore=2仅代表P核的参数,并非所有24个核都支持双线程,导致Slurm按对称多线程逻辑计算时,Sockets*CoresPerSocket*ThreadsPerCore=1×24×2=48,和实际配置的CPUs=32不匹配,引发报错。
方案1:指定CPU列表(推荐)
直接通过CPUList参数明确节点可用的CPU线程范围,替代CPUs、ThreadsPerCore等易引发冲突的参数,让Slurm直接使用实际在线的CPU资源:
NodeName=aries NodeAddr=localhost CPUList=0-31 Sockets=1 CoresPerSocket=24 RealMemory=192000 Gres=gpu:1,mps:100 State=UNKNOWN PartitionName=system Nodes=aries Default=YES MaxTime=INFINITE State=UP
方案2:调整核/线程参数适配混合架构
若需保留核/线程层级配置,可手动调整参数忽略超线程(但会浪费P核的线程资源):
NodeName=aries NodeAddr=localhost CPUs=32 Sockets=1 CoresPerSocket=24 ThreadsPerCore=1 RealMemory=192000 Gres=gpu:1,mps:100 State=UNKNOWN PartitionName=system Nodes=aries Default=YES MaxTime=INFINITE State=UP
验证配置
修改slurm.conf后,重启slurmd服务:
systemctl restart slurmd
执行以下命令检查节点状态:
sinfo
内容的提问来源于stack exchange,提问作者user24459176

