みなさんこんにちは。SIGGRAPH Asia 2018が東京で開催されました。私も参加してきて、貴重な情報を仕入れたり、なかなかお会いできない方にご挨拶するなどして充実した時間を過ごすことができました。現地に行った方も行かなかった方も、コースノートやペーパー、その他セッションに関する各種情報が公開されているので、年始のお供にいかがでしょうか。
そして、前回の記事について、1点お詫びしたいことがあります。世界のスーパーコンピュータの性能ランキングTop500のご紹介で、読者の方にピンと来やすいように「一位じゃないとだめなんですか?」という言葉を用いたのですが、この言葉が出たときの状況を考えると、関係者の中には非常に不本意な思いをされた方々もいる一件でもあり、不用意に用いるべきではありませんでした。私の考えが至らず、不快に思われた方がいらしたらすみませんでした。
TEXT_痴山紘史 / Hiroshi Chiyama(日本CGサービス)
EDIT_尾形美幸 / Miyuki Ogata(CGWORLD)
HTCondorの概要
HTCondorは、アメリカのウィスコンシン大学で開発が行われており、ネットワーク上にある計算機の有効利用を目的としていることが特徴です。通常、シミュレーションやレンダリングといった計算はレンダーファームにある計算機に行わせますが、スタジオ内にはそれ以外にも多くの計算機が存在します。一番多いのはアーティストが使用するPCですね。これらのPCは多くの能力があるにも関わらず、夜間や昼食、会議など、人が使用していないときには待機状態になってしまいます。HTCondorは、そのような資源を有効利用することを主目的に開発されました。HTCondorの大まかな構成は下図の通りです。
HTCondor Poolは計算を行うリソース(計算サーバ)と、リソース要求(ジョブ)の集合です。これらはセントラルマネージャが管理します。セントラルマネージャはリソースとリソース要求の間のマッチングを行い、計算サーバにジョブを割り当てます。このためにマッチメイキングという方法が使用されています。ジョブの投入はサブミットマシンから行います。
セントラルマネージャ、計算サーバ、サブミットマシンは1台のマシンが担当することもできます。今回構築する環境も、Linux側はセントラルマネージャ、計算サーバ、サブミットマシンの全機能をもっていて、Windows側は計算サーバとサブミットマシンとして機能します。
※ちなみに、今回図を作成するにあたって「さくらのアイコンセット」を使わせていただきました。こういった資料を作成する際によく使う、いい感じのアイコンが揃っていてとても便利です :-)
HTCondor環境構築
・ネットワーク環境構築
HTCondorは複数のマシンから参照されるので、IPアドレスやDNSの設定はきちんと行い、サーバに問題なくアクセスできるようにしておく必要があります。そのため、事前に HTCondor用サーバのホスト名やIPアドレスを決め、DNSへの登録も行なっておきます。今回はホスト名をhtcondor、IPアドレスを 192.168.0.36としています。
・セントラルマネージャの構築
HTCondorをインストールすると、デフォルトでセントラルマネージャや計算サーバ、サブミットマシンとしての機能が動くようになっています。また、HTCondor poolも作成されるので、ほかのマシンをここに追加して管理することができます。まずは仮想マシンとして用意したCentOS7上でこの環境を作成します。
・環境を最新のものにする
[chiyama@htcondor ~]$ sudo yum -y update
・ファイヤウォールの設定
サービスを提供するために、9618番ポートを開けます。
[chiyama@htcondor ~]$ sudo firewall-cmd --add-port=9618/tcp --zone=public --permanent
・署名鍵の取得
[chiyama@htcondor ~]$ curl -O https://research.cs.wisc.edu/htcondor/yum/RPM-GPG-KEY-HTCondor
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1752 100 1752 0 0 1944 0 --:--:-- --:--:-- --:--:-- 1944
[chiyama@htcondor ~]$ sudo rpm --import RPM-GPG-KEY-HTCondor
・リポジトリファイルの取得
最近の開発でPython対応やこれまであったWeb APIの廃止が進んでいるようなので、Current Development版(8.7.10)を使用します。
[chiyama@htcondor ~]$ cd /etc/yum.repos.d
[chiyama@htcondor yum.repos.d]$ sudo curl -O https://research.cs.wisc.edu/htcondor/yum/repo.d/htcondor-development-rhel7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 183 100 183 0 0 213 0 --:--:-- --:--:-- --:--:-- 213
・HTCondorのインストール
[chiyama@htcondor yum.repos.d]$ sudo yum -y install condor-all
・起動
[chiyama@htcondor yum.repos.d]$ sudo systemctl start condor
[chiyama@htcondor yum.repos.d]$ sudo systemctl enable condor
Created symlink from /etc/systemd/system/multi-user.target.wants/condor.service to /usr/lib/systemd/system/condor.service.
・起動確認
[chiyama@htcondor yum.repos.d]$ ps ax | grep condor
15886 ? Ss 0:00 /usr/sbin/condor_master -f
15951 ? S 0:00 condor_procd -A /var/run/condor/procd_pipe -L /var/log/condor/ProcLog -R 1000000 -S 60 -C 994
15952 ? Ss 0:00 condor_shared_port -f
15953 ? Ss 0:00 condor_collector -f
15954 ? Ss 0:00 condor_negotiator -f
15955 ? Ss 0:00 condor_schedd -f
15956 ? Ss 0:00 condor_startd -f
15976 pts/0 S+ 0:00 grep --color=auto condor
condor関連のプロセスが起動していることが確認できたら、インストールは完了です。
・環境設定
HTCondorの設定を行います。ネットワークの設定をきちんと行い、HTCondorのインストールが終わっていれば既に使用可能な状態になっているはずです。condor_statusコマンドでHTCondor poolの状態を確認できます。
デフォルトでは、OSが認識しているCPUコアの数だけ同時にジョブが実行できるようになっています。今回の例では、2CPU(1CPUあたり2コア)の設定で仮想マシンをつくっているため、合計で4プロセス実行できるようになっています。
このようにして作成したHTCondor poolにほかのマシンを追加できるようにします。HTCondorの設定ファイルは/etc/condor以下にあり、通常はcondor_configかconfig.d以下にファイルを作成して各種設定を行います。今回はcondor_configの最後に以下を追加し、HTCondorを再起動します。
NETWORK_INTERFACE=XXX.XXX.XXX.XXX
ALLOW_READ = *
ALLOW_WRITE = *
ALLOW_ADMINISTRATOR = $(IP_ADDRESS)
use POLICY : ALWAYS_RUN_JOBS
WANT_VACATE = FALSE
WANT_SUSPEND = TRUE
※XXX.XXX.XXX.XXXにはIPアドレスを入れます(本記事の環境では 192.168.0.36)。複数のIPアドレスが存在する場合は、HTCondorが使用するアドレスを指定する必要があるようです。
[chiyama@htcondor condor]$ sudo service condor restart
何か問題があった場合、/var/log/condor以下にログファイルが作成されているので、そちらを見てみます。
・Windows環境の構築
HTCondor Poolに接続し、ジョブを実行するための環境をWindows上に作成します。Windows版はインストーラが用意されているので、ダウンロードページから必要なバージョンを選んでダウンロードします。通常はセントラルマネージャにインストールしたものとバージョンを揃えます。私はcondor-8.7.10-453720-Windows-x64.msiを使用しました。
・ファイヤウォールの設定
サービスを提供するために、Linuxと同様9618番ポートを開けます。
・インストール
Windows版のインストーラではいくつかの設定を選択できます。基本的にはデフォルトのままで良いですが、何ヶ所かここで設定しておくと良いところがあります。まず、既にセントラルマネージャを作成し、poolも用意されているためそちらに接続するようにします。
PCの空き時間にのみ処理を実行するかどうか決めます。とりあえず、常に実行するようにします。また、このマシンからジョブの投入もできるようにします。
それ以外はデフォルトのまま、Nextで進めていきます。インストーラが終了すれば自動的にHTCondorが立ち上がり、既にLinux環境上に作成してあるpoolに接続されるはずです。それを確認するためにコマンドプロンプト上でcondor_statusを実行してみます。
Windowsマシンでは8コア相当(4コアHT)の環境なので、デフォルトで8プロセス同時に処理できるようになっています。さらにいくつか設定を行います。Windows版の設定ファイルは%CONDOR_INSTALL_DIR%\condor_configにあります。以下のような記述があるか確認し、なかったら追加します。
ALLOW_READ = *
ALLOW_WRITE = *
ALLOW_ADMINISTRATOR = $(IP_ADDRESS)
use POLICY : ALWAYS_RUN_JOBS
WANT_VACATE = FALSE
WANT_SUSPEND = TRUE
設定を書き換えたら、condor_reconfigで新しい設定を反映させます。
C:\temp\simpleSubmission>condor_reconfig
Sent "Reconfig" command to local master
[[SplitPage]]
ジョブを実行してみる
環境が整ったところで、ジョブを実行してみます。ジョブの実行にはsubmit description file(sdf)を記述し、condor_submitを使用します。以下はWindows上でdirコマンドを実行した結果をログに出力する例です。
----
executable = C:\Windows\System32\cmd.exe
output = c:\temp\simpleSubmission\log\loop.$(Process).out
error = c:\temp\simpleSubmission\log\loop.$(Process).error
log = c:\temp\simpleSubmission\log\loop.$(Process).log
arguments = /c dir
initialdir = c:/
requirements = TARGET.OpSys == "WINDOWS"
queue
----
各行の内容は、以下のようになっています。
executable : 実行したい実行ファイル
output : ジョブの標準出力
error : ジョブの標準エラー出力
log : ジョブが存在する間にHTCondor内で起きたイベントログ
arguments : 実行ファイルに渡される引数
initialdir : ジョブを実行する際のカレントディレクトリ
requirements : ジョブを実行する計算サーバに求められる条件
このファイルを保存して、以下を実行します。
C:\temp\simpleSubmission>condor_submit simpleSubmission.sdf
投入したジョブの情報はcondor_qコマンドで確認できます。今回のように単純なケースでは一瞬で処理が終わってしまうので、condor_submitとcondor_qを連続して実行してみました。
少し待って再度condor_qを実行すると、ジョブが終了し、なくなっていることがわかります。BackburnerやDeadlineといったソフトウェアに慣れているとオヤッ? と思いますが、終了したジョブはHTCondorからは削除されてなくなります。終了したジョブや、各ジョブの詳細情報を確認したい場合、HTCondorと連携する別のしくみとして用意する必要があります。その一例が、前回もご紹介したMonitoring HTCondorで行なっている内容です。
実行結果はsimpleSugmission.sdfに記述してある通り、c:\temp\simpleSubmission\log\loop.0.outに出力されます。
ちょっとわかりづらいですが、dirコマンドの実行結果が記録されています。ここで、HTCondorの設定やsdfの内容に問題があり、いつまでもジョブが実行されない場合があります。そのような場合、condor_q -better -analyzeでジョブの詳細を確認することができます。
HTCondorはThe Requirements expressionで指定されたルールに従ってどのサーバでジョブを実行するか決定するため、ここの指定が間違っているとジョブが思った通りに実行されません。また、/var/log/condor(Windowsでは%CONDOR_INSTALL_DIR%\condor\log)以下にログファイルがあるので、こちらも参照します。同様な内容をLinux環境でも実行してみます。simpleSubmission.sdfとして以下のファイルを保存します。
----
executable = /usr/bin/ls
output = /home/chiyama/simpleSubmission/log/ls.$(Process).out
error = /home/chiyama/simpleSubmission/log/ls.$(Process).error
log = /home/chiyama/simpleSubmission/log/ls.$(Process).log
initialdir = /
requirements = TOpSys == "LINUX"
queue
----
ジョブを投入します。
ジョブが実行されると標準出力の内容がファイルに出力されるので確認します。
これでとりあえずHTCondor環境をつくることができました。より詳しくジョブの投入方法について知りたい方はマニュアルを参照してみてください。HTCondorはマニュアルが非常に充実していて、実例も豊富です。また、メーリングリストのアーカイブも充実しているので、何かに詰まったときにも検索をすると似たような事例が豊富に出てくるのがありがたいです。
次回予告
次回からは、映像制作で使うケースを用いてより具体的な処理をHTCondor上で行なっていきます。
第9回の公開は、2019年2月を予定しております。
プロフィール