SLURM中lscpu与slurmd -C结果不符,无法使用全部CPU的解决咨询
解决SLURM仅识别1个CPU(实际4核)的问题
问题背景
系统硬件实际为4核CPU(lscpu输出确认):
Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 45 bits physical, 48 bits virtual Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Vendor ID: GenuineIntel Model name: 13th Gen Intel(R) Core(TM) i7-1360P CPU family: 6 Model: 186 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 4 Stepping: 2
但SLURM的slurmd -C仅识别1个CPU:
CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1
手动在slurm.conf设置CPUs=4后节点状态变为INVAL,无法正常工作,而OpenMPI可正常使用全部4核。系统存在1个NUMA节点包含0-3号CPU,hwloc 2.x版本中Ignore_NUMA参数无效。
解决方法
1. 调整SLURM资源选择配置
修改slurm.conf,指定资源选择类型为按核心分配,并明确核心数量:
SelectType=select/cons_res SelectTypeParameters=CR_Core CPUs=4 CoreSpecCount=4
修改完成后重启SLURM服务:
systemctl restart slurmd slurmctld
2. 自定义hwloc拓扑配置(适配2.x版本)
创建或编辑/etc/slurm/hwloc.conf,手动定义符合实际硬件的拓扑结构,绕开错误的socket探测:
<topology> <object type="Machine" id="0"> <object type="NUMANode" id="0"> <object type="Core" id="0"> <object type="PU" id="0"/> </object> <object type="Core" id="1"> <object type="PU" id="1"/> </object> <object type="Core" id="2"> <object type="PU" id="2"/> </object> <object type="Core" id="3"> <object type="PU" id="3"/> </object> </object> </object> </topology>
保存后重启SLURM服务,执行slurmd -C验证CPU识别情况。
3. 检查并修正Cgroup配置
确认SLURM的Cgroup配置未限制CPU访问,slurm.conf中相关配置参考:
CgroupPlugin=cgroup/v2 CgroupMountpoint=/sys/fs/cgroup CgroupAutomount=yes # 若存在CgroupCPUMask,设置为实际CPU范围 CgroupCPUMask=0-3
移除错误的CPU掩码限制,重启服务生效。
4. 重置SLURM节点状态缓存
删除SLURM的节点状态缓存文件,强制重新探测硬件:
rm -rf /var/lib/slurm/node_state systemctl restart slurmd
内容的提问来源于stack exchange,提问作者WooYoung Jung
相关产品推荐
相关产品推荐

