我有一个 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 脚本读取。
根据 docs,
SLURM_ARRAY_TASK_ID
环境变量将设置为(1 索引)任务 ID。我们可以将此环境变量与 sed
一起使用来从文件列表中获取第 N 行
my_files.txt
file_a.txt
file_b.txt
file_c.txt
归功于这个答案的
sed -n "xp"
命令。
my_slurm_job.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 docs 将任务 ID 添加到输出文件名。