コンテンツにスキップ

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枚でわかる:何が起きているか

DoMINO onepager

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=200000stream_velocity=30stencil_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を採用)