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」タブは下記のようにする。

留意 「Queue submit command」が「bash」であることに留意
あと、実行場所の絶対パスが、計算ノードの絶対パスと同じであること
加え、sshで「ジョブ発行ノード」にパスワード無しで行けること
一応、macOS Sierraで作ったrelion-2.1.0で成功している