ATLAS日本基礎ネットワーク LCGミドルウエアトレーニングコース
ここでの目標
VOが実装の単位。ローカルアカウントatlas_j001...
VO固有のインストール場所
/opt/expt_soft/VOnameが標準。今の場合/opt/exp_soft/atlas_j
pacmanによるインストール。環境設定もインストール場所にあるsetup.sh/setup.cshを読み込むことで出来る。
LFCを使用。そのための環境設定が必要。
/grid/atlas_jという論理名空間のディレクトリの下に、各人の作業用サブディレクトリを用意。
当面デフォルトでCERNを見に行く。
ローカルにレプリカを用意した方がよいが。
まずhelloworldをやってみましょう。UIにログインします。tutorialというサブディレクトリをローカルに作り、その下にhelloというサブディレクトリを作りましょう。そこで作業します。
JDLファイルは次のようになります。hello.jdlです。
$ more hello.jdl [ Executable = "/bin/sh"; Arguments = "hello.sh"; StdOutput = "std.out"; StdError = "std.err"; InputSandbox = {"hello.sh"}; OutputSandbox = {"std.out","std.err"}; ]
スクリプトファイルとしてhello.shが必要です。
$ more hello.sh #!/bin/sh # echo "Setting SITEROOT to /opt/exp_soft/atlas_j" export SITEROOT=/opt/exp_soft/atlas_j echo "SITEROOT = ${SITEROOT}" # echo "Sourcing \$SITEROOT/setup.sh" source $SITEROOT/setup.sh which cmt.exe # echo "Sourcing \$SITEROOT/dist/10.0.4/AtlasRelease/*/cmt/setup.sh" source $SITEROOT/dist/10.0.4/AtlasRelease/AtlasRelease-*/cmt/setup.sh which athena.py # echo "Getting HelloWorldOptions.py" get_files HelloWorldOptions.py # echo "Running athena" athena HelloWorldOptions.py
手続きの詳細はAthenaのチュートリアルなどをご覧ください。この場合、ジョブオプションファイルも含めてすべて標準のものを使います。それ故、InputSandboxにはhello.shのみが入っています。
これまでにやったのと同様にジョブをサブミットします。
$ edg-job-submit --vo atlas_j -o jobid hello.jdl
ジョブ投入に成功したらステータスを見ます。
$ edg-job-status -i jobid
ジョブが完了したら結果を回収します。
$ edg-job-get-output -i jobid
デフォルトで/tmp/jobOutputに出力が得られます。
簡単なジェネレータの例を見てみましょう。McEvent.rootという出力ファイルが出来ますが、これをカタログします。
まずジョブ記述。これはgridtb01.icepp.jp上のものです。
本来はいずれのサイトでも同じ場所にあるべきなのですが、インストールの都合により講習会時点では異なっています。susy05からサブミットする場合、/opt/exp_soft/atlas_jを/opt/exp_soft/atlas_j/11.0.2と読み替えてください。さらにサイトを指定してジョブを投入する必要があります。
$ more generation.jdl [ Executable = "/bin/sh"; Arguments = "generation.sh"; StdOutput = "std.out"; StdError = "std.err"; InputSandbox = {"generation.sh","testOptions.py", "jobOptions_ParticleGenerator.py","Generator_pool_out_frag.py"}; OutputSandbox = {"std.out","std.err","CLIDDBout.txt","AtRndmGenSvc.out", "PoolFileCatalog.xml"}; OutputData = { [ OutputFile = "McEvent.root"; LogicalFileName = "lfn:/grid/atlas_j/sakamoto/McEvent0001.root"; StorageElement = "gridtb03.icepp.jp"; ] }; ]
ここで使われたジョブオプションファイルは
次にシェルスクリプトは
$ more generation.sh #!/bin/sh # echo "Setting SITEROOT to /opt/exp_soft/atlas_j" export SITEROOT=/opt/exp_soft/atlas_j echo "SITEROOT = ${SITEROOT}" # echo "Sourcing \$SITEROOT/setup.sh" source $SITEROOT/setup.sh /usr/bin/which cmt.exe # echo "Sourcing \$SITEROOT/dist/10.0.4/AtlasRelease/*/cmt/setup.sh" source $SITEROOT/dist/10.0.4/AtlasRelease/AtlasRelease-*/cmt/setup.sh /usr/bin/which athena.py # echo "Getting Files" get_files PDGTABLE.MeV # echo "Running athena" athena testOptions.py # echo "register at SE" export LCG_CATALOG_TYPE=lfc export LFC_HOST=gridtb07.icepp.jp
lcg-cr --vo atlas_j -d gridtb03.icepp.jp -l lfn:/grid/atlas_j/sakamoto/mcevent0001.root file:$PWD/McEvent.root
となります。
ソフトウエアのチェーンとして、一つ前(例えばジェネレーション)の出力は次の段(シミュレーション)の入力になります。シミュレーションを見てみましょう。
まずジョブ記述。
$ more simulation.jdl [ Executable = "/bin/sh"; Arguments = "simulation.sh"; StdOutput = "std.out"; StdError = "std.err"; InputSandbox = {"simulation.sh", "RomeSimulationConfig.py", "RomeGeo2G4.py", "GeoModelInit.py", "GeoModelInitStandard.py", "RDBAccessSvcPdb_jobOptions.py" }; OutputSandbox = { "std.out", "std.err", "CLIDDBout.txt", "PoolFileCatalog.xml" }; ]
ここで使われたジョブオプションは
次にシェルスクリプトは、
$ more simulation.sh #!/bin/sh # setup source ${VO_ATLAS_J_SW_DIR}/setup.sh source ${VO_ATLAS_J_SW_DIR}/dist/10.0.4/AtlasRelease/AtlasRelease-*/cmt/setup.sh
get_files PDGTABLE.MeV get_files bmagatlas03_test2.data mv bmagatlas03_test2.data fieldmap.dat
export LCG_CATALOG_TYPE=lfc export LFC_HOST=gridtb07.icepp.jp
lcg-cp --vo atlas_j lfn:/grid/atlas_j/sakamoto/mcevent0001.root file:${PWD}/Evge n.pool.root
pool_insertFileToCatalog Evgen.pool.root
athena RomeSimulationConfig.py RomeGeo2G4.py
lcg-cr --vo atlas_j -d ${VO_ATLAS_J_DEFAULT_SE} -l lfn:/grid/atlas_j/sakamoto/si mevent0001.root file:${PWD}/myOutput.pool.root
当然、この段の出力はカタログしておき、次の段(ディジタイゼーション)で入力として使います。
ここまではAthenaが全部のサイトにインストールされているように書いてきましたが、実際にはそうでないこともあります。
$ lcg-infosites --vo atlas_j tag ************************************************************************** Information for atlas_j relative to their software tags included in each CE **************************************************************************
Name of the CE:dg01.cc.kek.jp
Name of the CE:dg06.cc.kek.jp
Name of the CE:lcg009.cc.kek.jp
Name of the TAG: VO-atlas_j-release-10.0.4 Name of the CE:gridtb02.icepp.jp
で、ATLASリリースがインストールされている場所を探す方法があります。この場合、管理者が正しくTAGを設定している場合は有効ですが、現在のテストベッドはそこまでいっていません。以前の例文でやったように$VO_ATLAS_J_SW_DIRを見て、その下にインストールされているかどうかを確認する必要があります。
走る場所が限られている場合、もしTAGがちゃんと設定されていれば、
Requirements = Member( "VO-atlas_j-release-11.0.2", other.GlueHostApplicationSoftwareRunTimeEnvironment );
といようなrequirements文をJDLに記述することにより、ジョブが該当するCEに行くようにします。
TAGが設定されていないがインストールが確認されているところにジョブを投げるには、まずそのCE名を確認します。
$ lcg-infosites --vo atlas_j ce
**************************************************************** These are the related data for atlas_j: (in terms of queues and CPUs) ****************************************************************
#CPU Free Total Jobs Running Waiting ComputingElement ---------------------------------------------------------- 32 32 0 0 0 dg01.cc.kek.jp:2119/jobmanager-lcgpbs-atlas_j 20 20 0 0 0 dg06.cc.kek.jp:2119/jobmanager-lcgpbs-atlas_j 8 8 0 0 0 lcg009.cc.kek.jp:2119/jobmanager-lcglsf-atlas_j 14 14 0 0 0 gridtb02.icepp.jp:2119/jobmanager-lcgpbs-atlas_j
このうち、例えばdg01に投げるとすると
$ edg-job-submit --vo atlas_j --resource dg01.cc.kek.jp:2119/jomanager-lcgpbs-atlas_j -o jobid myjob.jdl
というようにCEを指定してジョブを投入します。
通常、LCGで使われるインストールはpacmanによるもので、ソースファイルは含まれていません。それ故、自分で修正したパッケージを使ってジョブを走らせたい場合、そのパッケージを転送する必要があります。
その場でビルドするのは効率的でないので、ランタイムライブラリをあらかじめ作っておき、そのファイルを優先的に見るようにします。InstallArea/lib/...をtarしておいてInputSandboxに入れます。
CMTPATH環境変数は、デフォルトでは$VO_ATLAS_J_SW_DIRの下のdist/リリース等を見るようになっています。こちらから持ち込んだパッケージを優先的に見せるにはCMTPATHの先頭に自分のパッケージの場所を加えておく必要があります。
以上の手順を踏んだジョブ記述は次のようになります。
$ more digi10000.jdl [ Executable = "/bin/sh"; Arguments = "digi10000.sh"; StdOutput = "digi10000.out"; StdError = "digi10000.err"; InputSandbox = {"digi10000.sh", "digi10000.py", "TrigT1TGC_InstallArea.tar.gz" }; OutputSandbox = { "digi10000.out", "digi10000.err", "CLIDDBout.txt", "PoolFileCatalog.xml" }; Requirements = Member( "VO-atlas_j-release-10.0.4", other.GlueHostApplicationSoftwareRunTimeEnvironment ); ]
シェルスクリプトでは持ち込んだtarファイルを展開するとともにCMTPATHにその場所を追加しています。
$ more digi10000.sh #!/bin/sh # setup echo "Starting job..." date
source ${VO_ATLAS_J_SW_DIR}/11.0.2/setup.sh source ${VO_ATLAS_J_SW_DIR}/11.0.2/dist/11.0.2/AtlasRelease/AtlasRelease-*/cmt/setup.sh
tar xzvf TrigT1TGC_InstallArea.tar.gz
export CMTPATH=${PWD}:${CMTPATH} echo "CMTPATH set to " ${CMTPATH}
get_files PDGTABLE.MeV get_files bmagatlas03_test2.data mv bmagatlas03_test2.data fieldmap.dat
export LCG_CATALOG_TYPE=lfc export LFC_HOST=gridtb07.icepp.jp
lcg-cp --vo atlas_j lfn:/grid/atlas_j/sakamoto/run10000.pool.root file:${PWD}/ru n10000.pool.root athena digi10000.py Digitization/AtlasDigitization.py lcg-cr --vo atlas_j -d ${VO_ATLAS_J_DEFAULT_SE} -l lfn:/grid/atlas_j/sakamoto/di gi10000.rdo.root file:${PWD}:digi10000.rdo.root
echo "Ending job" date
ここで使われたジョブオプションは
となります。
以下、リコンストラクション以降もグリッドで走らせてみてはいかがでしょうか。