Condorを使ってみた(2)
前回からかなり時間があいているので、リンクを貼っておこう。。ww
(Condorを使ってみた(1): http://d.hatena.ne.jp/aaabbb_200904/20100322/1269272521 )
ちなみに、同時実行ジョブ数の変更方法を調べるのに半年かかってしまったことによる。 orz
同時実行ジョブ数の変更
Condorを使用する際には、ジョブの同時実行数はそのノードに存在するCPUの数となるため、sleepや、ネットワーク待ちを含むようなジョブがあると、CPU使用率が落ちてしまうという動作になる。
この動作を回避するには、condorの設定ファイルの
/var/lib/condor/condor_config.local で、NUM_CPUSの設定を行えばよい。
NUM_CPUS=10 (10は任意の数値)
再起動を行った後、condor_statusの出力が、次のように10個のスロットを含んでいれば正しく設定されている。
slot10@fedora-virt LINUX X86_64 Unclaimed Idle 0.000 36 1+00:25:47 slot1@fedora-virt8 LINUX X86_64 Unclaimed Idle 0.000 36 1+00:21:01 slot2@fedora-virt8 LINUX X86_64 Unclaimed Idle 0.000 36 1+00:25:36 slot3@fedora-virt8 LINUX X86_64 Unclaimed Idle 0.060 36 0+00:25:06 slot4@fedora-virt8 LINUX X86_64 Unclaimed Idle 0.000 36 1+00:25:49 slot5@fedora-virt8 LINUX X86_64 Unclaimed Idle 0.000 36 1+00:25:50 slot6@fedora-virt8 LINUX X86_64 Unclaimed Idle 0.000 36 1+00:25:51 slot7@fedora-virt8 LINUX X86_64 Unclaimed Idle 0.000 36 1+00:25:52 slot8@fedora-virt8 LINUX X86_64 Unclaimed Idle 0.000 36 1+00:25:45 slot9@fedora-virt8 LINUX X86_64 Unclaimed Idle 0.000 36 1+00:25:46
共有ファイルシステムの使用
前回はバッチノードでジョブ実行を行う際、condorの機能を使ってファイルを転送する設定について書いたが、共有ファイルシステムを使った設定も試してみた。
※ バイナリファイルとしては/bin/sleep を用いたため、実際には共有ファイルシステムの設定は行っていない。。 orz
通常は、submitされたノード以外のノードでジョブを実行する場合には、ジョブファイルに次を記述する必要がある。
should_transfer_files = YES when_to_transfer_output = ON_EXIT
この場合、ジョブのバイナリファイルはcondorの機能でバッチノードに転送される。共有ファイルシステムがある場合は転送を行う必要が無いため、この指定は行わず、代わりに次の指定を行う。
Requirements = TARGET.FileSystemDomain == "jp.example.org" && TARGET.UidDomain == "jp.example.org"
FileSystemDomain, UidDomainはそれぞれ同じ共有ファイルシステムをマウントしていることと、同じ/etc/passwdを持っているという項目を表しているらしい。必ず両方を指定しないと、上手くジョブが実行されないので注意。(1. FileSystemDomainが無いと行き先が無いため、ジョブがIdle状態から変化しない 2. UidDomainがないと、ジョブがnobody権限で実行されるため、ジョブの実行が失敗した。。w )
各ノードのcondorが同じファイルシステム、ユーザー情報を持つことを明示するためには、 /var/lib/condor/condor_config.local に、次を指定する必要がある。(ちなみにどのパラメータを設定するかを確認するには、/etc/condor/condor_config を確認するのが早そうだ。。)
FILESYSTEM_DOMAIN = jp.example.org UID_DOMAIN = jp.example.org
参考までに、マネージャーノード、バッチノードの/var/lib/condor/condor_config.local を添付しておく。
(マネージャーノード: fedora-virt7.jp.example.org) CONDOR_DEVELOPERS = NONE CONDOR_HOST = $(FULL_HOSTNAME) COLLECTOR_NAME = my_collector START = TRUE SUSPEND = FALSE PREEMPT = FALSE KILL = FALSE DAEMON_LIST = COLLECTOR, MASTER, NEGOTIATOR, SCHEDD, STARTD NEGOTIATOR_INTERVAL = 20 TRUST_UID_DOMAIN = TRUE ALLOW_WRITE = * ALLOW_READ = * FILESYSTEM_DOMAIN = jp.example.org UID_DOMAIN = jp.example.org NUM_CPUS=10
(バッチノード: fedora-virt8.jp.example.org) CONDOR_DEVELOPERS = NONE #CONDOR_HOST = $(FULL_HOSTNAME) CONDOR_HOST = fedora-virt7.jp.example.org #COLLECTOR_NAME = Personal Condor START = TRUE SUSPEND = FALSE PREEMPT = FALSE KILL = FALSE #DAEMON_LIST = COLLECTOR, MASTER, NEGOTIATOR, SCHEDD, STARTD DAEMON_LIST = MASTER, SCHEDD, STARTD NEGOTIATOR_INTERVAL = 20 TRUST_UID_DOMAIN = TRUE ALLOW_WRITE = * ALLOW_READ = * FILESYSTEM_DOMAIN = jp.example.org UID_DOMAIN = jp.example.org NUM_CPUS=10