Enviando trabalhos HPC em um trabalho HPC

0

Eu tenho um script grande que depende de argumentos de entrada (com getopts). Um desses argumentos é um diretório contendo arquivos (todos denominados * bam). Esse script tem 2 partes:

  • Parte1: com base nos arquivos de entrada * bam, calcule um número específico. Para ser claro, o resultado é um único número, NÃO um número por arquivo.
  • Parte 2: usando o número encontrado na parte 1, execute uma série de operações em cada arquivo * bam.

Agora, originalmente, part1 era muito rápido, computacionalmente falando. Então minha configuração foi:

  • Executar script no terminal: bash script.sh
  • Dentro do script.sh, para part2, faça um envio de trabalho HPC para cada arquivo

No entanto, agora que preciso analisar muito mais arquivos do que o planejado originalmente, estou percebendo que a Part1 também será computacionalmente pesada - portanto, preciso também executar isso no HPC.

Então, minha pergunta é:

  • É possível enviar um trabalho do HPC que submete trabalhos nele?
  • Em outras palavras, posso enviar script.sh como um trabalho e ainda tê-lo enviando trabalhos em sua parte2?

Para ser claro, aqui está um exemplo de como meu script pode parecer:

#!/usr/bin/bash

# PART 0: accept all input arguments

USAGE() { echo "Usage: bash $0 [-b <in-bam-files-dir>] [-o <out-dir>] [-c <chromlen>]" 1>&2; exit 1; }

if (($# == 0)); then
        USAGE
fi

# Use getopts to accept each argument

while getopts ":b:o:c:h" opt
do
    case $opt in
       b ) BAMFILES=$OPTARG
        ;;
       o ) OUTDIR=$OPTARG
        ;;
       c ) CHROMLEN=$OPTARG
        ;;
       h ) USAGE
        ;;
       \? ) echo "Invalid option: -$OPTARG exiting" >&2
        exit
        ;;
       : ) echo "Option -$OPTARG requires an argument" >&2
        exit
        ;;
        esac
    done

# PART1: calculate this unique number

NUMBER=0    

for i in  $(ls $BAMFILES/*.bam)
do
  make some calculations on each file to obtain a number ...
  keep only the smallest found number and assign its value to $NUMBER
done

echo "Final number is ${NUMBER} "

# PART2: Using $NUMBER that we found above, submit a job for each *bam file

for i in $(ls $BAMFILES/*bam)
do

    if [ ! -f ${OUTDIR}/${SAMPLE}.bw ];
    then 
        command=" command -options -b $NUMBER $i"

    echo $command | qsub -V -cwd -o $OUTDIR -e $OUTDIR -l tmem=6G -l h_vmem=6G -l h_rt=3600 -N result_${SAMPLE}

    fi

done
    
por m93 21.08.2018 / 18:55

1 resposta

0

A resposta é "depende". Seu cluster HPC pode ser configurado para que o nó de execução possa enviar tarefas, mas isso não é um requisito. Parece que uma pergunta rápida ao seu administrador HPC local lhe dará uma resposta definitiva. Ou você pode tentar um script rápido que não faça nada além de enviar um segundo trabalho e ver se funciona.

    
por 21.08.2018 / 19:00