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

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个物理核)。

修正步骤

  1. 移除--hint=nomultithread参数:
    修改作业脚本,删除或注释掉这一行:

    #SBATCH --hint=nomultithread  # This tells Slurm to avoid using hyperthreading
    

    移除后Slurm会自动允许利用逻辑核资源。

  2. 可选:明确启用超线程配置:
    若需确保Slurm优先使用超线程,可以在脚本中添加参数:

    #SBATCH --threads-per-core=2
    
  3. 验证结果:
    重新提交作业后,用squeue查看任务状态,确认12个任务是否同时处于RUNNING状态;也可通过htop或mpstat查看CPU使用率,验证12个逻辑核是否被充分利用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:15:02