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

如何在Slurm集群中充分利用节点核心并行运行多单核心任务?

Slurm集群并行化单核心任务的优化方案

问题描述

我有如下串行csh脚本:

foreach n (`seq 1 1000000`)
  ./myprog${n}.x
end

希望将其在Slurm集群上并行运行,每个程序实例仅需1个核心,让多个节点同时执行多个任务。我编写了并行脚本:

#!/bin/csh 
#SBATCH --nodes=8
#SBATCH -n 1024
#SBATCH --ntasks-per-node=128
foreach n (`seq 1 1000000`)
  srun -N 1 -n 1 ./myprog${n}.x &
end
wait

但运行时每个节点似乎一次只能运行1个任务,无法充分利用申请的所有核心,该如何调整?

优化方案

1. 修正srun的节点绑定限制

你当前使用的srun -N 1 -n 1强制每个任务独占一个节点,这是导致单节点仅运行1个任务的核心原因。去掉-N 1参数,让Slurm自动在已分配的8个节点上调度任务,同时添加--exact确保每个任务只占用1个核心:

foreach n (`seq 1 1000000`)
  srun -n 1 --exact ./myprog${n}.x &
end
wait

2. 强化Slurm资源配置(可选)

在#SBATCH头中添加--exclusive参数,确保分配给你的节点不会被其他作业共享,避免资源抢占:

#!/bin/csh 
#SBATCH --nodes=8
#SBATCH -n 1024
#SBATCH --ntasks-per-node=128
#SBATCH --exclusive

3. 使用Slurm数组任务(推荐方案)

循环启动100万个后台进程会带来较高的系统开销,Slurm的**作业数组(Job Array)**是更高效的管理方式,它会自动调度任务到空闲核心,无需手动管理后台进程:

#!/bin/csh
#SBATCH --nodes=8
#SBATCH -n 1024
#SBATCH --ntasks-per-node=128
#SBATCH --array=1-1000000%1024

./myprog${SLURM_ARRAY_TASK_ID}.x

其中%1024设置了同时运行的任务上限,刚好匹配你申请的核心总数,Slurm会自动批量调度所有任务,最大化资源利用率。

验证资源利用情况

可以通过以下命令确认资源是否被充分利用:

  • 查看作业任务分布:squeue -l -j $SLURM_JOB_ID
  • 在节点上查看核心占用:htop 或 sinfo -N -l

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:01:07