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

如何配置srun选项实现非排他模式下多任务并行并等待全部完成?

解决方案

问题描述

用户现有如下Slurm sbatch脚本(集群每个节点含128核):

#!/bin/tcsh
#SBATCH --nodes=5

srun -n 1 -c 1 ./exec opt1
srun -n 1 -c 1 ./exec opt2
srun -n 1 -c 1 ./exec opt3
srun -n 1 -c 1 ./exec opt4
srun -n 1 -c 1 ./exec opt5
srun -n 1 -c 1 ./exec opt6
srun -n 1 -c 1 ./exec opt7
srun -n 1 -c 1 ./exec opt8
srun -n 1 -c 1 ./exec opt9
srun -n 1 -c 1 ./exec opt10

srun -n 640 ./program.x

当前脚本中前10条srun命令为顺序执行,全部完成后才会运行最后的srun -n 640 ./program.x。由于这10个任务互不依赖,且当前节点默认排他模式(最多同时运行5个任务),改为非排他模式让任务并行执行效率更高,且用户无法确定各任务耗时,需要修改脚本实现10个srun同时运行,等待全部完成后再执行后续程序。

修改后的脚本及选项说明

只需对前10条srun命令添加关键设置,结合shell命令实现需求:

  1. 给每个srun添加--exclusive=no选项,取消排他模式,允许同一节点同时运行多个任务
  2. 每个srun命令末尾加&,让任务后台运行
  3. 在10条后台任务后添加wait命令,等待所有后台任务完成后再执行后续程序

修改后的完整脚本:

#!/bin/tcsh
#SBATCH --nodes=5

srun --exclusive=no -n 1 -c 1 ./exec opt1 &
srun --exclusive=no -n 1 -c 1 ./exec opt2 &
srun --exclusive=no -n 1 -c 1 ./exec opt3 &
srun --exclusive=no -n 1 -c 1 ./exec opt4 &
srun --exclusive=no -n 1 -c 1 ./exec opt5 &
srun --exclusive=no -n 1 -c 1 ./exec opt6 &
srun --exclusive=no -n 1 -c 1 ./exec opt7 &
srun --exclusive=no -n 1 -c 1 ./exec opt8 &
srun --exclusive=no -n 1 -c 1 ./exec opt9 &
srun --exclusive=no -n 1 -c 1 ./exec opt10 &

wait

srun -n 640 ./program.x

核心设置解释

  • --exclusive=no:覆盖节点默认的排他模式,允许已分配的节点上同时运行多个srun任务,充分利用单节点128核的资源,让10个单核任务并行执行
  • &:将单个srun任务放到后台启动,实现多任务同时运行
  • wait:阻塞脚本执行流程,直到所有后台的srun任务全部结束,才继续执行最后的大规模并行任务

若集群中--share是--exclusive=no的等价选项,也可以替换使用,效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:45:49