弱連成のための汎用カップリングライ
ブラリh3-Open-UTIL/MPの紹介
PCCC-OSSSワークショップ
2023/03/30 東大柏Ⅱキャンパス 情報基盤センター

荒川隆
東京大学情報基盤センター/CliMTech1

講演の内容• 連成計算とは• h3-Open-UTIL/MPの紹介• 概要• 連成方法• 特徴• 性能評価• テストモデルを用いた評価• 異機種間連成• シミュレーションモデル＋AI

2

連成計算とは？
そして「現実」とは、大小無数の、振幅も展開速度もちがう「現象系」が、相互に影響しあいながら、もやもやしたパターンを描いている巨大複雑な「複合系」であり、まだ今のところ、コンピューターにすべての「現実」がはいっているわけでもない。

• 連成計算小松左京「日本沈没」より• 振幅も展開速度もちがう複数の「現象系」を「複合」させて「現実」を再現する試み• 強連成と弱連成• 強連成：異なる現象系をひとつの方程式系にまとめて計算する• 弱連成：個々の現象を個別に計算する• 弱連成• 振幅も展開速度もちがう「現象系」どうしを橋渡しする必要

空間構造 時間構造

そのためのソフトウェア ＝ カプラ
3

連成計算の事例• 真鍋らによる大気海洋結合

IPCC5次 2012

• 1980年代から本格的な結合計算• 現代ではより多くのモデルコンポーネントが組み合わされるようになっている• 陸面や海氷

Portrait of Prof. Sukuro Manabefrom Wikipedia

IPCC4次 2007
Fisher and Koven (2020)
Increasing of resolution and complexity
4from IPCC AR5 WG1 reportより多様な連成計算に向けて• 現代のHPCはヘテロジニアスなアーキテクチャが主流• Simulation → Simulation + Data + Learning• File Sharing System → One way and Sequential• 異機種間連成を可能にするソフトウェアがあれば• 双方向通信、並列実行が可能になる• S + D + Lの新しい可能性を拓く！

5h3-Open-UTIL/MPの概要• 連成計算のための汎用ライブラリ• 弱連成計算を対象• 異なる時空間スケールを持つ複数のシミュレーションモデル間で情報（データ）を交換しながら計算を実行• 特徴• 格子形状に依存しない→任意の格子のモデルに適用可能
基本機能の特徴• 空間補間方法を利用者が規定できる• アンサンブル連成可能• h3-Open-SYS/WaitIOと連携し異機種間で連成計算できる
拡張機能の特徴• Pythonインターフェースを持つ

6

h3-Open-UTIL/MPの一般論• カプラの一般的な機能• 複数のモデルコンポーネントのプロセス管理• データ交換• 格子変換MPI communicators generated
by the coupler

Data exchange pattern

Data exchange timing

Grid remapping7h3-Open-UTIL/MPの連成方式• プログラムの実行とデータ交換• マルチプログラム：2モデルが並列に実行される• 並列データ交換：相互に1ステップ前のデータを受信

h3ou_put_data

h3ou_put_data

do t = 1, Num_Steph3ou_set_time
h3ou_get_data

do t = 1, Num_Steph3ou_set_time
h3ou_get_data

h3ou_put_data
end doh3ou_put_data
end do2022/10/14 WaitIO/MP 講習会

8

もう少し詳しいデータの流れ
h3ou_put_data

h3ou_put_data
send_buffer

send_buffer

データ通信、補間計算はh3ou_set_time内部で実行される

do t = 1, Num_Step1

do t = 1, Num_Step2

h3ou_set_time

h3ou_set_time

interpolationinterpolation

recv_buffer

recv_buffer

h3ou_get_data

h3ou_get_data

put, getはh3ou_set_timeの後ならどこで呼んでもよい
h3ou_put_data

h3ou_put_data

send_buffer
end do2022/10/14 WaitIO/MP 講習会

