SLURM 作业数组 $SLURM_ARRAY_TASK_ID 不工作

问题描述 投票:0回答:2

我正在尝试使用我将 $SLURM_ARRAY_TASK_ID 传递给 Python 的 argparse 的作业数组提交多个作业,但 $SLURM_ARRAY_TASK_ID 不会打印或生成预期的作业文件。

这是我提交的批处理脚本:

#!/bin/bash 
#SBATCH --time=01:59:00
#SBACTH --array=1-2
#SBATCH --job-name=job_array
#SBATCH --output=log/job-%A-%a.out
#SBATCH --error=log/job-%A-%a.err
#SBACTH --array=1


echo 'Running code'

echo "Starting task" $SLURM_ARRAY_TASK_ID

python -u parse_test.py --var $SLURM_ARRAY_TASK_ID

echo 'Code done.'

这个作业的输出是:

Running code
Starting task
Code done.

只有一个错误的文件。

我收到一个 argparse 错误,因为没有为“var”传递任何值。

我期望得到的是:

Running code
Starting task 1
Starting task 2
Code done.

连同两个格式化的 out 和 err 文件 job-###-$SLURM_ARRAY_TASK_ID.out(err) 以及我的 python 代码的输出(错误)。

我已经搜索了作业数组的文档,但我看不出这里有什么问题。非常感谢任何帮助。

bash jobs slurm
2个回答
0
投票

你没有正确调用数组变量。在 Bash 中执行

echo $array
只会打印其中的第一个元素。

例子:

$ ARRAY_TASK_ID=("task 1" "task 2")

$ echo $ARRAY_TASK_ID
task 1

$ echo ${ARRAY_TASK_ID[@]}
task 1 task 2

$ for ((i=0;i<${#ARRAY_TASK_ID[@]};i++)); do echo ${ARRAY_TASK_ID[$i]}; done
task 1
task 2

尝试将您的 python 命令更新为以下内容:

python -u parse_test.py --var "${SLURM_ARRAY_TASK_ID[@]}"

虽然我仍然不知道为什么你的

echo "Starting task" $SLURM_ARRAY_TASK_ID
没有打印ID。它表明至少数组中的第一个元素是空的。尝试使用上面的示例检查整个数组。


0
投票

#SBACTH --array=1
更改为
#SBATCH --array=1

然后 echo 应该在结果中给你一些价值。

© www.soinside.com 2019 - 2024. All rights reserved.