Slurm配置问题:进程占用节点全部核心而非分配核心
问题原因及解决配置
一、核心原因
- 未做CPU亲和性绑定:Slurm默认仅完成资源分配,不会强制限制进程的CPU使用范围。若程序自身无CPU亲和性设置,会自动调度到节点全部可用核心。
- 作业参数搭配错误:不合理混用
--ntasks与--cpus-per-task,或未明确约束条件,可能导致Slurm误分配全节点资源。 - 节点未启用资源隔离:未配置cgroup等机制时,Slurm无法强制限制进程的CPU使用权限。
二、解决配置与操作
1. 强制CPU亲和性绑定
提交作业时添加绑定参数,将进程严格锁定到分配的核心:
srun --nodes=1 --ntasks=1 --cpus-per-task=4 --cpu-bind=cores your_program
也可在slurm.conf中全局默认启用绑定,无需每次手动加参数:
TaskPlugin=task/affinity TaskAffinity=core
2. 修正作业提交参数逻辑
确保参数匹配程序类型:
- 单任务多线程程序:用
--ntasks=1 --cpus-per-task=4 - 多任务单线程程序:用
--ntasks=4 --cpus-per-task=1
避免设置--nodes=1 --ntasks=128这类抢占全节点的参数。
3. 启用cgroup资源隔离
在slurm.conf中配置cgroup插件,强制限制CPU资源:
CgroupPlugin=cgroup/v2 CgroupAutomount=yes ConstrainCores=yes ConstrainRAMSpace=yes
配置完成后重启Slurm服务(执行scontrol reconfig或重启slurmctld、slurmd),Slurm会通过cgroup严格管控进程可用核心。
4. 验证资源分配结果
提交作业后用以下命令查看实际分配的CPU资源:
sacct -j <job_id> --format=JobID,Nodes,NTasks,CPUsPerTask,AllocCPUS
同时在节点上用top或htop查看进程CPU使用情况,确认是否仅占用指定的4个核心。
内容的提问来源于stack exchange,提问作者Alexandre Gràcia Calvo
相关产品推荐
相关产品推荐

