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

Slurm数组任务虚拟核调度异常:仅25任务并行问题排查

问题分析与解决方案

核心错误点

  1. --ntasks=1 参数冲突:该参数限制了整个作业的总任务数为1,与数组任务的并行调度逻辑矛盾,导致Slurm无法调度更多并行任务。
  2. --ntasks-per-core=1 浪费超线程:你的物理核每个包含2个虚拟核,这个参数强制每个物理核仅运行1个任务,相当于把50个虚拟核的额度压缩为25个物理核的可用数,因此只能跑25个并行任务。
  3. 未明确数组并行上限:默认情况下Slurm不会自动用满QoS分配的CPU额度,需要显式指定数组的最大并行数。

修改后的脚本配置

#!/bin/bash
#SBATCH --job-name=test
#SBATCH --qos=cpus50
#SBATCH --array=1-100%50  # 明确指定最多50个任务并行
#SBATCH --cpus-per-task=1
#SBATCH --nodes=1
#SBATCH --open-mode=append
#SBATCH --output=%x.out

python3 -c "import os, time; jobid = int(os.getenv('SLURM_ARRAY_TASK_ID')); start = f'JOBID:{jobid:04d} | Start {time.ctime()}'; time.sleep(10); print(f'{start} | End {time.ctime()} |')"

关键调整说明

  • 移除--ntasks=1:数组任务的调度不需要全局任务数限制,移除后Slurm能正确识别每个数组元素为独立任务。
  • 移除--ntasks-per-core=1(或设置为--ntasks-per-core=2):允许每个物理核利用超线程运行2个任务,让50个虚拟核对应50个并行任务。
  • 添加%50到--array参数:显式告知Slurm同时运行最多50个数组任务,刚好匹配QoS分配的50虚拟核额度。

验证方法

提交修改后的脚本后,用squeue -u $USER查看任务状态,应能看到最多50个任务处于RUNNING状态,总耗时会接近预期的20秒左右。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:10:35