Jobs

在 HPC 作業中送出 HPC 作業

  • August 21, 2018

我有一個大腳本,它依賴於輸入參數(使用 getopts)。其中一個參數是一個包含文件的目錄(全部命名為 *bam) 該腳本有 2 個部分:

  • Part1:根據輸入的*bam文件,計算一個具體的數字。需要明確的是,結果是一個數字,而不是每個文件一個數字。
  • 第 2 部分:使用在第 1 部分中找到的數字,對每個 *bam 文件執行一系列操作。

現在,最初,從計算上講,part1 非常快。所以我的設置是:

  • 在終端上執行腳本:bash script.sh
  • 在 script.sh 中,對於第 2 部分,為每個文件送出一個 HPC 作業

然而,現在我需要分析比原計劃更多的文件,我意識到第 1 部分的計算量也會很大——因此我還需要在 HPC 上執行它。

所以我的問題是:

  • 是否可以送出在其中送出作業的 HPC 作業?
  • 換句話說,我可以將 script.sh 作為作業送出,並且仍然讓它在其第 2 部分中送出作業嗎?

為了清楚起見,這是我的腳本可能看起來的範例:

#!/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

答案是“視情況而定”。您的 HPC 集群可以設置為讓執行節點能夠送出作業,但這不是必需的。向您當地的 HPC 管理員提出一個簡單的問題,這聽起來會給您一個明確的答案。或者您可以嘗試一個快速腳本,該腳本除了送出第二份工作外什麼都不做,看看它是否有效。

引用自:https://unix.stackexchange.com/questions/463920