>   >  痴山紘史の日本CG見聞録:第19回:クラウド環境構築[ローカル環境とクラウト環境の連携]
第19回:クラウド環境構築[ローカル環境とクラウト環境の連携]

第19回:クラウド環境構築[ローカル環境とクラウト環境の連携]

クラウド上での処理

続いて、転送したファイルを使用してクラウド上で処理をするためのジョブを作成します。今回は、転送したexrファイルを別名ファイルとしてコピーします。まず、変換用のPythonスクリプトを用意します。

[neo@matrix cloudTest]$ cat rename.py
#!/usr/bin/python

import os
import shutil

if not os.path.exists('renamed'):
    os.mkdir('renamed')

for f in os.listdir('render'):
    new_name = f.replace('layout_Arnold', 'renamed')

    src = os.path.join('render', f)
    dst = os.path.join('renamed', new_name)

    shutil.copyfile(src, dst)

[neo@matrix cloudTest]$

rename.pyをクラウド側にアップロードする必要があるので、sendFile.shに追記します。rename.pyはそれほど大きくないので、手抜きをしてs3fs経由でファイルコピーをしています。

[neo@matrix cloudTest]$ cat sendFile.sh
#!/bin/sh

export PATH=/home/neo/.local/bin:$PATH

mkdir -p /s3fs/work/neo/cloudTest/log

aws s3 sync render s3://condorannexdata/work/neo/cloudTest/render

cp rename.py /s3fs/work/neo/cloudTest/

[neo@matrix cloudTest]$

ジョブを投入するためのSDFも用意します。

[neo@matrix cloudTest]$ cat rename.sdf
executable = /usr/bin/python

output = /gs/work/neo/cloudTest/log/rename.out
error = /gs/work/neo/cloudTest/log/rename.err
log = /gs/work/neo/cloudTest/log/rename.log

arguments = rename.py
initialdir = /gs/work/neo/cloudTest
requirements = TARGET.OpSys == "LINUX" && TARGET.FileSystemDomain == "aws.jcgs.co.jp" && TARGET.UidDomain == "aws.jcgs.co.jp"

should_transfer_files = NO

+MayUseAWS = True

queue

[neo@matrix cloudTest]$

AWS上で実行するための指定をしています。

ジョブを投入します。

[neo@matrix cloudTest]$ condor_submit rename.sdf
Submitting job(s).
1 job(s) submitted to cluster 63.
[neo@matrix cloudTest]$

少し待って、ジョブが完了したら結果を確認します。クラウド環境では/gs、ローカル環境では/s3fs以下にファイルが生成されます。

[neo@matrix cloudTest]$ ls /s3fs/work/neo/cloudTest/renamed/
renamed.0000.exr  renamed.0002.exr  renamed.0004.exr  renamed.0006.exr  renamed.0008.exr
renamed.0001.exr  renamed.0003.exr  renamed.0005.exr  renamed.0007.exr  renamed.0009.exr
[neo@matrix cloudTest]$

できました。

続いて、生成されたファイルをローカル環境にダウンロードします。これはアップロードの逆を行えばよいです。

[neo@matrix cloudTest]$ cat getFile.sh
#!/bin/sh

export PATH=/home/neo/.local/bin:$PATH

aws s3 sync s3://condorannexdata/work/neo/cloudTest/renamed renamed

[neo@matrix cloudTest]$ cat getFile.sdf
executable = /bin/sh

output = /gs/work/neo/cloudTest/log/get_file.out
error = /gs/work/neo/cloudTest/log/get_file.err
log = /gs/work/neo/cloudTest/log/get_file.log

arguments = getFile.sh
initialdir = /gs/work/neo/cloudTest
requirements = TARGET.OpSys == "LINUX" && TARGET.FileSystemDomain == "intra.jcgs.co.jp" && TARGET.UidDomain == "intra.jcgs.co.jp"

should_transfer_files = no

queue

[neo@matrix cloudTest]$ condor_submit getFile.sdf
Submitting job(s).
1 job(s) submitted to cluster 73.

ジョブ完了後に確認します。

[neo@matrix cloudTest]$ ls renamed/
renamed.0000.exr  renamed.0002.exr  renamed.0004.exr  renamed.0006.exr  renamed.0008.exr
renamed.0001.exr  renamed.0003.exr  renamed.0005.exr  renamed.0007.exr  renamed.0009.exr
[neo@matrix cloudTest]$

無事にファイルがダウンロードできています。

これで、

- ローカル環境からファイルやプログラムをアップロードする
- クラウド環境で処理を行う
- 生成されたデータをローカル環境にダウンロードする

というそれぞれの処理をHTCondor上で行うことができるようになりました。

ジョブの依存関係を定義する

ファイルのアップロード、変換、ダウンロードという処理は並行して行うことができず、必ず前の処理が終わってから実行する必要があるため、手動で管理しているとひとつのジョブが完了するまで待って次のジョブを投入するということをしなければいけなくなります。そんなことはとてもではないですがやってられないです。そこで、ひとつのコマンドでこれらの処理を投入・実行できるようにします。このような場合、ジョブの間に依存関係を設定します。

HTCondorにはDAGManという、ジョブの依存関係を管理するためのしくみがあります。まずは定義ファイルを見てみます。

