DoMINOで“外部空力(CFD)”を秒オーダーで試す(初心者向け)¶
結論(1分)
DoMINO(DoMINO-Automotive-Aero NIM)は、車体形状(STL)から 抗力/揚力 と 表面圧力分布を返す「CFDサロゲート(代理モデル)」です。
4GPUマシンでは、同時リクエスト(並列)を増やすことでスループットがほぼ比例して伸びます。
実測では、H100 NVL 4GPUで conc=1→9.16 req/min、conc=4→36.92 req/min(約4倍)、conc=8→55.49 req/min でした。
1) DoMINOとは(初心者向け)¶
CFD(流体解析)は本来、流体方程式(ナビエ–ストークス)を数値的に解くので、1ケースが重いです。
DoMINOはCFDの結果を大量に学習して、「形状 → 空力の結果」を高速に近似するモデル(サロゲート)です。
そのため、設計探索やスクリーニングを高速に回せます(最終確認は古典CFD、が現実的な運用)。
2) 1枚でわかる:何が起きているか¶

A) pressure_surface(表面圧力)とは?¶
車体表面が「どこで強く押されているか」を示す値です。
圧力の高低分布は、空気の当たり方や剥離(はくり)しやすい領域の“当たり”を教えてくれます。
B) drag/lift(抗力・揚力)と、なぜ v² っぽい?¶
直感的には「速度を上げるほど空気の勢い(動圧)が増える」ため、抵抗が増えやすいです。
実測でも v=20/30/40/50 m/s で drag/lift が大きく増え、v²スケールに近い挙動が確認できました。
C) 4GPUは“同時処理(並列)”で効く¶
単発レイテンシより、「同時に何件さばけるか(req/min)」がGPUサーバーの価値になります。
DoMINOはHTTP APIで呼べるので、クライアント並列で一気に効果が見えます。
3) 実測:A100x4 vs H100 NVL 4GPU(同一条件)¶
条件(両者同一)¶
- NIM:DoMINO-Automotive-Aero NIM(single instance / all-gpus)
- Endpoint:
/v1/infer/surface point_cloud_size=200000、stream_velocity=30、stencil_size=1- ベンチ:クライアント並列(conc=1→nreq=20、conc=4→nreq=80)
- 指標:throughput_req_per_min_by_wall(実時間ベース)を正とする
結果(req/min, wall-clock)¶
| Node | conc=1 | conc=4 | スケール(4/1) |
|---|---|---|---|
| A100x4 | 7.50 | 31.79 | 4.24× |
| H100 NVL 4GPU | 9.16 | 36.92 | 4.03× |
H100優位: - conc=1:9.16 / 7.50 = 1.22×(約+22%) - conc=4:36.92 / 31.79 = 1.16×(約+16%)
4) H100 NVL 4GPU:飽和点の目安(conc=8)¶
H100で conc=8 を1回追加で測定しました。
- conc=8:55.49 req/min(wall-clock)
- conc=4 → conc=8:+50%(36.92 → 55.49)
- conc=1 → conc=8:約6.06×(9.16 → 55.49)
目安:この条件では conc=4〜8 あたりが “スループットを伸ばしつつ待ち時間が破綻しにくい” 範囲になりやすい。
5) 4GPUが動いている証拠(dmon集計)¶
ベンチ中の nvidia-smi dmon を集計して、GPU0〜3が実際に動いていることを確認しました(conc=8)。
- GPU0: max_sm=68%, nonzero_samples=23/144
- GPU1: max_sm=67%, nonzero_samples=29/144
- GPU2: max_sm=68%, nonzero_samples=27/144
- GPU3: max_sm=66%, nonzero_samples=29/144
6) 実務での使い方(現実解)¶
- 探索・スクリーニング:DoMINO(高速)
- 最終確認:古典CFD(保証)
という二段構えが現実的です。
DoMINOで候補を絞り込んでから古典CFDに回すと、設計サイクル短縮に効きます。
7) 再現メモ(最小)¶
- NIM起動(Apptainer):
nim_start_allgpus.sh(NGC API keyは~/.config/ngc_api_keyから自動読込) - 推論(surface):
/v1/infer/surfaceに STL とpoint_cloud_size等をPOST - ベンチ:
bench_surface_parallel.sh PORT conc nreq(by_wallのreq/minを採用)