Relion/MacOSX

macOS向けのTorqueは用意していないが、シェルスクリプトを駆使してmacOSからジョブ発行ノードにsshで接続して、ジョブを流してみた

シェルスクリプトの中身はこんな感じ
*下記はRelion/TORQUE#l55af71bでのソース変更を前提としてます

  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
#!/bin/bash
 
queuing=client.sybyl.local                  # ジョブ発行ノード
script=run_subscript.`date +%y%m%d%H%M%S`   # qsubスクリプト
pwd=`pwd`                                   # 現在の場所
 
# --- qsubスクリプトの作成 --- #
#
/bin/cat <<'_EOF_'> $script
#!/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"
#
_EOF_
/bin/cat <<_EOF_>> $script
cd $pwd
_EOF_
/bin/cat <<'_EOF_'>> $script
host=$(cat $PBS_NODEFILE | sort -u | tr "\n" " ")
#
SECONDS=0
/bin/cat <<_OUT_> 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`
_OUT_
 
# relion-2のGPU対応「relion_refine_mpi」
cmd="XXXcommandXXX"
run=$(echo $cmd|awk '{print $1}')
np=XXXmpiprocXXX
if [ ${run##*/} =  "relion_refine_mpi" ]; then
   if [[ $cmd = *--gpu* ]]; then
      np=$(expr XXXmpiprocXXX + 1 )
      echo "GPU使用のためnp数を変更しました: XXXmpiprocXXX --> $np" >> XXXoutfileXXX
   fi
fi
/bin/cat <<_OUT_>>XXXoutfileXXX
 
use relion:
`readlink -f $run`
-------------------------------------------
_OUT_
 
{ { mpirun $opt -machinefile $PBS_NODEFILE -np $np XXXcommandXXX | tee -a XXXoutfileXXX ; } 3>&2 2>&1 1>&3 | tee -a XXXerrfileXXX ; } 3>&2 2>&1 1>&3
 
cat <<_OUT_>>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
_OUT_
_EOF_
 
#
# -- 作成したqusbスクリプトを実行する -- #
#
 
ssh $queuing "cd $pwd && qsub $script"      # 「ジョブ発行ノード」にsshで接続して、実行場所に移動後(cd)、qsubを実行
rm $script                                  #  qusbスクリプトを削除

これをファイル名「qsub.sh」とかにして、「/Appl/Darwin/relion/bin/qsub.sh」とかに配置.
macOS上で起動するrelionの「Running」タブは下記のようにする。
2017y12m28d_003750169.png
留意 「Queue submit command」が「bash」であることに留意

あと、実行場所の絶対パスが、計算ノードの絶対パスと同じであること
加え、sshで「ジョブ発行ノード」にパスワード無しで行けること

一応、macOS Sierraで作ったrelion-2.1.0で成功している


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-12-28 (木) 05:36:17 (25d)