首页 > 解决方案 > SLURM_ARRAY_TASK_ID 为空

问题描述

我是 SLURM 和云计算的新手。

我编写了一个 bash 脚本,它使用带有数组机制的作业并行化。问题是我尝试使用 SLURM 中可用的 SLURM_ARRAY_TASK_ID 环境变量来获取任务的 id,但该变量为空,因此算术运算中存在错误。

这是 bash 代码。

#!/bin/bash

#SBATCH --job-name=Distributed Raytracing
#SBATCH --time=01:00
#SBATCH --array=0-5

cd ./povray

SF=$((${SLURM_ARRAY_TASK_ID}*10+1))
EF=$((${SLURM_ARRAY_TASK_ID}*10+10))
./povray +A +W100 +H100 +Lshare/povray-3.6/include/ +SF$SF +EF$EF glsbng.ini

这里是输出错误。

/var/spool/slurm/job01706/slurm_script: line 10: *10+1: syntax error: operand expected (error token is "*10+1")
/var/spool/slurm/job01706/slurm_script: line 11: *10+10: syntax error: operand expected (error token is "*10+10")

怎么了 ?

提前感谢您的回答。

标签: bashslurm

解决方案


经过多次研究和测试,我发现问题来自 SLURM。当我使用 sbatch 提交脚本时,只启动了一项具有一项任务的作业,而不是像预期的那样具有六项任务的一项作业。因此 SLURM_ARRAY_TASK_ID 没有初始化,因为作业中只有一个任务。问题的根源来自第一个#SBATCH 选项,因为给作业的名称包含一个空格。由于这个空间,我认为 SLURM 不会解释其他选项,因此脚本是使用默认选项启动的。

我刚换

#SBATCH --job-name=Distributed Raytracing

#SBATCH --job-name=DistributedRaytracing

现在没有错误了。

我现在问我为什么 SLURM 在出现此类错误(名称中的空格)时不显示错误,以及为什么不解释其他选项?


推荐阅读