ジョブの投入
ジョブを投入するためのSDFは以下のように書きます。
[chiyama@docker ~]$ cat simpleSubmission/simpleSubmission.sdf
executable = /usr/bin/pwd
output = /tmp/pwd.farm.$(Process).out
error = /tmp/pwd.farm.$(Process).error
log = /tmp/pwd.farm.$(Process).log
requirements = TARGET.FileSystemDomain == "farm.example.net" && TARGET.UidDomain == "farm.example.net"
should_transfer_files = yes
when_to_transfer_output = ON_EXIT
transfer_executable = false
queue
[chiyama@docker ~]$
should_transfer_filesをyesにすると、計算に必要なファイルや計算時に生成されたファイルを自動的に転送することができます。その際、transfer_executableをfalseにすることで、executableとして指定した実行ファイルは転送しないということもできます。
より具体的な例として、以下のpythonスクリプトを用意して計算サーバで実行させてみます。
[chiyama@docker simpleSubmission]$ cat test_transfer_file.py
import socket
import sys
import os
print(socket.gethostname())
print(sys.version_info)
print('== os.environ ==')
for k,v in os.environ.items():
print(k, v)
[chiyama@docker simpleSubmission]$
SDFは以下のようにします。
[chiyama@docker simpleSubmission]$ cat test_transfer_file.sdf
executable = /usr/bin/python
arguments = test_transfer_file.py
transfer_input_files = test_transfer_file.py
output = /tmp/test_transfer_file.farm.$(Process).out
error = /tmp/test_transfer_file.farm.$(Process).error
log = /tmp/test_transfer_file.farm.$(Process).log
requirements = TARGET.FileSystemDomain == "farm.example.net" && TARGET.UidDomain == "farm.example.net"
should_transfer_files = yes
when_to_transfer_output = ON_EXIT
transfer_executable = false
queue
[chiyama@docker simpleSubmission]$
ジョブを投入して結果を確認します。
[chiyama@docker simpleSubmission]$ ls /tmp/
hsperfdata_condor systemd-private-964e7e847c6049f4969affec7c6b2875-chronyd.service-hzY4Ma
hsperfdata_root systemd-private-964e7e847c6049f4969affec7c6b2875-cups.service-nGi5kg
lua_DCGcQa systemd-private-964e7e847c6049f4969affec7c6b2875-rtkit-daemon.service-Ly3UWv
[chiyama@docker simpleSubmission]$ condor_submit test_transfer_file.sdf
Submitting job(s).
1 job(s) submitted to cluster 107.
[chiyama@docker simpleSubmission]$ ls /tmp/
hsperfdata_condor systemd-private-964e7e847c6049f4969affec7c6b2875-chronyd.service-hzY4Ma test_transfer_file.farm.0.error
hsperfdata_root systemd-private-964e7e847c6049f4969affec7c6b2875-cups.service-nGi5kg test_transfer_file.farm.0.log
lua_DCGcQa systemd-private-964e7e847c6049f4969affec7c6b2875-rtkit-daemon.service-Ly3UWv test_transfer_file.farm.0.out
[chiyama@docker simpleSubmission]$ cat /tmp/test_transfer_file.farm.0.out
worker01.worker.example.net
sys.version_info(major=2, minor=7, micro=5, releaselevel='final', serial=0)
== os.environ ==
('TMP', '/var/lib/condor/execute/dir_4448')
('_CONDOR_CHIRP_CONFIG', '/var/lib/condor/execute/dir_4448/.chirp.config')
('_CONDOR_JOB_AD', '/var/lib/condor/execute/dir_4448/.job.ad')
('TEMP', '/var/lib/condor/execute/dir_4448')
('_CONDOR_JOB_PIDS', '')
('OMP_NUM_THREADS', '1')
('_CONDOR_ANCESTOR_4202', '4448:1565269153:1707118152')
('_CONDOR_SLOT', 'slot1_1')
('_CONDOR_MACHINE_AD', '/var/lib/condor/execute/dir_4448/.machine.ad')
('_CHIRP_DELAYED_UPDATE_PREFIX', 'Chirp*')
('_CONDOR_ANCESTOR_4169', '4202:1565265263:3485747309')
('BATCH_SYSTEM', 'HTCondor')
('_CONDOR_JOB_IWD', '/var/lib/condor/execute/dir_4448')
('_CONDOR_SCRATCH_DIR', '/var/lib/condor/execute/dir_4448')
('_CONDOR_ANCESTOR_4448', '4452:1565269154:4293891337')
('TMPDIR', '/var/lib/condor/execute/dir_4448')
[chiyama@docker simpleSubmission]$
元々/tmp以下になかったファイルが作成され、/tmp/test_transfer_file.farm.0.outの中を見ると、worker01.worker.example.netでtest_transfer_file.pyが実行され、その結果が戻ってきていることがわかります。
以上で、環境構築ができました。
計算サーバの設定
環境が一段落したところで計算サーバに追加の設定を行なっておきます。
HTCondorでは、何も設定をしないと計算サーバ上で同時に実行できるジョブは計算サーバの論理プロセッサ数になります。しかし、通常は1台の計算サーバで複数のCPUを使用して、ひとつの計算を行いたい場合が多いです。そのための設定をすることができます。
論理プロセッサが4個ある場合、何も設定をしないと以下のように4つのslotが登録されます。
[chiyama@worker01 ~]$ condor_status
Name OpSys Arch State Activity LoadAv Mem ActvtyTime
slot1@worker01.worker.example.net LINUX X86_64 Unclaimed Benchmarking 0.000 247 0+00:00:03
slot2@worker01.worker.example.net LINUX X86_64 Unclaimed Idle 0.000 247 0+00:00:03
slot3@worker01.worker.example.net LINUX X86_64 Unclaimed Idle 0.000 247 0+00:00:03
slot4@worker01.worker.example.net LINUX X86_64 Unclaimed Idle 0.000 247 0+00:00:03
Machines Owner Claimed Unclaimed Matched Preempting Drain
X86_64/LINUX 4 0 0 4 0 0 0
Total 4 0 0 4 0 0 0
[chiyama@worker01 ~]$ fg
計算サーバのcondor_configに以下の記述を追加すると、ひとつの計算ノードとして登録できます。
SLOT_TYPE_1 = 100%
NUM_SLOTS = 1
NUM_SLOTS_TYPE_1 = 1
SLOT_TYPE_1_PARTITIONABLE = True
SlotWeight = Cpus
[chiyama@worker01 ~]$ condor_status
Name OpSys Arch State Activity LoadAv Mem ActvtyTime
slot1@worker01.worker.example.net LINUX X86_64 Unclaimed Benchmarking 0.000 990 0+00:00:03
Machines Owner Claimed Unclaimed Matched Preempting Drain
X86_64/LINUX 1 0 0 1 0 0 0
Total 1 0 0 1 0 0 0
[chiyama@worker01 ~]$
これで、1台の計算サーバで複数のCPUを使用して処理を行うことができるようになりました。
次回予告
今回で社内にあるレンダーファームを作業用の環境から切り離し、あたかも社内にクラウドシステムがあるかのような環境をつくることができました。次回以降、さらに環境構築を進めていきます。 多分、あと2、3回で本格的なクラウド環境構築のお話にたどり着けるのではないかとおもうので、今しばらくお付き合いください。
第16回の公開は、2019年9月を予定しております。
プロフィール