弊社でも引き合いをいただく事が多いMetashape (旧Photoscan)ですが、実はネットワークを組む事でクラスタ構成でも処理ができるソフトとなります。
以前にはPhotoScanでのGPUなどにおける処理速度の測定を行った事がありますが、ではクラスタ構成にした場合はどのような傾向になるのか…という事を検証してみました。
検証環境について
今回のテストに使用したクラスタ構成は以下の環境となります。下記システムを4台用意しまして、3台は完全にクラスタノードとして動作させ、1台はMetashape用のServe兼ストレージサーバー兼ノードとしての検証となります。
クラスタシステム
CPU | Intel Core i9 9900K (3.60GHz/TB5.0GHz, 8C/16T) |
メモリ | 40GB |
SSD | 1TB S-ATA |
GPU | Geforce RTX 2080Ti × 1 |
LAN | Onboard(1GbE) |
OS | Microsoft Windows 10 Professional 64bit |
Metashape | Ver 1.5.2.7838 |
また比較用としまして、1台単独で動作させた以下 仕様のマシンでのデータも参考として表示します。
比較用単体システム
CPU | Intel Xeon W-2155 (3.30GHz/TB4.50GHz, 10C/20T) |
メモリ | 256GB |
SSD | 1TB M.2 |
GPU | Geforce RTX 2080Ti × 2 |
OS | Microsoft Windows 10 Professional 64bit |
Metashape | Ver 1.5.2.7838 |
処理内容について
まずは、前回のテストでも利用したメーカー(Agisoft)が公開しているサンプルデータのDoll (Agisoft データダウンロードページ) で、①MatchPhotos ②AlignCameras ③BuildDepthMaps ④BuildDenseCloud ⑤BuildModel ⑥BuildUV ⑦BuildTexture の処理を実施しました。
※なお実施した処理は以下のパラメーターでの実施となります。
Aligen Photos : Highest
Build Dense Cloud : Ultra High
Build Mesh : Arbitray&Ultra High
Build Texture : Generic
処理結果について
以下がサーバーログで ①MatchPhotos~⑦BuildTexture までの一通りのトータル処理時間を計算した結果のグラフとなります
(Y軸=経過時間 : グラフが長いほど処理に時間がかかっている)
クラスタ 1台 (RTX 2080Ti × 1) | 20分35秒 |
クラスタ 2台 (RTX 2080Ti × 2) | 18分33秒 |
クラスタ 3台 (RTX 2080Ti × 3) | 17分09秒 |
クラスタ 3台 + サーバー兼用 1台 (RTX 2080Ti × 4) | 16分44秒 |
比較用単体システム (RTX 2080Ti × 2) | 20分03秒 |
クラスタ1台での処理速度が少し遅いのが目につきますが、クラスタの結果を見た限りでは 台数に応じて速度が速くなっています。ただ、GPUの枚数による差が少なく見え、果たしてクラスタ構成処理の効果があるのか…?という疑問がでてきます。
そこで、上記の処理時間についてログを確認し、Metashapeの各フェーズと思われる部分の実施結果ごとにデータをまとめてみました。この結果が以下のグラフとなります。
#単独システムの場合はログの出方が異なるため、上記のグラフには載せていません。
この分布から判断しますと前半の ①MatchPhotos~④BuildDenseCloud までの処理速度は、ある程度GPUやクラスタ台数のスケールを反映していますが、⑤BuildModel~⑦BuildTexture までについてはクラスタ台数によっての速度はあまり変わらないという結果になりました。
なお実際の検証時には計測中の負荷を確認していたのですが、⑤BuildModel~⑦BuildTexture のあたりの処理はすべて1台のクラスタノードでのみ実施されており、他のクラスタノードでは処理がされていないという状況が確認できました。
そしてもう一つ気になる点として、それぞれのフェーズにかかる時間にも注目する必要があります。 今回の計測では⑤BuildModel~⑦BuildTexture の時間が今回テストしたトータル処理時間の50%以上をしめています。
ここで最初に示した ①MatchPhotos~⑦BuildTexture までの一通りの処理時間を計算した結果のグラフを再度確認していただきたいのですが、本来であればGPUを2枚搭載したかなりのハイスペックであるはずの比較用単体システム(紺色のグラフ)ですが、実際には同じくGPU2枚のクラスタシステム2台(水色のグラフ)での処理よりも時間がかかっているという結果が出ていました。この原因を考えた場合に、比較用単体システムとクラスタシステムとの間でのGPU枚数以外のスペック差が、トータル処理時間の50%を占める⑤BuildModel~⑦BuildTexture の処理において、大きく影響しているのではないかと推察されました。
それを前提にスペック比較したところ、CPUにその要因があるように見受けられました。改めて2つのCPUを比較して見てみます。
クラスタシステム
CPU | Intel Core i9 9900K (3.60GHz/TB5.0GHz, 8C/16T) |
比較用単体システム
CPU | Intel Xeon W-2155 (3.30GHz/TB4.50GHz, 10C/20T) |
クラスタ側のTB (Turbo boost)が 5.0GHzで動作するのに対して、単体システム側はTB 4.50GHzでの動作となっています。つまり⑤BuildModel~⑦BuildTexture については、CPUの単独クロックが処理速度に対して特に有効となるという推測が成り立ちます。
では⑤BuildModel~⑦BuildTextureを、今回の例より十分に多いコア数優先の処理 にした場合にどうなるのか…?という疑問が発生します。
この疑問については近日公開いたします”「Metashape」のクラスタ構成での処理速度測定と傾向検証 (後編)“でのオルソ画像処理の一連のバッチ処理の検証結果と共にご報告します。
■ 2019年6月28日追記 : 後編記事を公開しました!