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

でいいのでは


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-02-11 (火) 03:32:59 (147d)