みなさんこんにちは。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などを使用して、ジョブが正常に実行されていることを確認します。

次ページ:
計算サーバの環境設定

[[SplitPage]]

計算サーバの環境設定

condor_annexで標準で使用される仮想マシンイメージはHTCondor開発者が用意したものです。当然、ここには我々が必要とするGafferやArnoldといったソフトウェアはインストールされていません。また、FileSystemDomainのように自分の環境に合わせて設定を行う必要があるものもあります。これらの設定を行なっていきます。

まずは、HTCondorの設定から行います。計算サーバで使用する設定はcondor_annexを実行するマシン上で作成しておき、condor_annexに-config-dirオプションをつけることでインスタンスの/etc/condor/config.dに転送することができます。今回はFILESYSTEMDOMAINとUID_DOMAINの設定を行います。

-bash-4.1$ cat ~/condor-8.8.5/etc/condor.aws/51aws.config
FILESYSTEM_DOMAIN = aws.example.net
UID_DOMAIN = aws.example.net

-bash-4.1$

condor_annexに-config-dirオプションを追加してインスタンスを立ち上げます。

-bash-4.1$ condor_annex -count 1 -annex-name HTCondorOnAWS -aws-on-demand-instance-type m3.medium -config-dir /home/chiyama/condor-8.8.5/etc/condor.aws

インスタンスが立ち上がったら思った通りに設定されているか確認します。

[chiyama@docker condor-8.8.5]$ condor_status
Name                           OpSys      Arch   State     Activity     LoadAv Mem   ActvtyTime

ip-10-158-179-245.ec2.internal LINUX      X86_64 Unclaimed Benchmarking  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-158-179-245.ec2.internal -long | grep Domain
FileSystemDomain = "aws.example.net"
UidDomain = "aws.example.net"
[chiyama@docker condor-8.8.5]$

成功です。この設定はインスタンス立ち上げ時に毎回行われるので、内容を変更したい場合は設定ファイルを更新してインスタンスを立ち上げ直します。

続いて、インスタンスにGafferやArnoldをインストールします。先ほども言及したように、現在使用しているイメージはHTCondor開発者が用意したものなので、これを元にソフトウェアのインストールや各種設定を行なったものを自分用イメージとして保存し、以降はこのイメージを使用します。

まずインスタンスにSSH接続します。接続する際にはAWS設定時に取得した.pemファイルを使用します。インスタンスのIPアドレスやホスト名はEC2 Management Consoleから確認できます。また、アクセスの際に使用するユーザー名はec2-userです。


-bash-4.1$ ssh -i ~/.condor/HTCondorAnnex-KeyPair.us-east-1.pem ec2-user@ec2-3-92-201-120.compute-1.amazonaws.com
The authenticity of host 'ec2-3-92-201-120.compute-1.amazonaws.com (3.92.201.120)' can't be established.
RSA key fingerprint is 5f:c8:8f:c3:c0:fa:b4:1f:89:0f:f0:03:ca:20:fb:5f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-3-92-201-120.compute-1.amazonaws.com,3.92.201.120' (RSA) to the list of known hosts.
Last login: Fri Aug  2 18:59:59 2019 from tlmiller-laptop.cs.wisc.edu

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-157-243-113 ~]$

無事に接続できました。

では、GafferやArnold環境も構築していきます。これは特に特別なことはなく、普通のLinux環境で動かす手順と変わりはありません。

[ec2-user@ip-10-183-105-95 ~]$ wget https://github.com/ImageEngine/gaffer/releases/download/0.54.1.0/gaffer-0.54.1.0-linux.tar.gz
--2019-10-20 06:44:40--  https://github.com/ImageEngine/gaffer/releases/download/0.54.1.0/gaffer-0.54.1.0-linux.tar.gz
Resolving github.com (github.com)... 140.82.114.3

(中略)

100%[=================================================================================================================================>] 288,573,161 52.1MB/s   in 4.7s

2019-10-20 06:44:45 (58.0 MB/s) - 'gaffer-0.54.1.0-linux.tar.gz' saved [288573161/288573161]

Gaffer-0.54.1.0ではArnold 5.3.1.0に対応しています。本家ドキュメントでは5.1.1.0と書いてあるのですが、これは間違いなので要注意です。ArnoldのダウンロードにはAutodeskアカウントが必要なので、ログインした上でダウンロードしてください。

ファイルが一通り用意できたら、第9回:HTCondorで処理を行うを参考にしながら環境構築を進めます。

[ec2-user@ip-10-183-105-95 ~]$ tar zxfv gaffer-0.54.1.0-linux.tar.gz

(中略)

