🏔️

【シミュレーション待ち解消】AWS AIサロゲートモデルで製品設計プロセス変革

第1章: AI サロゲートモデルとは

従来のワークフローの課題

従来の製品設計プロセスは、「設計-シミュレーション」の反復的なワークフローでした。このサイクルは1回の実行に数日かかることがあります。エンジニアは設計を変更するたびに、完全な物理ベースシミュレーションを繰り返し、最適化のために何時間も待つ必要がありました
自動車の流体設計を例にイメージを示すと以下のようになります。

新しいワークフロー:訓練-予測

AWS公式ソリューションのMLSimKitは、機械学習を使用して従来のワークフローに代わる新しい選択肢を提供します。「訓練-予測」ワークフローでは、新しい設計に対して数分で予測を行うことができます。

機械学習モデルを作る際には、学習用のデータセット(従来のワークフローで得られた過去の入力-出力間の大量データ)と1回の学習時間を要しますが、一度モデルができれば新しいCAD図面に対する出力予測が数分でできます。これにより、迅速に設計の最適化ができます。

出力値は予測値であるため、最適形状候補を絞り込んだ上で、最終確認としてあらためて時間がかかるCAEシミュレーションを行う必要はありますが、従来のように何度も反復する必要はなくなります

このような、長時間・高コストな物理ベースシミュレーションの代理(Surrogate)としての機械学習予測モデルのことを、サロゲートモデルといいます。


第2章: AI Surrogate Models in Engineering on AWS (MLSimKit)とは

AWS Samples (github.com/aws-samples)に含まれるソリューションです。

このリポジトリについて:

  • GitHub: AI Surrogate Models in Engineering on AWS(MLSimKit)
  • ライセンス: Apache-2.0 license
  • 目的: エンジニアが機械学習モデルを用いて物理ベースのシミュレーションをほぼリアルタイムで予測できるようにするための Python ライブラリ

本記事ではMLSimKitの全体概要説明を行います。

後編のこちらの記事では、
https://zenn.dev/aws_japan/articles/cec70f9548900a
EC2上で、AWSのAIサロゲートモデルソリューション・MLSimKitを使用し、WindsorML車両空力データセット210ケースを対象にした流体シミュレーションKPI予測を行う詳細手順や結果について説明していますので、関心のある方はこちらもご参照ください。

試行結果
訓練時間: わずか14分(210ケースの学習)
予測時間: わずか18秒(70ケースのテスト評価)
予測精度: MAPE 1.87%(揚力係数Clの予測誤差。優秀)


第3章: 3つの予測タイプを理解する

MLSimKitは、3つの異なる予測タイプを提供します。それぞれが異なる粒度で物理現象を捉えます。

予測タイプ 予測対象例 出力形式 アーキテクチャ ワークフロー
KPI予測 統合性能指標(Cd, Cl, Cs, Cmy) 数値(スカラー) MeshGraphNets 4ステップ(マニフェスト作成 → 前処理 → 訓練 → テスト)
Surface予測 表面上の物理量(圧力、壁面せん断応力) 3Dメッシュ(.vtp) MeshGraphNets 4ステップ(マニフェスト作成 → 前処理 → 訓練 → テスト)
Slice予測 断面の流れ場(速度、圧力) 2D画像(.png) MeshGraphNets + AutoEncoder 5ステップ(前処理+マニフェスト作成 → 画像エンコーダー訓練 → メッシュ処理 → 予測モデル訓練 → テスト)

KPI予測(Key Performance Indicator Prediction)

この車全体の形状に対して、抗力係数はいくつか、といったスカラー値を予測してcsvで出力します。

Surface予測(Surface Variable Prediction)

この例では、車の表面の圧力分布を予測しています。(※入出力で図面の向きが逆転しています)

Slice予測(Slice Prediction)

Slice予測は、3D ジオメトリメッシュのスライス(ボリュームを切断した 2D 断面。上のイメージ参照)から、速度や圧力などのパラメータを予測するために使用されます。

