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

如何在SLURM数组的#SBATCH选项中使用变量指定范围?

SLURM数组范围动态设置的可行方法

你的原写法不可行,因为SLURM会在脚本的bash逻辑执行前,先解析所有#SBATCH指令,此时num变量还未被赋值,SLURM无法识别${num}这个变量引用。

下面是几种可行的动态设置SLURM数组范围的方法:

方法1:提交时通过sbatch命令行指定数组范围

直接在提交任务时用--array参数传递动态范围,无需在脚本里写固定的#SBATCH --array:

# 示例:传递num=1000来设置数组范围为1-1000%10
num=1000
sbatch --array=1-${num}%10 your_job_script.sh

如果需要从命令行接收num参数,可以写一个简单的提交脚本:

#!/bin/bash
# 调用方式:./submit.sh 1000
num=$1
sbatch --array=1-${num}%10 your_job_script.sh

这里的your_job_script.sh只需要包含任务执行逻辑,不用再写#SBATCH --array指令。

方法2:用Here Document生成临时提交脚本

如果希望在同一个脚本里完成参数接收、数组配置和提交,可以生成临时的SLURM任务脚本:

#!/bin/bash
# 调用方式:./dynamic_array.sh 1000
num=$1

# 生成临时任务脚本
cat << EOF > temp_slurm_job.sh
#!/bin/bash
#SBATCH --array=1-${num}%10
# 这里写你的任务逻辑
echo "Array task ID: \$SLURM_ARRAY_TASK_ID, total tasks: ${num}"
EOF

# 提交临时脚本并清理
sbatch temp_slurm_job.sh
rm temp_slurm_job.sh

方法3:通过sbatch的--export传递变量(适合任务内需要用到num的场景)

如果不仅要设置数组范围,还要让任务脚本内部用到num变量,可以结合--export传递变量,同时在提交时指定数组:

#!/bin/bash
num=$1
sbatch --array=1-${num}%10 --export=NUM=${num} your_job_script.sh

在your_job_script.sh里可以直接使用$NUM变量:

#!/bin/bash
#SBATCH --job-name=dynamic_array
echo "Task ID: \$SLURM_ARRAY_TASK_ID, total: \$NUM"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:37:46