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

使用SLURM并行运行带不同参数的单线程程序

解决SLURM下1000个单CPU任务并行执行的问题

核心问题分析

你遇到的串行执行是因为未正确指定任务总数,而--exclusive参数会强制任务占用整个节点,和你“单任务占1核”的需求完全冲突,所以才会出现节点数调整的警告。以下是三种实用解决方案:


方案1:SLURM数组任务(最推荐)

SLURM数组任务是批量处理同类任务的原生方案,自动分配资源到多节点,无需手动管理节点分布。

创建脚本array_job.sh:

#!/bin/bash
#SBATCH --job-name=batch_parallel
#SBATCH --array=1-1000          # 定义1000个任务实例
#SBATCH --nodes=1               # 每个任务仅需1个节点(单进程)
#SBATCH --ntasks-per-node=1     # 每个节点跑1个任务
#SBATCH --cpus-per-task=1       # 每个任务占1核
#SBATCH --mem-per-cpu=100M      # 根据程序实际内存需求调整
#SBATCH --time=01:00:00         # 单个任务的超时时间

# 替换为你的程序调用,用$SLURM_ARRAY_TASK_ID区分不同任务参数
./your_program --input-param $SLURM_ARRAY_TASK_ID

提交命令:

sbatch array_job.sh

SLURM会自动将1000个任务分配到所有可用节点的空闲核心,不管节点是16核还是64核,都会最大化利用资源。如果需要限制节点数上限,可添加--max-nodes=63(按16核节点计算,1000核最多需63个节点)。


方案2:直接用srun指定任务总数

如果不想用数组任务,可通过srun的参数直接定义1000个任务:

srun --job-name=direct_parallel \
     --ntasks=1000 \
     --cpus-per-task=1 \
     --nodes=1-63 \
     --mem-per-cpu=100M \
     --time=01:00:00 \
     ./your_program --param %t
  • --ntasks=1000明确告诉SLURM要启动1000个独立任务
  • %t会被自动替换为任务ID(1到1000),用于区分不同参数
  • 无需--exclusive或--exact,SLURM会自动在多节点上分配任务,每个任务仅占用1核

方案3:GNU Parallel配合SLURM(适合复杂参数)

如果你的任务参数不是连续数字,而是自定义列表,可结合GNU Parallel使用:

  1. 先创建参数文件params.txt,每行一个参数:
param_0001
param_0002
...
param_1000
  1. 创建提交脚本parallel_job.sh:
#!/bin/bash
#SBATCH --job-name=gnu_parallel
#SBATCH --ntasks=1000
#SBATCH --cpus-per-task=1
#SBATCH --nodes=1-63
#SBATCH --mem-per-cpu=100M
#SBATCH --time=01:00:00

cat params.txt | parallel -j $SLURM_NTASKS srun --exact --ntasks=1 --cpus-per-task=1 ./your_program {}
  • GNU Parallel负责分发参数,每个参数对应一个srun任务
  • --exact确保每个任务严格占用1核,避免资源浪费

关键注意事项

  • 不要用--exclusive:该参数会让任务独占整个节点,完全不符合你单任务占1核的需求,只会导致资源浪费和错误
  • 资源参数要匹配:根据程序实际需求调整--mem-per-cpu和--time,避免因内存不足或超时导致任务失败
  • 串行问题根源:之前的脚本未指定--ntasks=1000,srun默认只启动1个任务,所以会串行执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:42:34