PBSのファイル転送 stagein/stageout およびsandbox属性について
この文章ではPBS Professionalで使用するアプリケーションファイルの転送方法、 stagein/stageout job属性 (attribute)、sandbox属性等について解説します。
当文書では以下の4台で環境を構成している例を使用します。
pbs-head: 管理サーバ pbs_server,pbs_sched,pbs_commの各デーモンが稼働
node01: 計算ノード pbs_momデーモンが稼働、Optistructがインストールされている
node02: 計算ノード pbs_momデーモンが稼働、Optistructがインストールされている
front-end: コマンド専用サーバ PBSコマンドのみをインストール
* 各サーバのホスト名とIPの紐づけは以下
192.168.57.132 pbs-head
192.168.57.133 node01
192.168.57.137 node02
192.168.57.138 front-end
* 以下の説明中、rootで実施している作業は、rootで実行することを推奨するものではありません。
sudoなど必要なセキュリティ設定を実施することを推奨します。
1.インプットファイルを計算ノードに転送する
1.1.インプットファイルが計算ノードに存在せず、ファイルの転送もしないケース
[user01@front-end ~]$ pwd
/home/user01
[user01@front-end ~]$ ls beam.fem
beam.fem
[user01@front-end ~]$ cat opt.sh
#!/bin/sh
#PBS -N OPT
#PBS -l select=1:ncpus=1
export ALTAIR_LICENSE_PATH=6200@node01
cd $PBS_O_WORKDIR
/hw/2022.3/altair/scripts/optistruct beam.fem
[user01@front-end ~]$
[user01@front-end ~]$ qsub opt.sh
82.pbs-head
[user01@front-end ~]$ cat OPT.o82
ERROR in hwsolver script execution:
Specified input file beam.fem is missing
***************************************
この場合、計算ノード上にはインプットファイルが存在しないので、当然、アプリケーションの実行に失敗します。
1.2. インプットファイルを計算ノードに転送するため、stagein job 属性(attribute)を使用
このジョブにはstagein属性(太字部分)を追加して、インプットファイルを指定しました。
[user01@front-end ~]$ pwd
/home/user01
[user01@front-end ~]$ ls beam.fem
beam.fem
[user01@front-end ~]$ cat opt.sh
#!/bin/sh
#PBS -N OPT
#PBS -l select=1:ncpus=1
#PBS -W stagein=.@front-end:/home/user01/beam.fem
export ALTAIR_LICENSE_PATH=6200@node01
cd $PBS_O_WORKDIR
/hw/2022.3/altair/scripts/optistruct beam.fem
[user01@front-end ~]$ qsub opt.sh
83.pbs-head
[user01@front-end ~]$ tail OPT.o83
FEASIBLE DESIGN (ALL CONSTRAINTS SATISFIED).
==============================
Solver run completed.
OptiStruct:: Solver run finished after 25 seconds.
[user01@front-end ~]$
この場合、アプリケーションは正常終了しますが、アウトプットファイルが計算ノードに残存します。
[user01@front-end ~]$ qstat -fx 83 | grep exec_vnode
exec_vnode = (node01:ncpus=1)
[user01@front-end ~]$ ssh ls /home/user01 node01
ssh: Could not resolve hostname ls: Name or service not known
[user01@front-end ~]$ ssh node01 ls
beam.HM.comp.tcl
beam.HM.ent.tcl
beam.hgdata
beam.hist
beam.mvw
beam.oss
beam.out
beam.res
beam.sh
beam.stat
beam_des.h3d
beam_hist.mvw
beam_s1.h3d
hwsolver.mesg
[user01@front-end ~]$
[0] 0:user01@front-end:~*
2.アウトプットファイルをSubmitしたホストに転送
2.1. アウトプットファイルをSubmitしたホストに転送するため、stageout job 属性(attribute)を使用
このジョブでは、stageinに加えてstageout属性(太字部分)を追加し、アウトプットファイルの転送先を指定しました。
[user01@front-end ~]$ cat opt.sh
#!/bin/sh
#PBS -N OPT
#PBS -l select=1:ncpus=1
#PBS -W stagein=.@front-end:/home/user01/beam.fem
#PBS -W stageout=*@front-end:/home/user01/
export ALTAIR_LICENSE_PATH=6200@node01
cd $PBS_O_WORKDIR
/hw/2022.3/altair/scripts/optistruct beam.fem
[user01@front-end ~]$
[user01@front-end ~]$ qsub opt.sh
84.pbs-head
[user01@front-end ~]$ tail OPT.o84
FEASIBLE DESIGN (ALL CONSTRAINTS SATISFIED).
==============================
Solver run completed.
OptiStruct:: Solver run finished after 20 seconds.
[user01@front-end ~]$
アプリケーションも正常終了し、アウトプットファイルもsubmitしたホストに転送されていることが確認できます。
[user01@front-end ~]$ ls | grep -e beam -e hw
beam.HM.comp.tcl
beam.HM.ent.tcl
beam.fem
beam.hgdata
beam.hist
beam.mvw
beam.oss
beam.out
beam.res
beam.sh
beam.stat
beam_des.h3d
beam_hist.mvw
beam_s1.h3d
hwsolver.mesg
[user01@front-end ~]$
3.同一ファイルを使って複数ジョブを実行した際に生じる問題
[2]でつかったscriptを複数実行し、それが同一計算ノードに同時に割り当てられた場合問題が生じます。
上記スクリプトでは、/home/<userid>で計算が実行されるためどのジョブで作成されたインプットファイル・アウトプットファイルかが区別できず、ファイルの競合が発生します。
このような場合、個々のジョブに個々のテンポラリディレクトリを割り当てることができます。
例えば、上記[2]で実行した実行ディレクトリは以下で確認できます。
[user01@front-end ~]$ qstat -fx 84 | grep jobdir
jobdir = /home/user01
[user01@front-end ~]$
この振る舞いを変更する sandbox=PRIVATE パラメータを追加して変更します(以下太字部分)。
(submitディレクトリを示す $PBS_O_WORKDIRに移動する部分はコメントアウトします。)
[user01@front-end ~]$ cat opt.sh
#!/bin/sh
#PBS -N OPT
#PBS -l select=1:ncpus=1
#PBS -W sandbox=PRIVATE
#PBS -W stagein=.@front-end:/home/user01/beam.fem
#PBS -W stageout=*@front-end:/home/user01/
export ALTAIR_LICENSE_PATH=6200@node01
#cd $PBS_O_WORKDIR
/hw/2022.3/altair/scripts/optistruct beam.fem
[user01@front-end ~]$
計算ノード上にテンポラリディレクトリが作成され、その中にインプットファイルがコピー、さらに、アウトプットファイルが作成されていることが分かります。
なお、作成されたテンポラリディレクトリのパスはjobdirジョブ属性で確認することができます。
[user01@front-end ~]$ qsub opt.sh
101.pbs-head
[user01@front-end ~]$ qstat -fx 101 | grep exec_vnode
exec_vnode = (node01:ncpus=1)
[user01@front-end ~]$ qstat -fx 101 | grep jobdir
jobdir = /home/user01/pbs.101.pbs-head.x8z
[user01@front-end ~]$ ssh node01 ls pbs.101.pbs-head.x8z
101.pbs-head.ER
101.pbs-head.OU
OS54085412_er.rs~
OS54085412_inc.txt
beam.err_5408.out
beam.fem
beam.hgdata
beam.hist
beam.mvw
beam.out
beam.res
beam.scr_5408.out
beam.sh
beam.stat
beam_54085412_00.rs~
beam_54085412_s61.rs~
beam_des.h3d
beam_s1.h3d
[user01@front-end ~]$
[user01@front-end ~]$ tail OPT.o101
FEASIBLE DESIGN (ALL CONSTRAINTS SATISFIED).
==============================
Solver run completed.
OptiStruct:: Solver run finished after 19 seconds.
アプリケーションも正常終了し、アウトプットファイルもsubmitしたホストに転送されていることが確認できます。
[user01@front-end ~]$ ls | grep -e beam -e hw
beam.HM.comp.tcl
beam.HM.ent.tcl
beam.fem
beam.hgdata
beam.hist
beam.mvw
beam.oss
beam.out
beam.res
beam.sh
beam.stat
beam_des.h3d
beam_hist.mvw
beam_s1.h3d
hwsolver.mesg
[user01@front-end ~]$
4.任意のディレクトリでプログラムを実行させる
上記のケースでsandbox=PRIVATEを使うことによって個々のジョブにテンポラリディレクトリを割り当てることができました。
さらに、このテンポラリディレクトリを任意のディレクトリとすることも可能です。
この場合、jobdir_root pbs_mom用のパラメータを用います。
例えば、/stageディレクトリを実行ディレクトリにしたい場合、計算ノード側のjobdir_root設定と組み合わせてsandbox=PRIVATEを使います。
本例では/stageというディレクトリを使用した例を用います。
*計算ノードであるnode01で実施します。
Permissionは指定の1777とし、加えて必要に応じてスティッキービットを立てます。
[root@node01 ~]# mkdir /stage
[root@node01 ~]# chmod 1777 /stage
[root@node01 ~]# chmod o+t /stage
[root@node01 ~]# ls -al /stage
合計 0
drwxrwxrwt 2 root root 6 11月 30 15:53 .
dr-xr-xr-x. 19 root root 267 11月 30 15:53 ..
pbs_momのパラメータ、"jobdir_root"を設定します。
反映するには、pbs_momプロセスに対するHUPが必要です。
[root@node01 ~]# . /etc/pbs.conf
[root@node01 ~]# cat $PBS_HOME/mom_priv/config | grep jobdir_root
$jobdir_root /stage
[root@node01 ~]#
[root@node01 ~]# ps -ef | grep [p]bs_mom
root 8596 1 0 15:45 ? 00:00:00 /opt/pbs/sbin/pbs_mom
[root@node01 ~]# kill -HUP 8596
[root@node01 ~]#
[root@node01 ~]# cat $PBS_HOME/mom_logs/20231130 | grep jobdir_root
11/30/2023 15:55:11;0002;pbs_mom;Svr;set_jobdir_root;/stage
[root@node01 ~]#
ジョブを実行すると、計算ノード上の/stage配下にテンポラリディレクトリが作成され、その中にインプットファイルがコピー、アウトプットファイルが作成されていることが分かります。
実行しているスクリプトは[3]と同じものを用いています。
[user01@front-end ~]$ qsub opt.sh
112.pbs-head
[user01@front-end ~]$ qstat -fx 112 | grep exec_vnode
exec_vnode = (node01:ncpus=1)
[user01@front-end ~]$ qstat -fx 112 | grep jobdir
jobdir = /stage/pbs.112.pbs-head.x8z
[user01@front-end ~]$ ssh node01 ls /stage/pbs.112.pbs-head.x8z
112.pbs-head.ER
112.pbs-head.OU
OS1016010164_er.rs~
OS1016010164_inc.txt
beam.err_10160.out
beam.fem
beam.hgdata
beam.hist
beam.mvw
beam.out
beam.res
beam.scr_10160.out
beam.sh
beam.stat
beam_1016010164_00.rs~
beam_1016010164_s61.rs~
beam_des.h3d
beam_s1.h3d
[user01@front-end ~]$
* ファイルの転送に関する各属性・パラメータの構文・詳細は以下をご確認ください。
PBS Professional <version> User’s Guide
3 Job Input & Output Files
PBS Professional <version> Administrator’s Guide
Table 10-7: Options, Attributes, Environment Variables, etc., Affecting Staging
https://altairone.com/Marketplace?queryText=pbs&tab=Download&app=PBS+Professional