如何让sbatch --array子任务使用命令行传入的非任务ID值?
如何在SLURM数组作业中传入自定义值替代默认任务ID
没问题呀!完全可以实现你想要的效果,这里给你两种常用的解决办法,按需选择就行:
方法一:直接指定自定义数组任务值
这是最简单的方式——你可以直接在--array参数里写你想要的具体值,而不是连续的数字范围。这样SLURM_ARRAY_TASK_ID就会直接等于你设定的这些值。
比如你可以这样提交作业:
sbatch --array=4,6 script.sh
你的script.sh不需要修改,保持原来的内容就行:
#!/bin/bash VALUE="$SLURM_ARRAY_TASK_ID" echo $VALUE
执行后,两个作业就会分别输出4和6,正好符合你的需求。
方法二:通过数组映射任务ID到自定义值
如果你需要保持--array的数字范围(比如1-2),但想把每个任务ID映射到其他自定义值,可以在脚本里定义一个数组,用任务ID作为索引来取值。
修改你的script.sh如下:
#!/bin/bash # 定义你想要的自定义值数组 CUSTOM_VALUES=(4 6) # 因为SLURM_ARRAY_TASK_ID从1开始,数组索引从0开始,所以要减1 VALUE=${CUSTOM_VALUES[$SLURM_ARRAY_TASK_ID - 1]} echo $VALUE
然后还是用原来的提交命令:
sbatch --array=1-2 script.sh
这样第一个任务(ID=1)会取数组的第0个元素4,第二个任务(ID=2)取第1个元素6,同样能得到你想要的结果。
这两种方法都能满足你的需求,第一种更直接,第二种适合需要保留原任务ID序列但映射到其他值的场景~
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