gaffer-0.54.1.0-linux/qt/plugins/imageformats/libqjpeg.so
gaffer-0.54.1.0-linux/qt/plugins/imageformats/libqtiff.so
gaffer-0.54.1.0-linux/qt/plugins/xcbglintegrations/
gaffer-0.54.1.0-linux/qt/plugins/xcbglintegrations/libqxcb-glx-integration.so
[ec2-user@ip-10-63-146-249 ~]$ sudo mv gaffer-0.54.1.0-linux /opt/


[ec2-user@ip-10-63-146-249 ~]$ sudo su
[root@ip-10-63-146-249 ec2-user]# mkdir -p /opt/solidangle/arnold-5.3.1.0
[root@ip-10-63-146-249 ec2-user]# cd /opt/solidangle/arnold-5.3.1.0/
[root@ip-10-63-146-249 arnold-5.3.1.0]# tar zxvf /home/ec2-user/Arnold-5.3.1.0-linux.tgz
Arnold_5_Porting_Guide.pdf
materialx/
materialx/arnold/
materialx/arnold/nodedefs.mtlx
bin/
bin/liboptix.so.1
bin/libAdClmHub.so
bin/libcudnn.so.7

(中略)

doc/api/ai__shaders_8h_source.html
doc/api/ai__deprecated_8h.html
[root@ip-10-63-146-249 arnold-5.3.1.0]# exit
exit

ついでに、先ほど作成したFILESYSTEMDOMAINとUID_DOMAINの設定ファイルも反映されていることを確認してみます。

[ec2-user@ip-10-157-243-113 ~]$ ls /etc/condor/config.d/
00ec2-dynamic.config  01gpus.config  01slot-users.config  49ec2-instance.config  50ec2.config  51aws.config  99docker.config  password_file.pl
[ec2-user@ip-10-157-243-113 ~]$ cat /etc/condor/config.d/51aws.config
FILESYSTEM_DOMAIN = aws.example.net
UID_DOMAIN = aws.example.net

[ec2-user@ip-10-157-243-113 ~]$

きちんと反映されていますね。

イメージの保存

いろいろと設定を行いましたが、このままではインスタンスを終了すると内容が消えてしまいます。それを避けるために今の状態をイメージとして保存しておきます。

これは、AWS Management Consoleから行うことができます。



しばらく待つとイメージが作成されます。

作成したイメージを使用してインスタンスを立ち上げる

作成したイメージを使用してインスタンスを立ち上げるには、condor_annexでAMI IDを指定します。

-bash-4.1$ condor_annex -count 1 -annex-name HTCondorOnAWS -aws-on-demand-instance-type m3.medium -config-dir /home/chiyama/condor-8.8.5/etc/condor.aws -aws-on-demand-ami-id ami-04987200f49c30c80
Will request 1 m3.medium on-demand instance for 0.83 hours.  Each instance will terminate after being idle for 0.25 hours.
Is that OK?  (Type 'yes' or 'no'): yes
Starting annex...
Annex started.  Its identity with the cloud provider is 'HTCondorOnAWS_c2a5cf5b-b9ab-4612-8a51-5d8422eee527'.  It will take about three minutes for the new machines to join the pool.
-bash-4.1$ ssh -i ~/.condor/HTCondorAnnex-KeyPair.us-east-1.pem ec2-user@ec2-54-235-235-16.compute-1.amazonaws.com
The authenticity of host 'ec2-54-235-235-16.compute-1.amazonaws.com (54.235.235.16)' can't be established.
RSA key fingerprint is 5f:c8:8f:c3:c0:fa:b4:1f:89:0f:f0:03:ca:20:fb:5f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-54-235-235-16.compute-1.amazonaws.com,54.235.235.16' (RSA) to the list of known hosts.
Last login: Sun Oct 20 06:42:38 2019 from jcgs.co.jp

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-10-63-146-249 ~]$ ls /opt/
aws  gaffer-0.54.1.0-linux  rh  solidangle
[ec2-user@ip-10-63-146-249 ~]$

めでたく前回作業していた内容が残っています。これで、HTCondorを使用してクラウド上に計算サーバを立て、ローカル環境からジョブを投入するための最低限の準備が整いました。

次回予告

今回まででHTCondorを使用してクラウド上に計算サーバを立て、ローカル環境からジョブを投入するための最低限の準備が整いました。しかし、まだひとつ大きな問題が残っています。ローカル環境とクラウド環境のファイルの同期です。これができないと、ローカル環境で作成したシーンデータをクラウド上でレンダリングすることができません。次回はここに手を付けます。



第18回の公開は、2019年11月を予定しております。

プロフィール

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

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