我有以下PBS脚本:
#!/bin/bash -l
#PBS -l walltime=12:00:00,nodes=1:ppn=24,pmem=2580mb
((start=24))
((n_jobs_procimg=8))
cd $PBS_O_WORKDIR
conda activate msi_sip_37
module load parallel
parallel -u -j 3 < commands.txt
wait
而commands.txt的内容是:
python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+0 --idx_max $start+8
python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+8 --idx_max $start+16
python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+16 --idx_max $start+24
[我[错误地]期望$start
和$n_jobs_procimg
应该可用于commands.txt中的命令,但是当我运行此作业时,对于commands]中的每个命令,都会收到以下错误。 txt:
usage: process_img.py [-h] [-n N_JOBS] [-m MSI_TEST] [-i IDX_MIN] [-d IDX_MAX]
process_img.py: error: argument -n/--n_jobs: expected one argument
我如何修改PBS脚本中的parallel
命令,以便将$start
和$n_jobs_procimg
传递给commands.txt?]
在这种情况下,$start
应为等于24的整数,而$n_jobs_procimg
应为等于8的整数。
与我的问题无关,但是对于上下文来说,[[process_img.py脚本使用了一个多处理池,该池采用处理核的数量并作为参数(--n_jobs
),我想对此进行控制基于我可用的处理核心总数。
constants.sh:
((start=24))
((n_jobs_procimg=8)
然后使用来源:
#!/bin/bash -l #PBS -l walltime=12:00:00,nodes=1:ppn=24,pmem=2580mb source constants.sh cd $PBS_O_WORKDIR conda activate msi_sip_37 module load parallel parallel -u -j 3 < commands.txt wait
然后使用commands.txt也包括它:
source constants.sh python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+0 --idx_max $start+8 python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+8 --idx_max $start+16 python runs/process_img.py --n_jobs $n_jobs_procimg --msi_test True --idx_min $start+16 --idx_max $start+24
这样,您就可以在任何地方使用它们,并且仅在发生更改时才需要编辑一个文件。
export
变量:#!/bin/bash -l
#PBS -l walltime=12:00:00,nodes=1:ppn=24,pmem=2580mb
((start=24))
((n_jobs_procimg=8))
export start
export n_jobs_procimg
cd $PBS_O_WORKDIR
conda activate msi_sip_37
module load parallel
parallel -u -j 3 < commands.txt