PLEASE USE WYSIWYG AT THE BOTTOM OF THE PAGE TO EDIT THIS PAGE

分室のcondorの使い方

編集にはページ下のWYSIWYGを使ってください。

分室のOS構成

ログイン、バッチのサブミットとワーカーノードのCC7へのアップグレードは完了しました。

  • ログイン
    • lxatut1-20, 23-26, 30-35
  • バッチジョブサブミッション
    • lxatutbs3
  • GPUノード
    • lxatutgpu01,02

condorジョブのtemporaryファイルについて

condorジョブの中でROOTファイルのような大きなファイルにアクセスする場合、maxiなどのリモートディスクを直接読み書きする代わりに、ジョブの最初にローカルディスクにコピーしてから、それを読む方が速いことがあります。また、出力ファイルも一度ローカルディスクに書き出して、ジョブの最後にmaxi等にコピーする方が速い場合があります。そのような目的には /local/scratch/ユーザーネーム を作って使ってください。ジョブの後に消し忘れるとすぐにいっぱいになるので、必ず消すようにしてださい。

condorをつかってバッチジョブを投入する手順

環境設定

ジョブ投入用ノード( lxatutbs3)にログインし、下記のようにscriptを読み込んでcondor commandを使用するための環境をセットアップします。

> source ~condor/condor.sh [or .csh]

また、ジョブのnotification mailが送られてくることがありますので~/.forwardに自分の使っているmail addressを書いておいてください。

ジョブの実行方法

ジョブを投入するにはCondorシステムにジョブの情報を知らせるためのファイル(submission description file)を用意し、condor_submitコマンドを使用し ます。

基本的な使用例

example1 というプログラム/スクリプトを引数 arg を指定して実行する場合を考えます。

1. submission description fileを作成
下記のような example1.sdf というファイルを作ります。

####################
#
# Example 1:
# Single condor job submission
#
####################
Universe     = Vanilla
Getenv       = True
Notification = Always
Executable   = example1
Arguments    = "arg"

# comment out the followings if you don't need to save STDOUT/STDERR/CondorLog
Output = example1.stdout
Error  = example1.stderr
Log    = example1.log

Queue

job submission fileでは "設定項目=内容"の形式で1項目につき1行づつ記述します。上記の設定項目の意味は次のとおりです。

設定項目 内容
Universe ジョブの種類、通常は vanilla (一般的なシリアルジョブ)を指定してください。Condorは種々のジョブを取り扱えますが分室では vanilla ジョブのみサポートします。
Getenv 実際にジョブが実行されるバッチノード上で変数を引き継ぐための設定です。記述がない場合はデフォルト値(False)です。これがないとproxy errorが出るようなので、必ずつけてください。
Notification ジョブ終了のメールによる自動通知設定。デフォルト値は Always。
Executable 実際に実行するコマンドまたはスクリプト名。
Arguments 実行コマンドの引数。
Output 標準出力を記録するファイル名。(指定なしの場合は/dev/null)
Error 標準エラーを記録するファイル名。(指定なしの場合は/dev/null)
Log Condorジョブの実行ログを記述するファイル名(指定なしの場合は/dev/null)、逐次的に記録されていきます。
Queue ジョブの投入。(=なしで)数字を指定することにより複数のジョブを投入することができます。詳細は下記の応用例を参照。
2. ジョブを投入

適当なグループクオータ、例えばgroup_testを指定して condor_submit コマンドを実行します。(指定なしでは投げれないようになってます)

> condor_submit -q group_test example1.sdf Submitting job(s). 
Logging submit event(s).
1 job(s) submitted to cluster 1234

正しくジョブが投入されればジョブ番号(cluster)が表示されます。この場合は1234。 各グループクォータの状況はcondor_qstatで確認できます。

3. ジョブステータスの確認

投入したジョブのステータスの確認には condor_q コマンドを使用します。

> condor_q

表示される項目のIDはジョブ番号、STはステータスを表します。ステータスはI(Idle、実行待ち)/R(Running、実行中)/H(Hold、停止)があります。停止のときはジョブ設定に不備がある可能性がありますので

> condor_q -analyze ???????

で確認してください。

4. ジョブの削除

> condor_rm ???????

5. その他のコマンド

Group quotaの現在のリソース使用量、また自身のgroup accountのpriorityを確認するには以下のコマンドを利用してください。

 > condor_userprio -all

応用

入力や引数の違うジョブを複数同時実行することもできます。例えば example2 というプログラムを引数 arg1 と arg2 で実行する場合のsubmission description fileの記述は以下のようになります。

###################
#
# Example 2:
# multiple condor job submission
#
####################
Executable   = example2
Universe     = vanilla
Getenv       = True
Notification = Error

Arguments = arg1
Output    = example2_1.stdout
Error     = example2_1.stderr
Log       = example2_1.log
Queue

Arguments = arg2
Output    = example2_2.stdout
Error     = example2_2.stderr
Log       = example2_2.log
Queue
 

またよく使う複数ジョブ同時実行の例を以下に示しておきます。大量のジョブを投入するときに便利です。

####################
#
# Example 3:
# fancy condor job submission
#
####################


Executable   = example3
Universe     = vanilla
Getenv       = True
Notification = Error

Arguments = -n $(Process)
Output    = example3.stdout.$(Process)
#Error    = example3.stderr.$(Process)
#Log      = example3.log.$(Process)

