Amazon EC2 GPU
クラウドにおける
OpenFOAM
流体
計算の性能評価
西條 晶彦
1井口 寧
1,2松澤 照男
1,3概要:計算機をVMの形で使った時間の分だけ借りるクラウド形態の計算機の利用が進んでいる.本研究 ではHPC分 野におけるHPCクラウド計算機としてAmazo EC2のGPGPUノードを用いて,実用的 な流体計算アプリケーションであるOpeFOAMを用い,GPUクラウド上での並列血流解析計算による性 能評価を行った.OpenFOAMのMPI対応GPGPU線形ソルバを開発し適用した.その結果,8並列の
EC2ノード上においてもスケールできることがわかった. キーワード:GPU, Cloud, CFD
Akihiko Saijo
1Yasushi Inoguchi
1,2Teruo Matsuzawa
1,31.
はじめに
HPCのクラウド形態による利用が行われつつある.従 来の据え置き(Inhouse)型ではクラスタマシンを購入ある いはリースして集団で使うのに対し,クラウドでは個人が 欲しいだけの計算機資源に対して料金を支払うことでその 場で仮想マシンの形で計算機資源を借り受けるというものである.このようなIaaS (Infrastructre as a Service)形態
のクラウド計算機利用は大規模データ解析などの分野では 既に多く利用されており,据え置き型のPCの需要を置き 換えている.しかしながらクラウドにおけるHPC分野で の利用は未だ少ない. クラウドHPCを用いるメリットは提供されるマシンが 仮想マシンであるため,アプリケーションやライブラリ, コンパイラ環境を利用者個人が好きなように設定すること が出来ることである.もちろん据え置き型のマシンも管理 者権限があれば可能であるが集団で使う利用者の利便性が 高いというものがある.また,単発的に小規模な計算を行 うような使用例の場合,据え置き型のHPCを一定期間借 りるよりもコストの面で有利な場合がある.一方,クラウ ドHPCのデメリットとしては遅いMPI通信速度や仮想コ 1 北陸先端科学技術大学院大学 情報科学科
Japan Advanced Institute of Technology and Science, School of Infomation 2 情報社会基盤研究センター 3 シミュレーション科学研究センター アCPUのための性能低下,性能のブレがある.HPCクラ ウドが実際の研究用途に十分な性能があるかという問題は アプリケーションの性質に依存する.MPI通信をほとんど 必要としないアプリケーションの場合は高い性能が出る可 能性がある一方,MPI密結合な場合は高速な通信インフラ を持つ据え置き型HPCと比べて性能が非常に低下するこ とが予想される.実際のクラウドアプリケーションの性能 はプログラムの構成や通信のパターンに強く依存する.
HPC向けのクラウドサービスにAmazon EC2 (Elastic
Compute Cloud)がある.EC2サービスのHPC計算ノー
ドとして CCI (Cluster Compute Instance)があり,HPC
向けの高性能ノードを持っている.CCIではNVIDIAの
CUDA 対応GPUカードを搭載したGPU CCIがある.
HPCの計算をEC2 CCIで行う研究はいくつかあるが,ほ
とんどがマイクロベンチマークやそれに近いアプリケー
ションによる計算であり,クラウド計算機で実用的なHPC
計算をおこなうべきか否かという問いは未だ明らかでは ない.
本研究ではAmazon EC2のGPU CCIを用いて,実際
的な流体科学計算に用いられるOpenFOAMをGPU CCI
に対応させて実行,Inhouse型のGPUクラスタと性能を
比較した,Amazon EC2におけるクラウドHPC計算がど
れほど有効であるかを調査した.
2.
Amazon GPU Cluster Compute
In-stance
前述のようにAmazon CCIはAmazon EC2によって提
供されるクラウド仮想マシンであり,科学技術計算に適
した高性能仕様の計算機である.本研究ではCCIのうち,
GPUを搭載しているインスタンスである“Cluster GPU
Quadruple Extra Large Instance” (cg1.4xlarge) [6]をOn
Demand形態で使用する.比較のためにInhouseの
Infini-band GPU Cluster (pcc-gpu)を用いる.それぞれの仕様
は表1にまとめた.
3.
環境セットアップと MPI 性能評価
3.1 環境セットアップ
本研究では Amaozon EC2のGPU CCIを利用する.
GPU CCIのノードは現在,アメリカ合衆国東部(Virgina)
地域のみで提供されており,日本から利用する場合は操 作やファイルの転送にやや遅延がある.また,デフォルト では最大2ノードしかGPUインスタンスを立ちあげられ ないので,それ以上のノード数を利用する場合はさらに Amazonに申請して利用可能ノードを引き上げてもらう必 要がある. CCIを利用することは非常に容易である.ブラウザか らアクセスできる管理コンソールが用意されており,その 上でVM,ストレージの管理,ネットワークの設定などを 行う.最初にインスタンスを設定したのち,それをテンプ レートとしたVMを複数立ち上げることで仮想クラスタ を構築できる.また,APIを経由して端末からコマンドで VMを設定することもできる.
計算に使用するOSとしてCluster GPU Amazon Linux
AMIの2012.03版を使用した.これはRed Hat Enterprise
LinuxをベースにしたAmazonの提供するマシンイメー
ジであり,MPI通信とGPUを実行するのに必要なHVM
(Hardware Virtual Module)やCUDAを使うためのツー
ルキットがあらかじめインストールされている.
EC2 CCI上のクラスタ構築ツールとしてStarCluster[7]
やOpenFOAMのEC2用VMであるCloud-Flu[8]がある
が,本研究ではGPUコードを使うためツールは用いず, GCCコンパイラでOpenFOAMをコンパイルし,システ ムにインストールしたOpenMPIを使用してクラスタ環境 を構築した.またXeonの機能であるHyperThreadingは 性能低下やプログラムの予期せぬ終了を招くことがあるの で無効にした. ストレージは各ノードがそれぞれOSのためのローカル のルートストレージを持つ.並列計算のためには各ノード からNFSなどで永続ストレージであるEBS(Elastic Block Store)ボリュームをマウントすることもできるが, Open-FOAMは各ノードのローカルストレージでI/Oを行うこ とが出来るため共有ストレージは使用しなかった. 3.2 MPIベンチマーク
Intel MPI Benchmarks (IMB)によるMPI通信性能の比
較を行った.比較するのは流体の並列計算で用いる,ノー
ド間の袖領域(Ghost Cell)の通信と倍精度浮動小数点の縮
約通信である.最初の例は2ノード(インスタンス)間で
IMB PingPongのメッセージサイズを変化させて実行時間
を計測した. 図1がCCI (cg1.4xlarge)とInhouseクラス
タ(pcc-gpu)の結果である. メッセージサイズが大きくな るに従い,CCIの通信は6倍近く遅くなることがわかる. 縮約通信はサイズを8bytesに固定し,ノードの並列数を 変化させた.図2が結果である.CCIにおける縮約通信の レイテンシは非常に悪く,100倍遅いということがわかる. このような遅い通信を避けるコードでなければEC2上で は高速にならないことがわかる. 0 50000 100000 150000 200000 250000 300000 0 100 200 300 400 500 600 700 800 900
IMB PingPong (2nodes)
cg1.4xlarge pcc-gpu
Message size [byte]
E la p se d t im e [ μ se c ] 図1 メッセージサイズに対する2ノード間通信時間: EC2 CCI vs. Inhouse Cluster 1 2 3 4 5 6 7 8 9 0 50 100 150 200 250 300 350
IMB Allreduce (8bytes) cg1.4xlarge pcc-gpu Number of nodes E la p se d t im e [ μ se c ]
図 2 ノード数に対する全体縮約通信時間: EC2 CCI vs. Inhouse
Cluster
表1 EC2 GPU Cluster InstanceとInhouse GPU Clusterの仕様
Table 1 Specifications
名前 cg1.4xlarge pcc-gpu
CPU Intel Xeon X5570 2.93 GHz AMD Opteron 6136 2.4 GHz CPU数(コア数) 2(8 w/o HyperThreading) 2(16)
メモリ 22 GB 32 GB
GPUs NVIDIA Tesla M2050× 2
ネットワーク 10 Gigabit Ethernet Infiniband QDR
OS Cluster GPU Amazon Linux AMI 2012.03 CentOS 6.2
コンパイラ GNU GCC 4.4.6 Options: -O2 -fPIC
CUDA Version NVIDIA CUDA 4.2 CUDA 4.1 MPI Library Open MPI 1.5.3 MVAPICH2 1.7
4.
OpenFOAM GPU
流体計算
以上のベンチマークの結果を考慮し,OpenFOAMによ
る血管内流れ解析の計算を行う.
本研究での血管内流れ解析には定常非圧縮性粘性流体の
物理モデルを用い,圧力解法にはSIMPLE (Semi-Implicit
Methods Pressure-Linked Equations)法を用いる.支配方
程式は定常非圧縮粘性流れの連続の式と(外力項のない) Navier-Stokes方程式(運動量方程式)である. { ∇ · (ρU) = 0, (U· ∇) U − ∇ · (ν∇U) = −∇P (1) OpenFOAMにおけるSIMPLE法ソルバではこの2式 を有限体積法(FVM)により離散化し,以下の圧力解法ス キームを用いて物理量を算出する[3]. 節点(Node) pにおける運動量方程式は次のように離散 化される. apUp= H(U)− ∇P ⇒ Up= H(U) ap − ∇P ap , (2) where H(U) =− ∑ n∈NEIGH(p) anUn. ここでapは移流項を上流差分で離散化して得られるUp の係数,H(U)はp点の近接セルの離散化行列にUを作 用させたものを表している. 連続の式の離散化は次のようになる. ∇ · U = ∑ f∈F ACE SUf (3) ここで SはFVM の検査体積の境界面に外向きに垂直 な面ベクトルであり,Ufはその面での速度である. 境界面fにおける速度は離散化された運動量方程式にお いて補間を用いて得ることが出来る. Uf= ( H(U) ap ) f −(∇P )f (ap)f (4) Algorithm 1 SIMPLE法 1: 境界条件の設定 2: repeat 3: 離散化された運動量方程式を解いて中間的な速度場を算出 4: セル界面の質量流束の計算 5: PCG法で圧力方程式を解き,不足緩和を適用 6: セル界面での質量流束を修正 7: 新しい圧力場から速度場を修正 8: 境界条件の更新 9: until圧力場と速度場が閾値以下に収束するまで 上式を離散化された連続の式に代入して圧力の方程式が 得られる. ∇ · ( 1 ap∇P ) = ∇ · ( H(U) ap ) = ∑ f S ( H(U) ap ) f (5) この圧力の方程式を中央差分で離散化すること圧力場の 線型方程式A.x = bが得られる(xは圧力の節点のベクト ル[P1, P2, . . . , PN], bは対応する右辺のベクトル).係数行 列Aは対称となり,方程式は前処理付きCG法によって高 速に解くことが出来る. SIMPLE法では現在のステップの速度場から中間的な速 度場を算出し,これを用いて圧力の線型方程式を解く.収 束条件のループを減らすために,不足緩和を行う[4].新し い圧力場が連続の式を満たすように速度場を修正する.圧 力場と速度場が収束するまでこのループを繰り返す.ここ では、この速度場修正のための反復をCG法の反復と区別 するために前者を外部反復,後者を内部反復と呼ぶ. 4.1 線型ソルバのGPU化 前処理付きCG法はアルゴリズム2に擬似コードの形で 表す?.ここでのベクトルpなどの表記は前節の物理的な 圧力などと関係がない. PCG法で計算時間のかかるものはこのうちの疎行列 ベクトル積(SpMV)と前処理の適用部である.本研究で はGPUにおけるSpMVのルーチンにLiとSaadによる 3
Algorithm 2 Parallel Preconditioned Conjuagte
Gradi-ent
1: Given x0.
2: Let p0= b− Ax0, z0= M−1r0, r0= p0, k = 0.
3: repeat
4: MPI Send GHOST CELLS of pk.
5: qk= Apk
6: MPI Recv GHOST CELLS of qk.
7: αk= pTkrk/pTkqk
8: MPI Allreduce SUM αk.
9: xk+1= xk+ αkpk
10: rk+1= rk− αkqk
11: zk+1= M−1rk+1
12: βk= rTk+1qk/pTkqk
13: MPI Allreduce SUM βk.
14: pk+1=−rk+1+ βkpk
15: k = k + 1
16: until (krk+1k/kr0k ≤ )
線型ソルバライブラリであるCUDA ITSOL[2]を用いる.
SpMVの高速化には疎行列格納形式として行列要素を対
角方向に保持するJAD (JAgged Diagonal)格納形式を用
いる. また,SIMPLE法では圧力と速度が収束するまで外部反 復を繰り返す.その度に線型ソルバは何度も呼ばれるため 全体の高速化のためには線型ソルバの初期化時間も高速化 する必要がある.係数行列AをOpenFOAMの行列格納形 式からJAD形式に変換し,この行列から導かれる前処理 行列Mを作成しなおす必要がある.ここで,式(5)の左辺 から分かるようにSIMPLE法では与えられる係数行列の 値は外部反復ごとに変更されるが,非ゼロ要素の位置は節 点の結合度によって決まるため変化しない.これより,内 部反復の最初にJAD形式への要素の並び替え順をキャッ シュしておくことで,2回目の外部反復以降では行列値の みを並べ替えるだけになり高速に変換できる. 4.1.1 AMG前処理 前処理計算の並列性と収束性は線型ソルバの性能を決 める2大因子である.一般に並列度の高い前処理子は収 束性が落ちるというトレードオフの関係にある.しかし, マルチグリッド前処理は高い並列性と収束を持った前処 理であり,高い並列性が求められるGPU計算と相性がよ い.本研究では幾何格子構造の情報を利用せずに行列から 代数的に粗行列を生成することができる代数的マルチグ リッド(Algebraic MultiGrid)前処理を用いる.本研究で
はCUDAによるAMGの実装にCUSPライブラリ[9]の
smoothed aggregationコードを用いた. AMG前処理は強力な反面,メモリを大量に使うという 欠点がある.これを前処理子をfloatで確保することと,前 処理子を1ノードに搭載されてる2枚のGPUカードにそ れぞれ分け,前処理された配列をP2P通信する.1ノード に1MPIプロセスを置くことでMPI並列数を最小に下げ ることができる. 4.1.2 通信隠蔽 OpenFOAMでは領域分割によるMPI並列化をサポー トしている.MPIとGPUを組み合わせたハイブリッド並 列を行うためには,MPI通信したいデータをGPUのデバ イスメモリからCPUのホストメモリへPCIeバス経由で メモリ転送,MPI通信をおこなってか通信先ノードのホス トメモリからデバイスメモリへメモリ転送を行う必要があ る.通信したい境界値のデバイスホスト通信,MPIによる 通信,ホストデバイス通信と,境界値ではない領域内部の 値のSpMV計算をCUDA Streamを用いることで同時に 実行,通信時間を計算時間で隠蔽する. 4.2 計算条件 計算条件を設定する.計算対象は人間の胸部大動脈
(Tho-racic Aorta)をMRIスキャンすることによって得られた血
管構造をANSYS社のGambitによって格子化し,
Open-FOAM用格子に変換した.格子化の細分度を調整すること
で,SMALL, MEDIUM, LARGEの計算格子を生成した.
図3が格子化した大動脈メッシュのSMALLである.この 図において左の矢印で示した部分が流入口,その他4つの 出口は流出口であり,指定の境界条件を与える. 計算格子の大きさ,計算条件の詳細についてはそれぞれ 表2,表3にまとめている. 並列化はOpenFOAM付属のScotch自動分割ライブラ リ[10]によってサイズがほぼ等しくなるように領域分割す ることにより行う.例として,図4が領域を4分割して色 分けしたものである. 図3 胸部大動脈の格子 図4 領域分割の例
表2 計算格子
Table 2 Meshes
格子名 SMALL MEDIUM LARGE
セル数 1,912,272 2,980,302 5,144,730
セル界面数 3,874,336 6,031,206 10,382,979
サイズ[MB] 155 311 543
表3 計算条件
Table 3 Simulation parameters
ソルバ simpleFoam (OpenFOAM-2.1.1) 物性値 動粘性係数ν = 3.33× 10−6[Pa.s](血液) 乱流モデル 層流モデル 流入側境界条件 流入速度V = 0.263 [m/s] (Re = 3000) 流出側境界条件 圧力P = 0 [Pa] 外部収束緩和係数 圧力・速度ともに0.6 外部反復収束条件 kδP k1≤ 1.0 × 10−6 andkδV k1≤ 1.0 × 10−6 線形ソルバ 圧力GPU-AMG-CG法,速度ILU-BiCG法 内部反復収束条件 相対残差ノルムkrk1≤ 1.0 × 10−8 4.3 結果 GPU CCIにおいて1ノードにおける格子サイズのス ケーリング(図5)と,LARGEメッシュに対するノード並 列度に対するスケーリング(図6, 7)のベンチマークを行っ た.参考として,1ノード内のCPUによるDICCG法によ るスケーリンググラフを載せている.格子サイズのスケー
リングではGPU CCIとInhouse ClusterはCPU計算では
GPU CCIの方がやや高速,GPU計算ではほぼ同じという
結果となった.GPU CCIのCPU計算がInhouse Cluster
よりも高速なのはCPUのアーキテクチャが異なり,高い 周波数を持つためであると考えられる.GPU計算では共 にCPUよりも4倍から6倍の性能向上が行えた. MPIの非常に大きなレイテンシにも関わらず,ノードに 対するストロングスケーリングでは8並列でCPUの内部 反復では9倍,外部反復では8倍と,EC2上のソルバも高 い並列度を保ってスケールすることができた.
SMALL MEDIUM LARGE
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7
EC2 vs. Inhouse: AMG-PCG inner loop cg1.4xlarge (CPU-DIC) pcc-gpu (CPU-DIC) cg1.4xlarge (GPU-AMG) pcc-gpu (GPU-AMG)
Number of nodes E la p se d t im e [ se c ]
図5 格子サイズに対するCCIとInhouse Clusterの,CPUによ
るDIC-CGとGPUによるのAMG-CG内部反復の比較
1 2 4 8 0 0.1 0.2 0.3 0.4 0.5 0.6
EC2 vs. Inhouse: AMG-CG 1 inner loop cg1.4xlarge (CPU) cg1.4xlarge pcc-gpu
Number of nodes E lp a se d t im e [ se c ]
図6 並列度に対するGPU CCIとInhouse ClusterのAMG-CG
内部反復の比較: LAREGメッシュ 1 2 4 8 0 200 400 600 800 1000 1200
EC2 vs. Inhouse: SIMPLE outer loop cg1.4xlarge (CPU) cg1.4xlarge pcc-gpu
Number of nodes E la p se d t im e [ se c ]
図 7 並列度に対するGPU CCIとInhouse ClusterのSIMPLE
外部反復の比較: LAREGメッシュ
5.
関連研究
EC2クラウドHPCの性能測定を行った研究はいくつか
ある.Zhaiら[11]はEC2でIMBとNPBを実行を行い,
コストも含めた性能測定を行なっている.
6.
結論
本研究ではAmazon EC2のGPU CCIインスタンスを
用いてIMBの性能測定を行い,通信をなるべく行わない
GPU-AMG-CGソルバを開発して,血流流体の解析に適応
してEC2上で計算を行った.その結果,EC2上において
もスケールすることができた,
参考文献
[1] Malecha Ziemowit M, Miroslaw Lukasz, Tomczak
Tadeusz, Koza Zbigniew, Matyka Maciej, Tarnawski Wo-jciech, Szczerba Dominik. “GPU-based simulation of 3D blood flow in abdominal aorta using OpenFoam”. Archives of Mechanics, 2011, vol. 63, No 2, pp. 137-161 [2] R.Li, Y.Saad. “GPU-accelerated preconditioned iterative
linear solvers,” Report umsi-2010-112, Minnesota Super-computer Institute, University of Minnesota,
lis, MN, 2010.
[3] The SIMPLE algorithm in
Open-FOAM - OpenFOAMWiki, 入 手 先
hhttp://openfoamwiki.net/index.php/
The SIMPLE algorithm in OpenFOAMi
[4] J.H.Ferziger, M.Peric. “Computational Methods for Fluid Dynamics.” Springer-Verlag Berling, Heidelberg, 1996.
[5] Y.Saad. “Iterative Methods for Sparse Linear Systems”. PWS Publishing Co.,Massachusetts, MA, 2000.
[6] Amazon: EC2 Instance Type (online): 入 手 先
hhttps://aws.amazon.com/ec2/instance-types/i [7] Star: Cluster入手先hhttp://web.mit.edu/star/cluster/i
[8] Alexey Petrov, Andrey Simurzin Cloud Flu. 入 手
先hhttp://sourceforge.net/apps/mediawiki/cloudflu/
in-dex.php?title=Main Pagei
[9] Nathan Bell and Michael Garland. “Cusp: Generic Parallel Algorithms for Sparse Matrix and Graph
Computations”, 2012. 入 手 先
hhttp://cusp-library.googlecode.comi
[10] SCOTCH: A Software Package for Static Mapping
by Dual Recursive Bipartitioning of Process and Ar-chitecture Graphs. “Proceedings of HPCN’96”, Brus-sels, Belgium. LNCS 1067, pages 493-498. Springer,
April 1996. F. Pellegrini and J. Roman. 入 手 先
hwww.labri.fr/perso/pelegrin/scotch/i
[11] Yan Zhai, Mingliang Liu, Jidong Zhai, Xiaosong Ma, and Wenguang Chen. “Cloud versus in-house cluster: eval-uating Amazon cluster compute instances for running MPI applications”. In State of the Practice Reports (SC ’11). ACM, New York, NY, USA, Article 11,10 pages. 2011