SLURM作业数组$SLURM_ARRAY_TASK_ID失效问题求助
问题排查与解决
你的问题根源在于SLURM指令的拼写错误和重复定义,导致作业数组未正确生效:
核心问题
- SLURM指令拼写错误:脚本中所有
#SBACTH都是错误写法,正确应为#SBATCH。SLURM只会识别以#SBATCH开头的指令,错误拼写的行被当作普通注释,导致--array参数完全未被加载,作业并非数组模式运行,因此$SLURM_ARRAY_TASK_ID变量为空。 - 重复定义数组参数:即使拼写正确,脚本中先后定义了
--array=1-2和--array=1,后者会覆盖前者,最终只会运行1个任务。
修正后的批处理脚本
#!/bin/bash #SBATCH --time=01:59:00 #SBATCH --array=1-2 #SBATCH --job-name=job_array #SBATCH --output=log/job-%A-%a.out #SBATCH --error=log/job-%A-%a.err echo 'Running code' echo "Starting task" $SLURM_ARRAY_TASK_ID python -u parse_test.py --var $SLURM_ARRAY_TASK_ID echo 'Code done.'
额外验证步骤
- 提交作业前确保
log目录存在,执行mkdir -p log避免SLURM因无法创建目录而报错。 - 提交后用
squeue -u $USER查看任务状态,应显示两个数组任务(后缀为_1和_2)。 - 确认Python的
argparse代码正确接收参数,示例如下:
import argparse parser = argparse.ArgumentParser() parser.add_argument('--var', type=int, required=True) args = parser.parse_args() print(f"Received task ID: {args.var}")
修正后重新提交作业,即可生成两个对应任务ID的输出/错误文件,且$SLURM_ARRAY_TASK_ID能正常传递给Python脚本。
内容的提问来源于stack exchange,提问作者asorlik
相关产品推荐
相关产品推荐