Queue 30

この例では example3 というプログラムを30個、オプション -n (数字:0~29) を指定して実行することになります。 それぞれのジョブに共通のジョブ番号とプロセス番号(0~29)が割り振られ、例ではマクロ変数 Process を利用して各プロセス(ジョブ)毎に個別の標準出力用ファイルを指定しています。

その他

特定のマシンを除外したい場合、下記のテキストをjob submission fileに追加してください。

例) lxatutb012を除きたい場合

Requirements = (Machine != "lxatutb012.cern.ch")

複数除外した場合は

Requirements = (Machine != "lxatutb012.cern.ch" && Machine != "lxatutb019.cerh.ch")

Tips

Processマクロ変数

上記のExample3にて、30個のジョブの引数を1~30にして実行したい場合は

Arguments = -n $$([$(Process)+1])

という風に記述すればよいです。

グループアカウントの設定

Group quotaの指定にはcondor_submitコマンドの"-q"オプションで指定できるようにしてあります。 他の指定方法もありますが間違った記述によって quota control上のトラブルとなる場合がありますので使用しないようにしてください。

メモリを大量に必要とするジョブの投入

分室のバッチノードは各ジョブ2GByte以下のメモリ使用を想定して構成されています。2GB以上のメモリを必要とするジョブを投げるためにサブミットファイルに以下の一項目を追加できます。ただし、この設定をするとatut全体で使えるCPUの数は減っていくので必要以上には使わないでください。

request_memory = 4000

単位はMByteです。

EOS上のファイルの読み込み

eos上のファイルは、以下のように "root://eosatlas/" をつけることで、直接File::Openで読み込むことができます。

auto f = TFile::Open("root://eosatlas//eos/atlas/unpledged/group-tokyo/users/masaito/datafiles/mc16_13TeV/AOD/mc16_13TeV.410470.PhPy8EG_A14_ttbar_hdamp258p75_nonallhad.recon.AOD.e6337_s3126_r10724/AOD.14795494._000020.pool.root.1")

もしくは、localに以下のようにコピーすることができます。

xrdcp root://eosatlas//eos/atlas/unpledged/group-tokyo/users/masaito/datafiles/mc16_13TeV/AOD/mc16_13TeV.410470.PhPy8EG_A14_ttbar_hdamp258p75_nonallhad.recon.AOD.e6337_s3126_r10724/AOD.14795494._000020.pool.root.1 .

lxatutでEOSにアクセスできない場合は

export EOS_MGM_URL="root://eosatlas.cern.ch"

を実行してください。

Reference:

認証について

lxatutのcondor jobでは、worker nodeでkerberos認証がされないので、そのままではeosやホームディレクトリを含むAFS上のファイルが読み込めません。この問題の回避策として、kerberos ticket cacheを各worker nodeから見える場所に置く、という方法があります。

例えば、

  • interactive node上で作ったkerberos ticketをdataやmaxi(ホームディレクトリはだめ)にコピー (kerberos ticket cache("krb5cc_XXXXX")の場所はklist -l で確認できます。)
kinit ${USER}@CERN.CH
cp -p /tmp/krb5cc_XXXXX /data/data3/zp/username/krb5cc.cache

あるいは

kinit -c /data/data3/zp/username/krb5cc.cache

あるいは

kinit -c /data/data3/zp/username/krb5cc.cache ${USER}@CERN.CH

(以下、kinitコマンドは適宜、読みかえてください。)

このファイルが他のユーザーに読まれるとなりすまされてしまうので、パーミッションには気をつけてください。上にかかれているコマンドなら大丈夫なはずです。

  • kerberos ticketの有効期限の確認。以下のコマンドでExpiresとrenew untilの二つが分かります。前者は有効期間で、後者はパスワード無しで延長できる期限間です。
klist -c /data/data3/zp/username/krb5cc.cache
  • batch job内で、このキャッシュファイルを参照させる
export KRB5CCNAME=/data/data3/zp/username/krb5cc.cache
aklog

とすることでbatch job内でeosとAFS にアクセス可能になります。eosだけの場合はaklogは必要ありません。このcacheは有効期限があるので、時間がかかるjobを投げるときは注意をして下さい。

  • キャッシュファイルの有効期限の更新
    • 上記のrenew untilまでの間であれば、以下のコマンドでパスワードが聞かれません。コマンドを適当な一つのPCでcronなどを使って自動的に更新させることもできます。
    • kinit -R -c /data/data3/zp/username/krb5cc.cache
    • renew untilに近くなったら、とすることでkerberos ticketの有効期限がrenew untilも含めて更新されます。期限はklistで確認してください。
kinit -c /data/data3/zp/username/krb5cc.cache

lxplus上のhtcondor でjobを投げるときは、自動的にこのようなことが行われているようなので、ユーザーが認証の問題を意識する必要はありません。

Edit | Attach | Watch | Print version | History: r11 < r10 < r9 < r8 < r7 | Backlinks | Raw View | WYSIWYG | More topic actions
Topic revision: r11 - 2020-10-13 - RyuSawada
 
    • Cern Search Icon Cern Search
    • TWiki Search Icon TWiki Search
    • Google Search Icon Google Search

    Main All webs login

This site is powered by the TWiki collaboration platform Powered by PerlCopyright & 2008-2021 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
or Ideas, requests, problems regarding TWiki? use Discourse or Send feedback