More Related Content
More from Masashi Imano (9)
OpenFOAMソルバの実行時ベイズ最適化
- 2. 1 はじめに
• OpenFOAMの流体解析ソルバの計算時間は,主に線型ソルバが占める.
• 線型ソルバの計算時間は,線型ソルバの種類と前処理によって大きく変化する.
• 昨年のオープンCAEシンポジウム[1]では,ベイズ最適化アルゴリズムによるハイパーパ
ラメータ自動最適化フレームワークであるOptuna[2]を用い,ノードあたりのMPIプロセ
ス数と線形ソルバ設定をパラメータとして,非圧縮性の単相流および二相流の解析時間の
最適化を行なった.
• 結果として,少ない試行数で大変効率良く,線形ソルバ設定の最適化が行えた.
0 20 40 60 80 100
Trial No.
0
2
4
6
CPUTime[s]
Trial
Best
✓メッシュ生成に時間を要しない
✓構造格子のため,格子数変更が容易
✓圧力と速度のみ解くので,「圧力線形ソ
ルバの解析時間が支配的」という非圧縮性
東京大学Oakbridge-CX 8ノードでの24M格子チャネル流の計算時間最適化[1]
56回の試行で初期設定(56PPN,DIC-PCG)から約2.8倍高速化(48PPN,DIC-GAMG)
1
- 3. 2 予備計算の多数試行による最適化と実行時最適化
• 既報[1]の線形ソルバ設定の最適化では,初期の少ないステップ数の予備計算を繰り返し
試行する.
• 予備計算の多数試行による最適化
– 利点
∗ 同じ解析区間での計算時間が計測・比較できる.
– 欠点
∗ 解析が比較的短時間で終わる場合,最適化の試行に必要な時間の割合が大きい.
∗ 最適な線型ソルバ設定が,時間ステップの進行に応じて変化する可能性がある.
• 本計算の実行時最適化
– 利点
∗ 予備計算の必要が無く,全ての最適化試行が無駄にならない.
∗ 時間ステップの進行に応じた最適化が行える可能性がある.
– 欠点
∗ 線型ソルバが収束しないAggressiveな設定を試すには,リスタートが必要(要改造)
• 以上の背景から,本研究では,OpenFOAMソルバにおける線型ソルバの実行時最適化の
検討を行なった.
2
- 4. 3 ベイズ最適化とOptuna
• ベイズ最適化
– 計算コストのようなブラックボックス関数を効率的に最適化可能
– 観測された目的関数の値を用い,Gaussian Process(GP)により平均値と分散を推定
– 獲得関数(acquisition function)を算出し,最大の値を次の試行の候補とする
目的関数
獲得関数
Bayesian Optimization in AlohaGo[Chen 2018]
• Optuna[3, 2]
– Preferred Networks社が開発するベイズ最適化用Pythonライブラリ
– Hyperopt[4]同様,計算量オーダが低いTree-structured Parzen Estimator(TPE)を実装
– 動的なパラメータ空間を扱えるDefined-by-RunのAPIを最初に実装
∗ AMGの有無によりパラメータが変化するOpenFOAMの線型ソルバの最適化に有用
3
- 5. 4 計算条件
計算機 東京大学情報基盤センターOakbridge-CX [5]
(CPU: CascadeLake,ノードあたり56コア)
ソフトウェア OpenFOAM v2006 (PPCGやPPCRが実装済)
ベイズ最適化フレームワーク Optuna 2.3.0(最新版)
OpenFOAMの設定制御ライブラリ PyFoam 0.6.11
実行時の線型ソルバの設定更新 PyFoamでfvSolutoionを更新(*)
最小化する目的関数 1ステップの計算時間
• (*) 最 初 にPyFoamを 用 い て 以 下 の 設 定 を 行 い,fvSolutionの フ ァ イ ル の 更 新 に 応 じ て,
OpenFOAMのソルバが線型ソルバの設定を迅速に変更するようにしている.
system/controlDict
runTimeModifiable yes;
OptimisationSwitches {
fileModificationSkew 1;
maxFileModificationPolls 100;
}
4
- 7. 2. 線型ソルバ設定のパラメータ群を生成(確認・手動設定用にJSON形式で保存).
{"system/fvSolution": {
"solvers/UFinal/solver": [ UFinalの線型ソルバ設定
{"PBiCG":{"solvers/UFinal/preconditioner": ["DILU"]}},
{"PBiCGStab":{"solvers/UFinal/preconditioner": ["DILU"]}},
{"smoothSolver":{"solvers/UFinal/smoother":["GaussSeidel","symGaussSeidel"]}}],
"solversp/p/solver": [{"PCG": { pの線型ソルバ設定
"solvers/p/preconditioner": ["DIC","FDIC",{"": {
"solvers/p/preconditioner/preconditioner":["GAMG"],
"solvers/p/preconditioner/smoother":["DIC","DICGaussSeidel","FDIC","GaussSeidel","symGaussSeidel"],
"solvers/p/preconditioner/agglomerator":["faceAreaPair","algebraicPair"],
"solvers/p/preconditioner/cacheAgglomeration":["true","false"],
"solvers/p/preconditioner/scaleCorrection":["true","false"],
"solvers/p/preconditioner/nCellsInCoarsestLevel": [5,10,20,40,80,160,320]}}]}},
pFinalについてもpと同様に生成
6
- 8. 3. ベイズ最適化フレームワークのoptunaが,パラメータ群の中から線型ソルバ設定を提案.
4. OpenFOAMの設定制御ライブラリPyFoamを用いて,fvSolutoionを更新.
5. ソルバのログにおいて,線型ソルバ設定ファイルの再読み込みを確認後,1ステップの計
算時間を算出.
Re-reading object fvSolution from file "system/fvSolution" 線型ソルバ設定ファイルの再読み込み
Time = 0.016
更新後の線型ソルバによる解析
ExecutionTime = 3.15 s ClockTime = 5 s
Time = 0.018
更新後の線型ソルバによる解析
ExecutionTime = 3.25 s ClockTime = 5 s #1ステップの計算時間t=3.25-3.15=0.10
6. 1ステップの計算時間をoptunaに報告して3.に戻り,ベイズ最適化を進める.
Trial 0 finished with value: 0.1 and parameters: {'solvers/p/solver':0,'solvers/p/preconditioner':0,
'solvers/pFinal/solver':0, 'solvers/pFinal/preconditioner':0,
'solvers/UFinal/solver':0, 'solvers/UFinal/preconditioner':0}. Best is trial 0 with value: 0.1.
7
- 9. 6 検討ケース
ケース名 ベイズ最適化を行う線型ソルバの場
場の内容 チャネル流 ダムブレイク流
Case-0 なし なし なし
Case-1 時間ループ最終反復時圧力 pFinal p_rghFinal
Case-2 全ての圧力 p, pFinal p_rgh, p_rghFinal
Case-3 全ての圧力と速度 p, pFinal, UFinal なし(*)
• (*) momentumPredictor no;
8
- 10. 7 チャネル流の解析条件
レイノルズ数Reτ 110
主流方向 一定の圧力勾配
主流・スパン方向 周期境界
ソルバ pimpleFoam
乱流モデル 無し(laminar)
領域分割手法 scotch(周期境界面は同領域)
速度線型ソルバ初期値 DILU-PBiCG
圧力線型ソルバ初期値 DIC-PCG
圧力線形ソルバの収束条件 残差10−6
以下
格子数 約3M(240 × 130 × 96)
ノード数 8ノード
並列数 432 (54/ノード)
✓メッシュ生成に時間を要しない
✓構造格子のため,格子数変更が容易
✓圧力と速度のみ解くので,「圧力線形ソ
ルバの解析時間が支配的」という非圧縮性
流体解析の特性を素直に示す
9
- 11. 8 チャネル流の計算時間(解析開始後2.5秒後まで)
0
20
40
60
80
100
120
140
160
180
0 0.5 1 1.5 2 2.5
Executiontime[s]
Time [s]
Case-0
Case-1
Case-2
Case-3
← Case-0(最適化無)
← Case-1∼3(最適化有)
• 実行時に線型ソルバ設定のベイズ最適化を行うCase-1∼3では,解析初期にCase-0よりも
遅い線型ソルバ設定の試行が多く行われるため,最適化無しのCase-0よりも遅い.
• 約0.6秒後からはCase-0よりも速い線型ソルバ設定が多く試行されるようになる.
• 約1.4秒後以降はCase-0よりも速くなる
10
- 13. 10 チャネル流でのCase-3の線型ソルバ最適設定
初期値
p {
tolerance 1e-06;relTol 0.05;
solver PCG;
preconditioner DIC;}
pFinal {
tolerance 1e-06;relTol 0;
solver PCG;
preconditioner DIC;}
UFinal {
tolerance 1e-05;relTol 0;
solver PBiCG;
preconditioner DILU;}
⇒
最適設定
p {
tolerance 1e-06;relTol 0.05;
solver PPCR;
preconditioner DIC;}
pFinal {
tolerance 1e-06;relTol 0;
solver PPCR;
preconditioner FDIC;}
UFinal {
tolerance 1e-05;relTol 0;
solver PBiCG;
preconditioner DILU;}
• 圧力pとpFinalの線型ソルバが,PCGからPPCRに変更.
• 最終反復時の圧力pFinalの前処理が,DICからFDICに変更.
• 速度は変更無し.
12
- 17. 14 ダムブレイク流でのCase-2の線型ソルバ最適設定
初期値
p_rgh {
tolerance 1e-08;relTol 0.01;
solver GAMG;
smoother DIC;
cacheAgglomeration false;}
p_rghFinal {
tolerance 1e-08;relTol 0;
solver GAMG;
smoother DIC;
cacheAgglomeration false;}
⇒
最適設定
p_rgh {
tolerance 1e-08;relTol 0.01;
solver PPCR;
preconditioner FDIC;
p_rghFinal {
tolerance 1e-08;relTol 0;
solver PCG;
preconditioner {preconditioner GAMG;
smoother DIC;
agglomerator algebraicPair;
cacheAgglomeration false;
scaleCorrection true;
nCellsInCoarsestLevel 10;}}
16
- 18. 15 チュートリアルの実行時ベイズ最適化例(非多相流)
カテゴリ ソルバ ケース名 並列数 高速化率[%]
combustion fireFoam oppositeBurningPanels 6 -2.6
smallPoolFire3D 4 -6.0
reactingFoam chokedNozzle 3 16.4
compressible rhoPimpleAdiabaticFoam rutlandVortex2D 3 0.5
lagrangian MPPICFoam cyclone 12 7.8
incompressible pimpleFoam channel395 4 8.6
cylinder2D 8 0.3
decayIsoTurb 8 16.9
mixerVesselAMI2D-topologyChange 4 59.6
simpleFoam motorBike 6 2.5
• 並列計算かつ,計算時間が中程度(約5分間〜約24時間)のケースを対象にした.
• 線型ソルバの実行時最適化により,チュートリアルの設定より遅くなる場合もあるが,概
ね高速化される.
17
- 19. 16 チュートリアルの実行時ベイズ最適化例(多相流)
カテゴリ ソルバ ケース名 並列数 高速化率[%]
multiphase MPPICInterFoam twoPhasePachuka 4 0.2
cavitatingFoam throttle3D 4 21.4
compressibleInterIsoFoam depthCharge3D 4 10.4
interFoam waveMakerMultiPaddleFlap 2 1.4
waveMakerMultiPaddlePiston 2 50.0
interIsoFoam waveExampleStreamFunction 2 -5.0
damBreakWithObstacle 4 2.9
iobasin 8 -12.0
multiphaseEulerFoam damBreak4phaseFine 4 0.5
• 非多相流と同様に,実行時最適化により遅くなる場合もあるが,概ね高速化される.
• 実行時最適化により遅くなる原因の調査や,その対策は今後の課題である.
18
- 21. 18 今後の課題
0
200
400
600
800
1000
1200
1400
1600
1800
0 2 4 6 8 10 12 14 16 18 20
Terminate optimization at trial #50
Use best parameters
Executiontime[s]
Time [s]
Case-0
Case-1
Case-2
Case-3
Case-4
← Case-0(最適化無)
← Case-3(43%高速)
← Case-4(77%高速)
• 本検討では終始最適化を行なっているため,最後まで遅い設定の試行が避けられない.
• チャネル流では47回目の試行で最適設定が得られているので,例えば50回の試行で最適
化を止め,それ以降は最適設定を使用したCase-4では,Case-0より77%高速化された.
• 今後は,線型ソルバ設定ベイズ最適化の途中停止や再開始の手法について検討したい.
20
- 23. 参考文献
[1] 今野雅. パラメータ自動最適化フレームワークOptunaを用いた数値流体解析の計算コス
ト最適化. オープンCAEシンポジウム2019. オープンCAE学会, Dec 2019.
http://www.opencae.or.jp/activity/symposium/opencae_symposium2019/, (accessed
2020-11-19).
[2] Optuna. https://optuna.org/, (accessed 2020-11-19).
[3] Takuya Akiba, Shotaro Sano, Toshihiko Yanase, Takeru Ohta, and Masanori Koyama.
Optuna: A next-generation hyperparameter optimization framework. CoRR, Vol.
abs/1907.10902, , 2019.
[4] James Bergstra, Brent Komer, Chris Eliasmith, Dan Yamins, and David D Cox.
Hyperopt: a python library for model selection and hyperparameter optimization.
Computational Science Discovery, Vol. 8, No. 1, p. 014008, jul 2015.
[5] 東京大学情報基盤センター スーパーコンピューティング部門.
https://www.cc.u-tokyo.ac.jp/, (accessed 2020-11-19).
22