我有一个问题,需要使用不同的输入参数来启动相同的脚本。
假设我有一个脚本 myscript.py -p <par_Val> -i <num_trial>
,我需要考虑N
个不同的par_values
(在x0
和x1
之间),每个par_value
需要进行M次试验。
M次试验中的每一次都几乎达到了我所在集群的时间限制(我没有更改此限制的特权)。因此,实际上我需要运行NxM
个独立的作业。
由于每个批处理作业具有相同的节点/ CPU配置,并调用相同的Python脚本,除了更改输入参数外,在原则上,我应该有一个sbatch
脚本,应该执行类似以下的操作:
#!/bin/bash
#SBATCH --job-name=cv_01
#SBATCH --output=cv_analysis_eis-%j.out
#SBATCH --error=cv_analysis_eis-%j.err
#SBATCH --partition=gpu2
#SBATCH --nodes=1
#SBATCH --cpus-per-task=4
for p1 in 0.05 0.075 0.1 0.25 0.5
do
for i in {0..150..5}
do
python myscript.py -p p1 -v i
done
done
每次调用脚本本身都是一个批处理作业。查看sbatch文件说明,-a --array
选项似乎很有前途。但在我的情况下,我需要为我拥有的每个NxM
脚本更改输入参数。我该怎么做呢?我不希望像这篇文章建议的那样编写NxM
批处理脚本,然后将它们列在一个txt
文件中。此外,这里提出的解决方案也不理想,因为这是作业数组的情况。此外,我想确保所有的NxM
脚本同时启动,并且上述脚本在终止之后立即终止,以便它不会与时间限制相冲突,导致我的整个作业被系统终止并保持不完整(而如果它们在独立的并行状态下运行,则每个NxM
作业都在此限制内,这种情况将不会发生)。
expr
中的$1
参数,当您分配p1
时,我对此并不满意。因为据我所知,$<num>是指输入参数,这对我来说没有意义... - mauriziop1
的赋值上,应该改为p1=${PARRAY['expr $SLURM_ARRAY_TASK_ID % ${#PARRAY[@]}']}
。 - mauriziosrun
调用你的Python脚本? - PlasmaBinturong