send_buffer
end do9h3-Open-UTIL/MPの特徴（基本機能）• 汎用性• 幅広い格子系に対応➢ 格子形状を入力情報としない➢ 格子点番号と補間テーブルの２つが入力情報• 補間計算を利用者が規定できる➢ 補間に関わる格子点番号と補間係数をAPIを通じて与える➢ 補間ルーチンは外部に公開されており利用者が自由にコーディング可能10一般的な補間アルゴリズム
R(p)• 補間計算• 受信側の格子点値は送信側の複数の格子点値と係数から計算される• 補間アルゴリズム• 距離重み法• 面積重み法• バイリニア• トリリニア

S(i)

Cs(i)

S(i+1)
Cs(i+1)Cs(i+2)Cs(i+4)S(i+4)

Cs(i+3)S(i+2)
S(i+3)

補間元（送信側）格子点の選択方法も係数の計算方法も異なる必要と思われるすべてのアルゴリズムをカプラ内に実装するのは現実的ではない

11

補間計算と補間テーブル
R(p)• 補間計算• 受信側の格子点値は送信側の複数の格子点値と係数から計算されるS(i)• 補間テーブル• 受信側格子点番号・送信側格子点番号・補間係数の列• h3-Open-UTIL/MPではこれらの列をAPIの引数として与える

Cs(i)S(i+1)
Cs(i+1)Cs(i+2)Cs(i+4)S(i+4)

Cs(i+3)S(i+2)
S(i+3)

Operation index

operation(i=1,N_G)

5645785678123456789103455667889Send data
Recv data

Operation index to send gridindex
Operation index to recv gridindexInterpolation operation12h3-Open-UTIL/MPの特徴（拡張機能）• アンサンブル連成• アンサンブル計算➢ 条件をわずかに変えたシミュレーションを多数実行し統計的な描像を得る手法• 連成モデルに対してアンサンブル計算可能• アンサンブル方向の統計量もカプラが計算
Application A (e.g. Atmosphere Model)
App A1
App A2
App A3h3-OpenUTIL/MP

h3Openh3-OpenUTIL/MPMP

Ensemble
Execution
ManagementCouplingw/ Grid Remappingh3-OpenUTIL/MP

Application A (e.g. Low Resolution Model)
App A1
App A2
App A3h3-OpenUTIL/MP

h3Openh3-OpenUTIL/MPMP

h3-OpenUTIL/MP

Ensemble Reduction/Broadcast

h3-OpenUTIL/MPh3Open
h3-OpenMP
UTIL/MPh3-OpenUTIL/MP

h3-OpenUTIL/MPApp B1

App B2

App B3

App B1

Application B (e.g. Ocean Model)

Application B (e.g. High Resolution Model)

M x ( A + B ) execution( M x A ) + B execution13

h3-Open-UTIL/MPの特徴（拡張機能）• 異機種間連成とPythonインターフェース• h3-Open-SYS/WaitIOと連携➢ モデル内の通信：MPI➢ モデル間の１対１通信：WaitIO(waitio_isend, waintio_irecv, waitio_wait)➢ グローバル通信：MPI+WaitIO
Odyssey
Fortran APP

Python APP

Fortran API module

h3ou.pyh3ou_py.f90

Odyssey

Aquarius

Fortran APP

Python APPh3-OpenUTIL/MP

h3ou_py.f90

h3ou.pyh3-OpenUTIL/MP

Fortran API module

h3-Open-UTIL/MPmodules

MPI wrapper

h3-Open-UTIL/MP
modules

MPI
MPI

WaitIOMPI

MPI+WaitIO

14

グローバル通信の例• MPI_Gather相当• MPI_Gatherでローカルrootに集める• ローカルroot間でwaitio_isend/waitio_irecv• ローカルrootからtarget rankへsend/recv
MPI_Gather tolocal root

App.A
App.B

Local
Root

waitio_isend/irecv
TargetRank

between local roots
MPI_send/recv fromlocal root to target rank

15

性能評価例• 使用マシン

