Gautomatchは1つのGPUしか使ってくれない。
parallelコマンドを併用して下記のようにすれば並列で計算してくれます。
*4 GPUマシンなら
cd project_directory
ls MotionCorr/job002/Micrographs/sq03_*.mrc | parallel -j4 /apps/Gautomatch/v0.56/Gautomatch --gid '$(({%} - 1))' \
--speed 1 --apixM 1.47 --diameter 150 --cc_cutoff 0.5 --lave_D 150 --lsigma_D 300 {}「--gid」でgpuIDを指定するのですが、これを「-j」コア数と連携させてます。
top画面からは
:
:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13885 saber 20 0 37.4g 393228 139260 R 39.1 0.3 0:01.18 /apps/Gautomatch/v0.56/Gautomatch --gid 2 --speed 1 --apixM 1.4+
13893 saber 20 0 37.6g 394812 139160 R 25.5 0.3 0:00.77 /apps/Gautomatch/v0.56/Gautomatch --gid 3 --speed 1 --apixM 1.4+
13897 saber 20 0 37.7g 275820 130272 R 12.3 0.2 0:00.37 /apps/Gautomatch/v0.56/Gautomatch --gid 0 --speed 1 --apixM 1.4+
13901 saber 20 0 37.1g 128248 117092 D 5.3 0.1 0:00.16 /apps/Gautomatch/v0.56/Gautomatch --gid 1 --speed 1 --apixM 1.4+
10850 root 0 -20 0 0 0 S 3.6 0.0 0:22.81 [kworker/1:2H]
:となる。
なんかの拍子で上記ジョブがとまってしまった場合、再度はじめから実行するのはいいが
可能ならば途中で終わったところから再開したいものである。
その場合、要点として「_automatch.box」がない「*.mrc」ファイルを見つければいいので
for i in `ls *.mrc`;do
if [ ! -f ${i%.*}_automatch.box ];then
echo $i
fi
doneがベース。っでこれを1行にしてパイプで前述のparallelに繋げればいい。
なので
for i in `ls *.mrc`;do if [ ! -f ${i%.*}_automatch.box ];then echo $i;fi done | parallel -j4 \
/apps/Gautomatch/v0.56/Gautomatch --gid '$(({%} - 1))' \
--speed 1 --apixM 1.47 --diameter 150 --cc_cutoff 0.5 --lave_D 150 --lsigma_D 300 {}とすればいい
qsubに投入したければ
#!/bin/bash
cd project_directory/MotionCorr/job002/Micrographs
for i in `ls *.mrc`;do if [ ! -f ${i%.*}_automatch.box ];then echo $i;fi done | parallel -j4 \
/apps/Gautomatch/v0.56/Gautomatch --gid '$(({%} - 1))' \
--speed 1 --apixM 1.47 --diameter 150 --cc_cutoff 0.5 --lave_D 150 --lsigma_D 300 {}なGautomatch.shを作って
qsub Gautomatch.shでいいのでは