如何通过两个循环调试 SLURM 的作业数组?

How to debug the job array for SLURM through two loops?

我需要通过 slurm 为集群提交很多作业。每个作业从不同的文件夹中获取不同的输入文件。我的问题是输出不完整,前 8 个组合后的输出不断覆盖之前的组合。我怀疑作业数组不是根据提供的两个变量的组合正确创建的。这是我的代码示例:

#!/bin/bash

#SBATCH --array=1-57%12         
#SBATCH --time=0            
#SBATCH --nodes=1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=12
#SBATCH --mem=6G
#SBATCH --output=/storage/proj/AltSp/logs/Lastz_Intron.log

DIR_OUT="/storage/proj/AltSp/data/annotation/Lastz/Br"
mkdir -p ${DIR_OUT}

QUERY="/storage/proj/AltSp/data/annotation/Introns.txt"
Species=/storage/proj/AltSp/data/Species.list   #3 lines: Br\nBn\nBo\n

# Chroms=/storage/proj/AltSp/genomes/Br/chromosomes.list # 20 lines: A1 ~ A20, one at a line
# Chroms=/storage/proj/AltSp/genomes/Bn/chromosomes.list # 18 lines: B1 ~ B18, one at a line
# Chroms=/storage/proj/AltSp/genomes/Bo/chromosomes.list # 19 lines: C1 ~ C19, one at a line

# REF is changing according to spc and chr

for spc in $(cat ${Species}); do
    chr=$(head -n ${SLURM_ARRAY_TASK_ID} genomes/${spc}/chromosomes.list | tail -1)
    REF="/storage/proj/AltSp/genomes/${spc}/${chr}.fasta"
    
    lastz ${REF} ${QUERY} K=3000 H=2200 --format=axt+ > ${DIR_OUT}/introns_vs_${spc}-${chr}.axt
done

Outputs files are:

    introns_vs_Br-A01.axt
    introns_vs_Br-A02.axt
    ...
    introns_vs_Br-A08.axt
    

spc在单个文件中,一个name/string一行; chr分几个文件,每个文件一行一个name/string; REF根据spcchr的不同组合变化,共57个文件。 在我的分配中,57 个作业 [array] 与 sbatch 一起提交到 运行 12 个作业。

通过循环遍历两个变量 spc 和 [=17= 创建的 SLURM_ARRAY_TASK_ID 作业数组有什么问题]chr 在我的示例代码中覆盖了输出? 谢谢!

我想,这个问题可能与你如何获得$chr有关。要验证,请将 ${SLURM_ARRAY_TASK_ID} 添加到您的作业输出文件。例如,像这样:

lastz ${REF} ${QUERY} K=3000 H=2200 --format=axt+ > ${DIR_OUT}/introns_vs_${spc}-${chr}-task${SLURM_ARRAY_TASK_ID}.axt

因此,如果您生成了 57 个输出,则问题与您如何获得 $chr