• Wisteria-BDEC01:Odyssey + Aquarius (WaitIO/Socket + WaitIO/File)• 不老: Type I + Type II (WaitIO/Fileのみ）• テスト条件• Odyssey, Type I : 160 プロセス, 40ノード• Aquarius, TYpe II : 20プロセス1ノード• 測定項目• トイモデルで時間積分ループ中の通信時間を測定: waitio_isend/waitio_irecvの通信

16性能評価例• 実験条件• 交換データサイズを２倍ずつ変化させて時間を測定• 実験結果• データサイズが小さい場合はSocketが高速• データサイズに対する時間増加割合はFileの方が小さく、データサイズが大きくなるとFileが高速になる• Wisteriaと不老の比は約２倍←ハードウェアの性能に比例# of grid
81920
1638403276806553601310720

total size
size/process
26214400
16384052428800
3276801.05E+08
6553602.1E+081310720
4.19E+082621440

5040Time(sec)Case
C0C1C2C3C430
20
100C0C1C2C3Socket

FileFLOW

C417

h3-Open-UTIL/MP+WaitIOの適用事例• 大気モデル-AI連成• 雲は気象・気候のシミュレーションに極めて大きな影響• 雲を解像するには10km以下の解像度が必要で気候シミュレーションには実現困難• 高解像度の雲物理計算をAIで学習し低解像度のシミュレーションに適用する

ML App(Python)

Input
Physical processCoupling with
Grid Remapping

Coupling without
Grid Remapping

OutputCoupling Phase 1
Training with high-resolution
NICAM data

Coupling Phase 2
Replacing Physical Process
in Low-Resolution NICAM
with Machine Learning18

実験のデザイン• 対象モデル

Simulation NodeOdyssey• NICAM:正二十面体格子の非静力学全球大気モデル• 水平格子数10240, 鉛直40層• AI

Data/Learning
NodeAquarius• FrameworkはPyTorch• 学習は３層のMLP

Atmospheric Model(Convection-Scheme ON)• 実験方法ML App(Python)• NICAMの雲物理サブルーチンの入力データから出力データを再現する
ように学習• 学習結果と入力データから出力データを再現• 用いたデータ• 入力は大気密度(rho), 内部エネルギー(ein), 水蒸気密度(rho_q)の３変数• 出力は上記３変数の時間変化量

Input
Cloud physics
subroutine
OutputOutput19

Δ𝑟ℎ𝑜Δ𝑇

Δ𝑒𝑖𝑛
Δ𝑇

Δ𝑟ℎ𝑜_𝑞Δ𝑇

Phase1: Training phase

Phase2: Test phase

実験結果• モデル計算とAI出力の比較• 分布はよく再現されているが極値の再現性が不十分
Total airdensityInternalenergy

Densityof watervapor

Input

Simulation Output

AI output

実験のまとめCorrelation between reference and AI output

slope

intercept

correlation coef.

air density

0.53847887

0.00017136

0.6194595

internal energy

0.58866578-0.00019053

0.6769882

water vapor

0.56042855

0.000008773

0.6494912• AIによるテスト計算ではそれらしい場は再現するが極値の再現性が不十分• 改良点は多々ある• テスト変数の選択（サブルーチンの入出力変数はIN:23, OUT:27, INOUT:11）• データのプリプロセス（０近傍の値が多いのでそちらに引きずられる）• 適切な学習アルゴリズムの採用（時空間構造を反映できるような）が、何はともあれカプラの機能としては目的を果たしたまとめと今後の展開• h3-Open-UTIL/MP• 汎用カップリングライブラリ• 異機種間連成• アンサンブル連成• PythonAPI• 今後の展開• 異機種間連成とPythonAPIについては実アプリに適用• アンサンブル連成の実アプリ適用を行う

22アンサンブル連成の実験デザイン• NICAMのデータ同化システムにアンサンブル連成を導入• 低解像度NICAM x N + 高解像度NICAM x 1• Z, P, T, VX, VY, VZ

remapping by the coupler

Nudging large-scale status
better reproductivity

Low-resolution model ensemble
23