ATLAS日本基礎ネットワーク LCGミドルウエアトレーニングコース

第六回 Athenaジョブを投げる

ここでの目標

1.グリッド上のAthena環境

1.1.VO毎の環境

VOが実装の単位。ローカルアカウントatlas_j001...

1.2.athenaのインストール場所

VO固有のインストール場所

/opt/expt_soft/VOnameが標準。今の場合/opt/exp_soft/atlas_j

pacmanによるインストール。環境設定もインストール場所にあるsetup.sh/setup.cshを読み込むことで出来る。

1.3.データファイルの取り扱い

LFCを使用。そのための環境設定が必要。

/grid/atlas_jという論理名空間のディレクトリの下に、各人の作業用サブディレクトリを用意。

1.4.データベース

当面デフォルトでCERNを見に行く。

ローカルにレプリカを用意した方がよいが。

2.Athenaジョブの記述

2.1.JDLとスクリプトの用意

まず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のみが入っています。

2.2.HelloWorldジョブの投入

これまでにやったのと同様にジョブをサブミットします。

$ edg-job-submit --vo atlas_j -o jobid hello.jdl

ジョブ投入に成功したらステータスを見ます。

$ edg-job-status -i jobid

ジョブが完了したら結果を回収します。

$ edg-job-get-output -i jobid

デフォルトで/tmp/jobOutputに出力が得られます。

3.レプリカカタログの使用

3.1.出力ファイルをカタログする

簡単なジェネレータの例を見てみましょう。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

となります。

3.2.入力ファイルをカタログから取ってくる

ソフトウエアのチェーンとして、一つ前(例えばジェネレーション)の出力は次の段(シミュレーション)の入力になります。シミュレーションを見てみましょう。

まずジョブ記述。

$ 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

当然、この段の出力はカタログしておき、次の段(ディジタイゼーション)で入力として使います。

4.Athenaジョブの投入と回収

4.1.投入できるサイトを探す

ここまでは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を見て、その下にインストールされているかどうかを確認する必要があります。

4.2.ジョブをサブミットする

走る場所が限られている場合、もし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を指定してジョブを投入します。

5.自分のパッケージの使用

5.1.プライベートなパッケージ

通常、LCGで使われるインストールはpacmanによるもので、ソースファイルは含まれていません。それ故、自分で修正したパッケージを使ってジョブを走らせたい場合、そのパッケージを転送する必要があります。

その場でビルドするのは効率的でないので、ランタイムライブラリをあらかじめ作っておき、そのファイルを優先的に見るようにします。InstallArea/lib/...をtarしておいてInputSandboxに入れます。

5.2.CMT環境の設定

CMTPATH環境変数は、デフォルトでは$VO_ATLAS_J_SW_DIRの下のdist/リリース等を見るようになっています。こちらから持ち込んだパッケージを優先的に見せるにはCMTPATHの先頭に自分のパッケージの場所を加えておく必要があります。

5.3.ジョブの記述

以上の手順を踏んだジョブ記述は次のようになります。

$ 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

ここで使われたジョブオプションは

となります。

以下、リコンストラクション以降もグリッドで走らせてみてはいかがでしょうか。



2005年12月22日更新