Relionでqsubを使いたい

こちらではRelionのソースコードをちょいと書き換えて

  • 使用するノード数
  • 使用するノードあたりのMPI数
  • 使用するMPIあたりのthreads数

でqsubを発行するような変更を行っている. 参照Relion/qsub

っが一方でそもそもソースコードを修正することなく、そのまま使った場合の説明も必要かかなと思いここにそれを描いてみる。

Relionの本家様では
https://www3.mrc-lmb.cam.ac.uk/relion//index.php?title=TORQUE_template_script_exampleから
下記のようなqsub.shを提案している

#!/bin/bash
### Inherit all current environment variables
#PBS -V
### Job name
#PBS -N XXXnameXXX
### Keep Output and Error
#PBS -k eo
### Queue name
#PBS -q XXXqueueXXX
### Specify the number of nodes and thread (ppn) for your job.
#PBS -l nodes=XXXmpinodesXXX:ppn=XXXthreadsXXX
### Tell PBS the anticipated run-time for your job, where walltime=HH:MM:SS
###PBS -l walltime=XXXextra1XXX:00:00
#################################
### Switch to the working directory;
cd $PBS_O_WORKDIR
### Run:
mpirun --bynode -np XXXmpinodesXXX XXXcommandXXX
echo "done"

qsub.sh

上記のqsub.shのままで十分なのですが、上記を使うと下記オレンジ部分の標準出力と標準エラーが表示されない。
2018y08m03d_211737714.png

できればjobをqsubに流しても進捗は確認できるようにしたいものである。
っで、それを有効にするために下記を提案してみる
*relion_refine_mpiにてGPUを使った計算なら自動的にnpを+1にしています。

#!/bin/bash
### Inherit all current environment variables
#PBS -V
### Job name
#PBS -N XXXnameXXX
### Keep Output and Error
#PBS -k eo
### Queue name
#PBS -q XXXqueueXXX
### Specify the number of nodes and thread (ppn) for your job.
#PBS -l nodes=XXXmpinodesXXX:ppn=XXXthreadsXXX
### Tell PBS the anticipated run-time for your job, where walltime=HH:MM:SS
###PBS -l walltime=XXXextra1XXX:00:00
#################################
### Switch to the working directory;
cd $PBS_O_WORKDIR
### Run:
cmd_=$(/bin/cat <<_EOF_
XXXcommandXXX
_EOF_
)
cmd=$(echo "$cmd_" | sed -z 's/\n/\&\&/g')
run=$(echo $cmd|awk '{print $1}')
np=XXXmpiprocXXX
localnodefile=1
opt=" --display-map --bind-to none --mca plm_rsh_agent rsh --map-by node "
 
if [ ${run##*/} =  "relion_refine_mpi" ]; then
   if [[ $cmd = *--gpu* ]]; then
      np=$(expr $np + 1)
      nodeCount=$(wc -l $PBS_NODEFILE|awk '{print $1}')
      if [ $np -gt $nodeCount ]; then
         /bin/cp $PBS_NODEFILE .
         /usr/bin/tail -1 $PBS_NODEFILE >> $(basename $PBS_NODEFILE)
         localnodefile=2
      fi
   fi
fi
if [ $localnodefile -eq 1 ]; then
 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"
else
 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"
fi
 
 
eval $command
 
if [ -f $(basename $PBS_NODEFILE) ]; then
  /bin/rm -f $(basename $PBS_NODEFILE)
fi
 
echo "done"

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-02-04 (火) 10:13:39 (16d)