みなさんこんにちは。11/1(金)までの期間限定で、当社が開発中のDigDocのオープンベータテストを行なっています。DigDocは高速・簡単に既存のデジタルデータを閲覧することに特化したツールで、素材集や資料をモリモリダウンロードしたけどフォルダがカオスになってしまってニッチモサッチモとなってしまっているような方におススメなツールです。興味のある方はご連絡ください。
TEXT_痴山紘史 / Hiroshi Chiyama(日本CGサービス)
EDIT_尾形美幸 / Miyuki Ogata(CGWORLD)
ローカル環境から投げたジョブを、クラウド上でレンダリングできるようにする
前回までで、HTCondor Annexを使用してAWS上に計算サーバを立ち上げることができるようになりました。今回からは、計算サーバ上にGaffer+Arnold環境を構築してローカル環境から投げたジョブをクラウド上でレンダリングできるようにしていきます。
※今回、計算サーバとして立ち上げているインスタンスは起動のたびにIPアドレスが変わるため、記事執筆中にも環境が変わってIPアドレスやそれに付随するホスト名が変わっています。見にくくてすみませんがご了承ください。
ローカル環境からクラウド用HTCondor Poolにアクセスする
前回、クラウド用セントラルマネージャをPublic IPアドレスが付与されている計算機に構築しました。今はセントラルマネージャになっている計算機からのみHTCondorにアクセスできるようになっています。これを、社内ネットワークにあるサブミットマシンからも接続できるようにします。
クラウド用セントラルマネージャがPublic IPアドレスをもっていて、ローカルのサブミットマシンから直接アクセスできる場合は、サブミットマシンにpersonal condorをインストールしてCCBを使用するようにします。第15回では計算サーバがファイヤウォール内にあるケースでしたが、今回は逆にサブミットマシンがファイヤウォール内に存在します。
※ "The Condor Connection Broker"より引用
これらの設定を行なったローカル環境にあるサブミットマシンのcondor_config.localは以下の通りです。
[chiyama@docker ~]$ cat condor-8.8.5/local/condor_config.local
NETWORK_INTERFACE = *
CONDOR_HOST = XXX.XXX.XXX.XXX ← セントラルマネージャのアドレス
COLLECTOR_HOST = $(CONDOR_HOST)
FILESYSTEM_DOMAIN = intra.example.net
UID_DOMAIN = intra.example.net
DAEMON_LIST = MASTER, SCHEDD
CCB_ADDRESS = $(COLLECTOR_HOST)
UPDATE_COLLECTOR_WITH_TCP = TRUE
SEC_PASSWORD_FILE = $(LOCAL_DIR)/condor_pool_password
SEC_DAEMON_INTEGRITY = REQUIRED
SEC_DAEMON_AUTHENTICATION = REQUIRED
SEC_DAEMON_AUTHENTICATION_METHODS = PASSWORD
SEC_NEGOTIATOR_INTEGRITY = REQUIRED
SEC_NEGOTIATOR_AUTHENTICATION = REQUIRED
SEC_NEGOTIATOR_AUTHENTICATION_METHODS = PASSWORD
SEC_CLIENT_AUTHENTICATION_METHODS = FS, PASSWORD
ALLOW_DAEMON = *
[chiyama@docker ~]$
また、セントラルマネージャ側でもCOLLECTOR_MAX_FILE_DESCRIPTORSの設定を行います。合わせて、セントラルマネージャになっている計算機上で計算サーバが立ち上がっていても意味がないので、セントラルマネージャ機能のみ立ち上がるようにします。
-bash-4.1$ cat condor-8.8.5/local/condor_config.local
NETWORK_INTERFACE = *
CONDOR_HOST = $(FULL_HOSTNAME)
COLLECTOR_HOST = $(CONDOR_HOST)
PRIVATE_NETWORK_NAME = centralmanager.example.net
DAEMON_LIST = MASTER, NEGOTIATOR, COLLECTOR, SHARED_PORT
COLLECTOR_MAX_FILE_DESCRIPTORS = 20000
SEC_PASSWORD_FILE = $(LOCAL_DIR)/condor_pool_password
SEC_DAEMON_INTEGRITY = REQUIRED
SEC_DAEMON_AUTHENTICATION = REQUIRED
SEC_DAEMON_AUTHENTICATION_METHODS = PASSWORD
SEC_NEGOTIATOR_INTEGRITY = REQUIRED
SEC_NEGOTIATOR_AUTHENTICATION = REQUIRED
SEC_NEGOTIATOR_AUTHENTICATION_METHODS = PASSWORD
SEC_CLIENT_AUTHENTICATION_METHODS = FS, PASSWORD
ALLOW_DAEMON = condor_pool@*
-bash-4.1$
ローカルのサブミットマシンからcondor_statusで確認します。
ローカル環境からクラウド上の計算サーバの情報が確認できるようになったので、テスト用のジョブを投入してみます。このとき、CCBを使用しているためTARGET.FileSystemDomainを指定する必要があるのですが、デフォルトではインスタンスごとに異なっているため注意が必要です。これは後程対応するとして、現時点ではインスタンスに設定されているものをそのまま指定します。
計算サーバで設定されている値は、condor_status(計算サーバ名)-longで確認できます。
[chiyama@docker condor-8.8.5]$ condor_status
Name OpSys Arch State Activity LoadAv Mem ActvtyTime
ip-10-142-165-147.ec2.internal LINUX X86_64 Unclaimed Idle 0.000 3755 0+00:00:03
Total Owner Claimed Unclaimed Matched Preempting Backfill Drain
X86_64/LINUX 1 0 0 1 0 0 0 0
Total 1 0 0 1 0 0 0 0
[chiyama@docker condor-8.8.5]$ condor_status ip-10-142-165-147.ec2.internal -long
AcceptedWhileDraining = false
Activity = "Idle"
AddressV1 = "{[ p=\"primary\"; a=\"18.205.154.58\"; port=9618; n=\"Internet\"; spid=\"4758_2bb4_3\"; noUDP=true; ], [ p=\"IPv4\"; a=\"18.205.154.58\"; port=9618; n=\"Internet\"; spid=\"4758_2bb4_3\"; noUDP=true; ]}"
AnnexName = "HTCondorOnAWS"
Arch = "X86_64"
AuthenticatedIdentity = "condor_pool@ip-10-142-165-147.ec2.internal"
AuthenticationMethod = "PASSWORD"
(中略)
ExpectedMachineQuickDrainingCompletion = 1571534728
FileSystemDomain = "ip-10-142-165-147.ec2.internal"
GPUs = 0
(中略)
UtsnameSysname = "Linux"
UtsnameVersion = "#1 SMP Wed Jun 19 16:53:40 UTC 2019"
VirtualMemory = 3845852
[chiyama@docker condor-8.8.5]$
更に、AWS上でジョブを実行する場合、MayUseAWSアトリビュートを追加する必要があります。
以上を盛り込んだのが以下のsimpleSubmission_AWS.sdfです。
[chiyama@docker simpleSubmission]$ cat simpleSubmission_AWS.sdf
executable = /usr/bin/hostname
Initialdir = /tmp
output = /tmp/hostname.farm.$(Process).out2
error = /tmp/hostname.farm.$(Process).error2
log = /tmp/hostname.farm.$(Process).log2
should_transfer_files = NO
requirements = TARGET.FileSystemDomain == "ip-10-142-165-147.ec2.internal"
+MayUseAWS = True
queue
ジョブを投入します。
[chiyama@docker simpleSubmission]$ condor_submit simpleSubmission_AWS.sdf
Submitting job(s)....
4 job(s) submitted to cluster 3.
[chiyama@docker simpleSubmission]$
condor_qなどを使用して、ジョブが正常に実行されていることを確認します。