クラウド上での処理
続いて、転送したファイルを使用してクラウド上で処理をするためのジョブを作成します。今回は、転送した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月を予定しております。
プロフィール