如何通过两个循环调试 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根据spc和chr的不同组合变化,共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
。
我需要通过 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根据spc和chr的不同组合变化,共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
。