スライス予測モデルで、断面の流れ方向平均速度を視覚化したイメージはこちらです(※上の断面切断のイメージ図面とは異なる図面です)。
3Dジオメトリ(車体)とボリューム(空間)を通る2D断面の流れを予測することで、断面における車体周辺の空間の流れを可視化することができます。

MGN(MeshGraphNets)について

MeshGraphNetはEncode-Process-Decode構造のニューラルネットワークです(クラスのdocstringより)。

入力データ

ノード特徴量(x): メッシュの各点の情報
エッジ特徴量(edge_attr): メッシュの接続関係の情報
エッジ接続情報(edge_index): どのノード同士が接続されているか

処理の流れ

  1. Encode(エンコード)
    • ノード特徴量とエッジ特徴量をMLP(多層パーセプトロン)で高次元ベクトルに変換

  2. Process(プロセッサー)
    • GraphNetBlock(隣の点から情報をもらって、自分の情報を更新する処理)を繰り返し実行
    • 各ステップでノードとエッジの特徴量を更新

  3. Decode(デコード)
    • KPI予測の場合を例とすると:
    • 全ノードの特徴量をpooling_type(mean/max)で集約
    • 線形層で最終的なKPI値を出力


第4章: 今日から使える実践環境 - データセットからワークフローまで

4-1. 3つの公開データセット

MLSimKitは、Hugging Faceでホストされている3つの公開データセットを提供しています。
ユーザーが自身のシミュレーションデータを用意しなくても、大規模なシミュレーション済みデータセットをダウンロードしてすぐAIサロゲートモデルを試すことができます。

データセット 総ケース数 チュートリアル用DL容量 特徴
AhmedML 500ケース 45GB 基礎的な車体形状
WindsorML 355ケース 170GB 実車に近い形状
DrivAerML 484ケース 354GB 詳細な自動車モデル

共通情報:

  • ライセンス: すべてCC BY-SA 4.0
  • 概要: 自動車空力モデリングのためのCFDシミュレーションコレクション

Hugging Face データセット:

AhmedML

データフォルダ内構成

コードを表示(クリックして展開)
run_1/
├── ahmed.stl
├── boundary_1.vtp
├── force_mom_1.csv
├── force_mom_varref_1.csv
├── geo_parameters_1.csv
├── images
│   ├── CpT
│   │   ├── run_*.png
│   ├── UxMean
│   │   ├── run_*.png
├── slices
│   ├── slice_*.vtp
└── volume_1.vtu

- **ahmed_<run #>.stl** - STL形式の表面ジオメトリ定義
- **boundary_<run #>.vtp** - 表面のシミュレーション結果
- **volume_<run #>.vtu** - 体積シミュレーション出力
- **force_mom_<run #>.csv** - 時間平均された力とモーメント係数
- **force_mom_varref_<run #>.csv** - ジオメトリごとの一意の参照面積を使用した時間平均された力とモーメント係数
- **images** - 体積を通るスライス画像を含むフォルダ
- **slices** - x、y、z軸を中心に回転したスライスvptファイルを含むフォルダ

WindsorML

データフォルダ内構成

コードを表示(クリックして展開)
run_0/
├── boundary_0.vtu
├── force_mom_0.csv
├── force_mom_varref_0.csv
├── geo_parameters_0.csv
├── images
│   ├── pressureavg
│   │   ├── *.png
│   ├── rstress_xx
│   │   ├── *.png
│   ├── rstress_yy
│   │   ├── *.png
│   ├── rstress_zz
│   │   ├── *.png
│   ├── velocityxavg
│   │   ├── *.png
│   └── windsor_0.png
├── volume_0.vtu
├── windsor_0.stl
└── windsor_0.stp

