Relionのジョブを TORQUE/OpenPBS に投げる際、使用するスクリプトが下記サイトで提示されている。
https://www2.mrc-lmb.cam.ac.uk/relion/index.php?title=TORQUE_template_script_example
オリジナルなqsub.sh

こちらで用意している qsub.sh は、Relion/qsubのコード修正により、使用するノードと各ノード当たりのcoreとthreadを
反映するように修正を加えている。

加え、qsubに投入しても Relion の画面でジョブの標準出力・標準エラーを表示させるように調整している。
2018y08m03d_211737714.png
*オレンジで囲った部分の上側にジョブの標準出力、下側に標準エラーが表示される

qsub.shスクリプト

*Relion/qsubでのコード修正がないと使えない qsub.sh スクリプトです

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
#!/bin/bash
#PBS -q XXXqueueXXX
#PBS -l nodes=XXXnodesXXX:ppn=XXXcoresXXX
#PBS -N XXXnameXXX
#
# mpirun option
if [[ XXXversionXXX = *icc* ]]; then    # intel MPI対応
   opt=" -bootstrap rsh "
   export FI_PROVIDER=tcp
   export I_MPI_HYDRA_BOOTSTRAP=rsh
   export I_MPI_HYDRA_BOOTSTRAP_EXEC=pbs_tmrsh
else
   opt=" --bind-to none --mca plm_rsh_agent rsh --map-by node "
fi
#
cd $PBS_O_WORKDIR
host=$(cat $PBS_NODEFILE | sort -u | tr "\n" " ")
#
if [[ $SHELL = *csh* ]]; then
  source /etc/profile.d/modules.sh
fi
module load relion/XXXversionXXX
#
SECONDS=0
cat <<_EOF_>XXXoutfileXXX
----------------------------------------------
start  `date`
----------------------------------------------
 
Queue 名称                       XXXqueueXXX
実行ノード数                     XXXnodesXXX ($host)
  +--プログラム数[MPI procs]     XXXmpinodesXXX
     +-- スレッド数[threads]     XXXthreadsXXX
           (単体ノード使用コア数 XXXcoresXXX)
`printf "*トータル使用コア数( %d x %d ) --> %d\n" XXXnodesXXX XXXcoresXXX XXXsumXXX`
`printf "*MPI総数( %d x %d ) = %d\n" XXXmpinodesXXX XXXnodesXXX XXXmpiprocXXX`
_EOF_
 
# relion-2のGPU対応「relion_refine_mpi」
cmd_=$(/bin/cat <<_EOF_
XXXcommandXXX
_EOF_
)
cmd=$(echo "$cmd_" | sed -z 's/\n/\&\&/g')
run=$(echo $cmd|awk '{print $1}')
 
cat <<_EOF_>>XXXoutfileXXX
 
use relion:
`readlink -f $run`
----------------------------------------------
_EOF_
 
#
# check np plus 1
np=XXXmpiprocXXX
localnodefile=1
if [ ${run##*/} =  "relion_refine_mpi" ]; then
   if [[ $cmd = *--gpu* ]]; then
      np=$(expr $np + 1)
      echo "GPU使用のためnp数を変更しました: XXXmpiprocXXX --> $np" >> XXXoutfileXXX
      nodeCount=$(wc -l $PBS_NODEFILE|awk '{print $1}')
      if [ $np -gt $nodeCount ]; then
         /bin/cp $PBS_NODEFILE .
         /usr/bin/tail -1 $PBS_NODEFILE >> $(basename $PBS_NODEFILE)
         localnodefile=2
      fi
   fi
fi
#
# make command
if [ $localnodefile -eq 1 ]; then
   command="{ { mpirun $opt -machinefile $PBS_NODEFILE -np $np ${cmd:0:-2} | tee -a XXXoutfileXXX ; } 3>&2 2>&1 1>&3 | tee -a XXXerrfileXXX ; } 3>&2 2>&1 1>&3"
else
   command="{ { mpirun $opt -machinefile $(basename $PBS_NODEFILE) -np $np ${cmd:0:-2} | tee -a XXXoutfileXXX ; } 3>&2 2>&1 1>&3 | tee -a XXXerrfileXXX ; } 3>&2 2>&1 1>&3"
fi
 
cat <<_EOF_>>XXXoutfileXXX
 
run command:
$command
----------------------------------------------
_EOF_
 
eval $command
 
if [ -f $(basename $PBS_NODEFILE) ]; then
  /bin/rm -f $(basename $PBS_NODEFILE)
fi
 
cat <<_EOF_>>XXXoutfileXXX
----------------------------------------------
use relion: `readlink -f $run`
end time: `date '+%y%m%d %H:%M:%S'`  (spend  `printf "%02d:%02d:%02d\n" $(($SECONDS/3600)) $((($SECONDS%3600)/60)) $(($SECONDS%60))`)
----------------------------------------------
done
_EOF_

7-14行目は intel MPI / openMPI への対応

19-21行目はcsh/tcsh向けにEnvironmentModulesを有効にさせている

22行目の「modeule load relion/XXXversionXXX」はmoduleコマンドによる実行環境のロードです. 「XXXversionXXX」の値はRelionのバージョン番号で、
Relion/qsub#e9df0e54のpipeline_jobs.cppでの修正で、「src/macros.h」に書かれている「RELION_SHORT_VERSION」の値が代入されます.

(src/macros.h)
 :
#define RELION_SHORT_VERSION "3.1.0"    <-- これ
extern const char *g_RELION_VERSION;
 :

バージョン毎のEnvironmentModulesを用意する必要があります. 参照先 EnvironmentModules

メモ

40行目でXXXcommandXXXで展開される複数行をキャッチさせ、44行目で「&&」でジョインさせる。ただし末端に「&&」が付く。
58,59行目でrefine_mpiでgpu指定がある場合、
60行目でnpの数を1+に。
ただ、その場合1threads/1mpiだとエラーが起こるので、63行目でnpの数とPBS_NODEFILEの行数を比較。
もしnpの数が、PBS_NODEFILEの行数を上回るなら、PBS_NODEFILEを実行場所にコピーして(64行目)、行末を増やす(65行目)。
72行目でPBS_NODEFILEの指定をOpenPBS由来か、行数を増やしたファイルかを定める。

73, 75行目の実際の実行コマンドを展開させる。「${cmd:0:-2}」で、末尾の「&&」を削る。

85行目のevalでコマンドを実行

infinibandカードを持つマシン(ib_ipoibでip通信)で計算すると

Open MPI has detected that there are UD-capable Verbs devices on your
system, but none of them were able to be setup properly.  This may
indicate a problem on this system. 
 
You job will continue, but Open MPI will ignore the "ud" oob component
in this run. 
 
No OpenFabrics connection schemes reported that they were able to be
used on a specific port.  As such, the openib BTL (OpenFabrics
support) will be disabled for this port.

なワーニングが表示されることがある。
この場合は

opt=" --display-map --bind-to none --mca plm_rsh_agent rsh --map-by node "
 ↓
opt=" --display-map --bind-to none --mca plm_rsh_agent rsh --map-by node --mca oob tcp "

と「--mca oob tcp」を追加すれば消えるかと思う.
あるいは

opt=" --display-map --bind-to none --mca plm_rsh_agent rsh --map-by node --mca btl ^openib "

とopenibを外す.


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2021-06-22 (火) 01:04:43 (37d)