OpenPBSの [PBS Professional User's Guide]ドキュメントの「2.1.5 Scratch Space for Jobs」に
ジョブ発行時に用意されるテンポラリディレクトリの作り方が記載されている。
https://www.altairjp.co.jp/pbs-works-documentation/

relionとかで 「scratch_dir」とスクラッチの場所を指定できるのは嬉しいが、
計算が途中で止まったり、qdelとかで計算を中止すると、そのスクラッチ場所にデータが残ってしまう。。。

残ったままだと、他の方が計算するときにスクラッチ領域が圧迫する。
回避策としては、同じスクラッチフォルダ/ファイルを指定する。そうすれば、残ったデータは上書きされるので大丈夫。

っが、一台のマシンを複数人で使用するとなると、、非常にまずい。

自動で消し去るにはどうしたらいいのか?
っで、このPBS_TMPDIRを検討してみる

計算ノードの設定ファイルを修正してTMPDIRを有効にする

具体的には「/var/lib/pbs/mom_priv/config」に「$tmpdir <スクラッチ場所>」を追加します。

[root@n1 ~]# vi /var/lib/pbs/mom_priv/config
$clienthost pbspro.sybyl.local
$restrict_user_maxsysid 999
$tmpdir /scratch               <--- これを追加
 
[root@n1 ~]#

その後、pbsを再起動させます。

[root@n1 ~]# systemctl restart pbs

テスト

簡単なテストを行います。

#!/bin/sh
#PBS -q bio
#PBS -l nodes=1:ppn=4
#PBS -j oe
 
env

なジョブファイルを用意して、qsub実行すると、結果ファイルにはqsub時の環境変数が列挙される。
その中に
「TMPDIR=/scratch/pbs.14.pbspro」
と明記される。

この環境変数 $TMPDIR がOpenPBSによって作られたテンポラリディレクトリとなる.

relionで使ってみる

relionで使用するなら、「Copy particles to scratch directory:」の値を「$TMPDIR」とします。
2019y05m11d_225743593.png
そうすると、コマンドは下記の様に発行される。

 *** The command is:
`which relion_refine` --continue Class2D/job008/run_it025_optimiser.star --o Class2D/job008/run_ct25 \
--dont_combine_weights_via_disc --scratch_dir $TMPDIR --pool 30 --pad 2  --iter 25 --tau2_fudge 2 \
--particle_diameter 200 --oversampling 1 --psi_step 12 --offset_range 5 --offset_step 2 --j 6 --gpu "0:1:2:3"

一応「--scratch_dir $TMPDIR」となっている。
このまま実行すると「/scratch/pbs.15.pbspro/relion_volatile/」を掘って、そこに「particles.mrcs」を置いてくれます。

途中で、ジョブをqdelで停止させると、
「/scratch/pbs.15.pbspro」
から
「/scratch/pbs_remove.15.pbspro」
に代わって、
このフォルダが削除される。

一応目論みどおりかな。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2020-09-15 (火) 05:31:59 (74d)