shell 我怎样才能让我的Slurm脚本循环一个文件名列表?

cx6n0qe3  于 2023-08-07  发布在  Shell
关注(0)|答案(1)|浏览(129)

我有一个slurm脚本来运行我的python代码:

#!/bin/bash -l                                                                                                    
#SBATCH --nodes=1                                                                                                 
#SBATCH --ntasks=1                                                                                                
#SBATCH --cpus-per-task=1                                                                                         
#SBATCH --mem=10G                                                                                                 
#SBATCH --account=my_account                                                                                 
#SBATCH --qos=default                                                                                           
#SBATCH --time=2-00:00:00                                                                                         
###Array setup here                                                                                               
#SBATCH --array=1                                                                                                 
#SBATCH --open-mode=truncate                                                                                      
#SBATCH --output=out_files/output.o                                                                              

module purge
module load my_cluster
module load Miniconda3/4.9.2

eval "$(${EBROOTMINICONDA3}/bin/conda shell.bash hook)"

conda activate my_conda_env

cd /my_directory

python my_python_code.py -filename file_a.txt

字符串
这是可行的,但目前,它只启动1个作业并使用file_a.txt作为参数。
如何同时启动10个作业?我知道我可以用途:

#SBATCH --array=1-10


但是我想使用file_a.txt作为作业1的参数,file_b.txt作为作业2的参数,等等。
如果可能的话,我希望将文件名列表作为一个单独的文本文件提供,由slurm脚本读取。

jobtbby3

jobtbby31#

根据docsSLURM_ARRAY_TASK_ID环境变量将被设置为(1索引)任务ID。我们可以将这个env var与sed一起使用,以从文件列表中获取第N行

my_files.txt

file_a.txt
file_b.txt
file_c.txt

字符串
sed -n "xp"命令归功于this answer

我的工作.sh

#!/bin/bash -l                                                                                                    
#SBATCH --nodes=1                                                                                                 
#SBATCH --ntasks=1                                                                                                
#SBATCH --cpus-per-task=1                                                                                         
#SBATCH --mem=10G                                                                                                 
#SBATCH --account=my_account                                                                                 
#SBATCH --qos=default                                                                                           
#SBATCH --time=2-00:00:00                                                                                         
###Array setup here                                                                                               
#SBATCH --array=1                                                                                                 
#SBATCH --open-mode=truncate                                                                                      
#SBATCH --output=out_files/%a_output.o                                                                              

module purge
module load my_cluster
module load Miniconda3/4.9.2

eval "$(${EBROOTMINICONDA3}/bin/conda shell.bash hook)"

conda activate my_conda_env

cd /my_directory

# Get the Nth line from my_files.txt
file_name=$(sed -n "${SLURM_ARRAY_TASK_ID}p" < my_files.txt)

python my_python_code.py -filename ${file_name}

已编辑,根据FlyingTeller的评论和Slurm文档,将任务ID添加到输出文件名中。

相关问题