- **windsor_<run #>.stl** - STL形式の表面ジオメトリ定義
- **boundary_<run #>.vtu** - 表面のシミュレーション結果
- **volume_<run #>.vtu** - 体積シミュレーション出力
- **force_mom_<run #>.csv** - 時間平均された力とモーメント係数
- **force_mom_varref_<run #>.csv** - ジオメトリごとの一意の参照面積を使用した時間平均された力とモーメント係数
- **images/** - 体積を通るスライス画像を含むフォルダ
- **windsor_<run #>.png** - ウィンザーボディの画像(上記参照)

DrivAerML

データフォルダ内構成

コードを表示(クリックして展開)
run_1/
├── boundary_1.vtp
├── force_mom_1.csv
├── force_mom_constref_1.csv
├── geo_ref_i.csv
├── geo_parameters_1.csv
├── volume_1.vtu
├── drivaer_1.stl
├── images
│   ├── fig_run1_SRS_*_*Normal-*Normal-autocfd_1.png
│   ├── fig_run1_SRS_*_*Normal-*Normal_*.png
│   ├── fig_run1_SRS_iso-*.png
│   ├── fig_run1_SRS_surf-*.png
│   ├── fig_run1_SRS_*_*_grid.png
│   ├── fig_run1_evolution_*.png
│   └── fig_run1_solverStats_initialResidual.png
├── slices
│   ├── *Normal-autocfd_*.vtp
│   └── *Normal_*.vtp

- **drivaer_<run #>.stl** - STL形式の表面ジオメトリ定義
- **boundary_<run #>.vtp** - 表面のシミュレーション結果
- **volume_<run #>.vtu** - 体積シミュレーション出力
- **force_mom_<run #>.csv** - 変動する前面面積/ホイールベースを使用した時間平均された力とモーメント係数
- **force_mom_constref_<run #>.csv** - 一定の前面面積/ホイールベースを使用した時間平均された力とモーメント係数
- **geo_ref_<run #>.csv** - 各ジオメトリの参照値
- **geo_parameters_<run #>.csv** - 各ジオメトリの参照幾何学的値
- **images/** - X、Y、Z位置(mはマイナス、pはプラスを意味する)でのドメインのスライスと表面上のさまざまな流れ変数(例:CpMeanTrim、kresMeanTrim、magUMeanNormTrim、microDragMeanTrim)の画像を含むフォルダ。また、力係数の時間平均化の評価プロット(ツールMeanCalc経由)と収束を示す残差プロットも含まれています。
- **slices/** - X、Y、Z位置(mはマイナス、pはプラスを意味する)でのドメインの.vtpスライスを含むフォルダで、流れ場変数を捉えています。

4-2. 実行ワークフロー

4ステップワークフロー(KPI予測を例として説明)

1. マニフェストファイルの作成

マニフェストファイルは、データファイルへのパスと関連するKPI値をリストするJSON Lines(.jsonl)ファイルです。学習における入力(図面)と出力(KPI値)の関係性を定義します。

  • geometry_files: 一つの車体3D形状(CADで設計した図面)のSTLまたはVTPファイルパスのリスト
  • kpi: 車体形状に関連付けられたKPI値のリスト(シミュレーションで既に得られた値。抗力係数など。推論マニフェストではオプション)

マニフェストの例:

train_manifest.jsonl:

{"geometry_files": ["data/windsor/dataset/run_0/windsor_0.stl"], "kpi": [0.2818, 0.0008, 0.4882, -0.0729]}
{"geometry_files": ["data/windsor/dataset/run_1/windsor_1.stl"], "kpi": [0.2956, 0.0012, 0.5124, -0.0801]}
{"geometry_files": ["data/windsor/dataset/run_2/windsor_2.stl"], "kpi": [0.3102, -0.0005, 0.4756, -0.0688]}
...
2. Preprocess (前処理)

STLファイルをグラフ構造に変換し、学習用データを準備します。

mlsimkit-learn --config config.yaml kpi preprocess \
  --manifest-file train_manifest.jsonl \
  --output-dir preprocessed-data
3. Train (学習)

MeshGraphNetモデルを学習し、model-output/best_model.pth に保存します。

mlsimkit-learn --config config.yaml kpi train \
  --preprocessed-data-dir preprocessed-data \
  --output-dir model-output \
  --epochs 100
4. Test (推論)

新しい形状のKPI値を予測し、predictions/results.csv に出力します。

mlsimkit-learn --config config.yaml kpi test \
  --manifest-file test_manifest.jsonl \
  --model-path model-output/best_model.pth \
  --output-dir predictions

4-3. MLflowによる実験追跡

MLSimKitは、MLflowとの統合を提供しています。MLflowは、機械学習のライフサイクルを管理するためのオープンソースプラットフォームです。

MLflowを使用することで、以下が可能になります:

  • 実験の追跡
  • モデルのバージョン管理
  • ハイパーパラメータの記録
  • メトリクスの可視化

4-4. 実行コンピューティング環境

MLSimKitは、ローカルPCでの動作確認から、AWSクラウド上の仮想サーバー:EC2での実用的なモデル構築まで、幅広い環境に対応しています。

システム要件

必須:
• Python 3.9以上、3.13未満
• pip(Pythonパッケージマネージャー)

動作確認済み環境:
• Ubuntu 22.04 + CUDA 12.1

その他のOS:
• macOS、Windows: 公式テストはされていませんが、OS固有のコードや依存関係がないため動作する可能性があります(筆者はローカル環境のmacOSで動作しました)

ローカル環境(動作確認用)

MLSimKitには、数分で動作確認できる超小規模サンプルデータセットが含まれています。GPUなしのローカルPCでも実行可能です。

サンプルデータセットは、KPI予測の場合で 7ケース、ファイルサイズは数MBです。
前処理、学習、予測も数十秒で終わるレベルです。
ただしサンプル数が少ないため、実用的な精度は出ません。

用途:
• ✅ MLSimKitの動作確認
• ✅ コマンドの使い方を学習
• ✅ 出力ファイル形式の確認
• ❌ 実用的な予測モデルの構築

EC2環境(実用向け)

実用的な精度の予測モデルを構築するには、GPU搭載のEC2インスタンスが推奨されます。MLSimKitのチュートリアルでは、AWSのg5インスタンスファミリーを推奨しています。

推奨環境
AMI:
• **AWS Deep Learning Base GPU AMI (Ubuntu 22.04)**
• CUDAとNVIDIAがプリインストール済み
シングルGPU: g5.xlarge / g5.2xlarge

MLSimKitチュートリアルの完了に適したインスタンスです。ワークフローに慣れるために推奨されます。

g5.2xlargeスペック:
• GPU: NVIDIA A10G × 1(24GB VRAM)
• vCPU: 8コア
• メモリ: 32GB
• コスト: $1.212/時間(us-east-1)
マルチGPU: g5.12xlarge / g5.48xlarge

ワークフローに慣れた後、DrivAerMLなどのより大きな実世界サイズのデータセットで訓練する場合に、マルチGPUを使用すると訓練時間が大幅に短縮されます。

g5.48xlargeスペック:
• GPU: NVIDIA A10G × 8(192GB VRAM合計)
• vCPU: 192コア
• メモリ: 768GB
• コスト: $16.288/時間(us-east-1)

まとめ

本記事では、AWSのAIサロゲートモデルソリューション・MLSimKitの概要説明を行いました。

従来、1つの車両形状の空力性能を評価するには数時間のCFDシミュレーションが必要でしたが、AIサロゲートモデルを使うことで、新しい車両形状の空力性能を短時間で高精度に予測できるようになり、設計の初期段階で多数の形状案を素早く低コストで評価することが可能になります。

  • 短時間で高精度」の定量測定について

EC2上で、MLSimKitを使用し、WindsorML車両空力データセット210ケースを対象にした流体シミュレーションKPI予測を行った結果は以下の通りでした。

訓練時間: わずか14分(210ケースの学習)
予測時間: わずか18秒(70ケースのテスト評価)
予測精度: MAPE 1.87%(揚力係数Clの予測誤差。優秀)

詳細についてはこちらの後半記事をご参照ください。
https://zenn.dev/aws_japan/articles/cec70f9548900a


アマゾン ウェブ サービス ジャパン (有志)

Discussion