Slurm在12核超线程笔记本仅并发运行6个阵列任务求助
问题:Slurm无法利用超线程并发运行12个任务
我使用搭载6个物理核(支持超线程,共12个逻辑核)的联想Legion 5笔记本,基于Ubuntu系统部署Slurm做本地作业调度。提交包含12个任务的作业阵列(要求同时运行12个)时,尽管系统逻辑核与内存资源充足,Slurm始终仅能并发运行6个任务。
已尝试的解决方法
- 显式设置低内存要求:
#SBATCH --mem-per-cpu=100M - 使用
--oversubscribe参数:#SBATCH --oversubscribe - 显式配置CPU参数:
#SBATCH --cpus-per-task=1 #SBATCH --threads-per-core=2 - 确认分区允许超订阅:
PartitionName=debug Nodes=thoma-Lenovo-Legion-5-15IMH05H Default=YES MaxTime=INFINITE State=UP OverSubscribe=YES
以上方法均无效,并发任务数仍无法超过6。
当前Slurm配置
SelectType = select/cons_tres SelectTypeParameters = CR_CORE_MEMORY MaxTasksPerNode = 512 DefMemPerNode = UNLIMITED CPUAlloc=0 CPUEfctv=12 CPUTot=12 RealMemory=7846 AllocMem=0 FreeMem=123 Sockets=1 Boards=1
作业脚本
#!/bin/bash #SBATCH --job-name=core_test #SBATCH --array=1-12%12 #SBATCH --output=core_test_%A_%a.log #SBATCH --cpus-per-task=1 #SBATCH --mem-per-cpu=500M #I don't like this constraint #SBATCH --time=00:05:00 #SBATCH --hint=nomultithread # This tells Slurm to avoid using hyperthreading echo "Starting task $SLURM_ARRAY_TASK_ID at $(date)" python test_parallel.py echo "Task $SLURM_ARRAY_TASK_ID completed at $(date)"
排查与解决方案
核心问题
作业脚本中的--hint=nomultithread参数是直接原因,该参数强制Slurm禁止使用超线程,每个任务只能绑定到物理核而非逻辑核,因此最多只能运行6个任务(对应6个物理核)。
修正步骤
移除
--hint=nomultithread参数:
修改作业脚本,删除或注释掉这一行:#SBATCH --hint=nomultithread # This tells Slurm to avoid using hyperthreading移除后Slurm会自动允许利用逻辑核资源。
可选:明确启用超线程配置:
若需确保Slurm优先使用超线程,可以在脚本中添加参数:#SBATCH --threads-per-core=2验证结果:
重新提交作业后,用squeue查看任务状态,确认12个任务是否同时处于RUNNING状态;也可通过htop或mpstat查看CPU使用率,验证12个逻辑核是否被充分利用。
内容的提问来源于stack exchange,提问作者desert_ranger
相关产品推荐
相关产品推荐

