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

こちらで用意している 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
#!/bin/bash
#PBS -q XXXqueueXXX
#PBS -l nodes=XXXnodesXXX:ppn=XXXcoresXXX
#PBS -N XXXnameXXX
#PBS -V
#
# mpirun
opt="--bind-to none --mca plm_rsh_agent rsh --map-by node"
#
cd $PBS_O_WORKDIR
host=$(cat $PBS_NODEFILE | sort -u | tr "\n" " ")
#
# Relionのバージョン名でさらに環境変数を修正するなら
if [ -f /Appl/.relion/XXXversionXXX ]; then
   source /Appl/.relion/XXXversionXXX
fi
#
SECONDS=0
/bin/cat <<_EOF_> XXXoutfileXXX
-------------------------------------------
スタート `date`
-------------------------------------------
 
Queue 名称                               XXXqueueXXX
実行ノード数                             XXXnodesXXX ($host)
  +--1ノードのプログラム数[MPI procs]   XXXmpinodesXXX
       +-- 1MPIのスレッド数[threads]    XXXthreadsXXX
                    (1ノード使用コア数 XXXcoresXXX)
 
`printf "*総core数( %d x %d ) --> %d\n" XXXnodesXXX XXXmpinodesXXX XXXmpiprocXXX`
`printf "*総mpi数( %d x %d  = %d\n" XXXnodesXXX XXXcoresXXX XXXsumXXX`
_EOF_
 
# relionのGPU対応「relion_refine_mpi」
cmd_=$(/bin/cat <<_EOF_
XXXcommandXXX
_EOF_
)
 
cmd=$(echo "$cmd_" | sed -z 's/\n/\&\&/g')
run=$(echo $cmd|awk '{print $1}')
np=XXXmpiprocXXX
# /bin/cp $PBS_NODEFILE .
if [ ${run##*/} =  "relion_refine_mpi" ]; then
   if [[ $cmd = *--gpu* ]]; then
      np=$(expr XXXmpiprocXXX + 1 )
      # /usr/bin/tail -1 $PBS_NODEFILE >> $(basename $PBS_NODEFILE)
      echo "GPU使用のためnp数を変更しました: XXXmpiprocXXX --> $np" >> XXXoutfileXXX
   fi
fi
/bin/cat <<_EOF_>>XXXoutfileXXX
 
use relion:
`readlink -f $run`
-------------------------------------------
_EOF_
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"
# 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"
eval $command
# /bin/rm -f $(basename $PBS_NODEFILE)
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_

14行目「/Appl/.relion/XXXversionXXX」のXXXversionXXXは、Relion/qsubのpipeline_jobs.cppでの修正で、
「src/macros.h」に書かれている「RELION_VERSION」を参照させている。

[root@c relion-3.0_beta]# vi src/macros.h
 :
#define MACROS_H
 
#define RELION_VERSION "3.0-beta-2"    <-- これ
 
#include <math.h>
#include <signal.h>
 :
[root@c relion-3.0_beta]#

なので、「/Appl/.relion/3.0-beta-2」を用意して、下記のようにしている

[root@c ~]# vi /Appl/.relion/3.0-beta-2
#
# relion-3.0-beta-2
#  2018.8.4 
#
RELION=/Appl/relion-3.0-beta-2
export PATH=$RELION/bin:/usr/lib64/openmpi/bin:$PATH
export LD_LIBRARY_PATH=$RELION/lib:/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH
export RELION_QSUB_TEMPLATE=$RELION/bin/qsub.sh
export RELION_QUEUE_NAME=s3
export RELION_QUEUE_USE=false
export RELION_CTFFIND_EXECUTABLE=/Appl/ctf/ctffind4.exe
export RELION_MOTIONCOR2_EXECUTABLE=/Appl/local/bin/MotionCor2
export RELION_GCTF_EXECUTABLE=/Appl/Gctf/bin/gctf
export RELION_RESMAP_EXECUTABLE=/Appl/local/bin/ResMap
[root@c ~]#

relionのGUIを呼び出すコマンド「relion3」を/usr/local/binとか/Appl/local/binに配置する

[root@c ~]# vi /Appl/local/bin/relion3
#!/bin/bash
#   relion-3.0-beta-2
#
source /Appl/.relion/3.0-beta-2
relion_maingui "$@"
[root@c ~]#

メモ

「multibody refinement」で動かないとの苦情が届いた。
35行目でXXXcommandXXXで展開される複数行をキャッチさせ、40行目で「&&」でジョインさせた。
57行目の実際の実行コマンドを展開させる際、「${cmd:0:-2}」で、末尾の「&&」を削って、59行目のevalで実行
1thread/1mpiで relion_refine_mpi、relion_autopick_mpi を GPU で計算するとエラーが発生します。
(qsub.shの問題です)
*一応、43行目と47行目、60行目を有効にして、57行目を無効にして、58行目を代わりに有効にすればいけるかもしれない。問題点はジョブが途中で落ちた場合、$PBS_NODEFILEが残ってしまう...


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2018-08-06 (月) 14:33:20 (72d)