[neo@matrix cloudTest]$ cat clodTest.dag
JOB sendFile sendFile.sdf
JOB rename rename.sdf
JOB getFile getFile.sdf

PARENT sendFile CHILD rename
PARENT rename CHILD getFile

[neo@matrix cloudTest]$

JOBでジョブ名と、使用するSDFを定義し、PARENTでジョブの親子関係を指定します。この場合、sendFile - rename - getFileというジョブの依存関係が定義されています。PARENTやCHILDには複数のジョブを指定することもできるため、もっと複雑な依存関係も定義することができます。

ジョブ投入前に一度データを全て削除しておきます。

[neo@matrix cloudTest]$ rm -rf renamed
[neo@matrix cloudTest]$ rm -rf /s3fs/work/neo/cloudTest

作成したDAGファイルを使ってジョブを投入します。依存関係つきでジョブを投入する場合はcondor_submit_dagコマンドを使用します。

[neo@matrix cloudTest]$ condor_submit_dag clodTest.dag

Can't open directory "/home/neo/condor-8.8.5/local/config" as PRIV_UNKNOWN, errno: 2 (No such file or directory)
Cannot open /home/neo/condor-8.8.5/local/config: No such file or directory
-----------------------------------------------------------------------
File for submitting this DAG to HTCondor           : clodTest.dag.condor.sub
Log of DAGMan debugging messages                 : clodTest.dag.dagman.out
Log of HTCondor library output                     : clodTest.dag.lib.out
Log of HTCondor library error messages             : clodTest.dag.lib.err
Log of the life of condor_dagman itself          : clodTest.dag.dagman.log

Submitting job(s).
1 job(s) submitted to cluster 82.
-----------------------------------------------------------------------
[neo@matrix cloudTest]$ condor_q

-- Schedd: matrix.intra.jcgs.co.jp : <192.168.0.31:9618?... @ 12/24/19 23:49:09
OWNER    BATCH_NAME         SUBMITTED   DONE   RUN    IDLE  TOTAL JOB_IDS
neo      clodTest.dag+82  12/24 23:48      _      _      1      1 83.0

Total for query: 1 jobs; 0 completed, 0 removed, 1 idle, 0 running, 0 held, 0 suspended
Total for all users: 1 jobs; 0 completed, 0 removed, 1 idle, 0 running, 0 held, 0 suspended

[neo@matrix cloudTest]$ condor_q -nobatch

-- Schedd: matrix.intra.jcgs.co.jp : <192.168.0.31:9618?... @ 12/24/19 23:49:15
 ID      OWNER            SUBMITTED     RUN_TIME ST PRI SIZE CMD
  82.0   neo            12/24 23:48   0+00:00:16 R  0    0.3 condor_dagman -p 0 -f -l . -Lockfile clodTest.dag.lock -AutoRescue 1 -DoRescueFrom 0 -Dag clod
  83.0   neo            12/24 23:49   0+00:00:00 I  0    1.0 sh sendFile.sh

Total for query: 1 jobs; 0 completed, 0 removed, 1 idle, 0 running, 0 held, 0 suspended
Total for all users: 1 jobs; 0 completed, 0 removed, 1 idle, 0 running, 0 held, 0 suspended

[neo@matrix cloudTest]$

condor_qの表示がこれまでと随分ちがう感じになりました。

ジョブが全て完了したら、最後に結果の確認です。

[neo@matrix cloudTest]$ ls -la renamed/
total 249060
drwxr-xr-x 2 neo neo      246 Dec 24 23:59 .
drwxrwxr-x 5 neo neo     4096 Dec 24 23:59 ..
-rw-r--r-- 1 neo neo 25496058 Dec 24 23:50 renamed.0000.exr
-rw-r--r-- 1 neo neo 25504371 Dec 24 23:50 renamed.0001.exr
-rw-r--r-- 1 neo neo 25505110 Dec 24 23:50 renamed.0002.exr
-rw-r--r-- 1 neo neo 25499350 Dec 24 23:51 renamed.0003.exr
-rw-r--r-- 1 neo neo 25494908 Dec 24 23:51 renamed.0004.exr
-rw-r--r-- 1 neo neo 25502157 Dec 24 23:51 renamed.0005.exr
-rw-r--r-- 1 neo neo 25496158 Dec 24 23:51 renamed.0006.exr
-rw-r--r-- 1 neo neo 25501568 Dec 24 23:51 renamed.0007.exr
-rw-r--r-- 1 neo neo 25503468 Dec 24 23:51 renamed.0008.exr
-rw-r--r-- 1 neo neo 25511207 Dec 24 23:51 renamed.0009.exr
[neo@matrix cloudTest]$

できました!! これで、ファイルのアップロードとダウンロードはローカル環境にある計算ノードが行い、本体の処理はクラウド上の計算ノードが行うというそれぞれの処理を完全に統合して管理できるようになりました。これは簡単な例ですが、たとえばショットシーンのビルドをローカル環境で行なって、レンダリングをクラウド上で行なった後にローカル環境でコンポジットを行うということもできるということです。

次回予告

6月から続けてきたクラウド環境構築編も今回で一定の成果を上げることができてホッとしています。次回以降は引き続きクラウドに関係したトピックをいくつかご紹介します。



第20回の公開は、2020年1月を予定しております。

プロフィール

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

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