>   >  痴山紘史の日本CG見聞録:第15回:クラウド環境構築[社内レンダーファームのクラウド化]
第15回:クラウド環境構築[社内レンダーファームのクラウド化]

第15回:クラウド環境構築[社内レンダーファームのクラウド化]

ジョブの投入

ジョブを投入するための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月を予定しております。

プロフィール

  • 痴山紘史
    日本CGサービス(JCGS) 代表

    大学卒業後、株式会社IMAGICA入社。放送局向けリアルタイムCGシステムの構築・運用に携わる。その後、株式会社リンクス・デジワークスにて映画・ゲームなどの映像制作に携わる。2010年独立、現職。映像制作プロダクション向けのパイプラインの開発と提供を行なっている。新人パパ。娘かわいい。
    @chiyama

その他の連載