NVIDIA Modulus on RescaleによるAIを活用した研究開発
概要
このチュートリアルでは、計算手法の検証のための一般的な物理問題である蓋駆動キャビティ問題を、Modulusを使って簡単に実行する方法を紹介します。この問題は従来のCFD手法でも解くことができますが、Modulusは研究開発やエンジニアリングのシナリオで初期設計の発見を加速することができるAI支援手法を使用している点が特徴的です。
NVIDIA Modulusは、支配偏微分方程式(PDE)の形で物理の力をデータと融合させ、ほぼリアルタイムに反応するパラメータ化されたサロゲートモデルを構築するニューラルネットワークフレームワークです。NVIDIA Modulusは、AI主導の物理問題、複雑な非線形、マルチフィジックスシステムのデジタルツインモデルの設計、パラメータ化されたジオメトリや逆問題を解決する作業をサポートすることができます。デジタルツインは、創薬のような分子レベルから気候変動のような地球規模の課題にまで及ぶ問題に取り組むための強力なツールとして浮上してきました。NVIDIA Modulusは、科学者に複雑で動的なシステムの高精度なデジタル複製を構築するためのフレームワークを提供し、広範な産業にわたる次世代のブレークスルーを可能にします。通常、大規模な計算資源を必要とするこれらの問題に対して、Rescaleは、お客様の作業に最適なハードウェアと、AIワークフローの構築に必要なすべての資産を一箇所で提供することができます。
Modulusは、Rescaleコマンドラインを使ったバッチジョブ、またはRescaleワークステーションを使った対話型のどちらでも簡単に実行することができます。以下のチュートリアルのステップを参照してください。
バッチジョブ(マルチノード)
サンプルジョブ(Lid Driven Cavity Flow)は、Import Job Setupボタンをクリックして直接アクセスして起動するか、下のGet Job Resultsボタンをクリックして結果を表示することができます。
このリンクからRescaleの他の使用例(Modulus V21.06使用)にアクセスできます。頭蓋内動脈瘤の血流、共役熱伝達のマルチフィジックスシミュレーション、パラメータ化したシミュレーションと設計最適化、3Dヒートシンク、その他多くの可能性を秘めた例です。
Rescaleでバッチジョブを実行する手順
入力ファイルの選択
ジョブファイルをアップロードします。この場合、Modulus python スクリプトです。これらは上で Import Job Set Up を選択したときに自動的に読み込まれます。
ソフトウェアを選択する
このチュートリアルでは、Singularity(Apptainer)コンテナを使用してModulusコンテナをロードし、1つのノードまたはマルチノードでバッチジョブを実行します。
一般的なバッチジョブの場合、事前に入力された cmd 行を直接修正することができます。このコマンドは、ハードウェア設定で選択されたすべての GPU を自動的に使用します。
mpirun -np $[$RESCALE_GPUS_PER_NODE*$RESCALE_NODES_PER_SLOT] -N $RESCALE_GPUS_PER_NODE
singularity exec --nv /usr/bin/Modulus_v21.06.sif python <your-code.py>
注記
- 上記のcmdの最後に–xla=Trueを追加すると、Accelerated Linear Algebra (XLA)となり、学習が加速されるようになります。
- 複数ノードのバッチジョブの場合、初回に「network_checkpoint」フォルダを検出できないことがあるので、最初に「network_checkpoint_XXX」というフォルダを作成することができます。
例(マルチノード)
mkdir network_checkpoint_ldc_2d
mpirun -np $[$RESCALE_GPUS_PER_NODE*$RESCALE_NODES_PER_SLOT] -N
$RESCALE_GPUS_PER_NODE singularity exec --nv /usr/bin/Modulus_v21.06.sif python
ldc_2d.py
ハードウェア
推奨されるRescaleコアタイプ。
- Ankerite, Celestine (NVIDIA A100)
- Dolomite, Aquamarine V3 (NVIDIA V100)
- Aquamarine V2 (NVIDIA P100)
出力はprocess_output.logを確認してください。
また、[Open in New Window] ボタンをクリックしてターミナルを開き、NVIDIA-smi を実行して GPU 使用率を監視することもできます。すべての結果ファイルにアクセスするには、cd ~/work/shared を実行します。
学習済みモデルを含むすべての結果ファイルにアクセスするには、次のコマンドを実行してSharedディレクトリに移動します。
$ cd ~/work/shared
このサロゲートモデルは、さまざまな境界条件下での蓋駆動キャビティ流れ場を問い合わせることができるようになりました。
このように、Rescale上のバッチジョブを通じて、わずか数回のマウスクリックで、マルチGPUやマルチノードのスケーリングが可能なModulusジョブを実行することができます。バッチジョブのワークフローでは、Jupyter NotebookとSSHコンソールを有効にしていますが、ジョブ実行中の可視化機能は限定的です。次章では、Modulusジョブを対話的に実行する手順を紹介します。
インタラクティブワークフロー(マルチノード)
サンプルジョブ(Lid Driven Cavity Flow)は、Import Job Setupボタンをクリックして直接アクセスして起動するか、下のGet Job Resultsボタンをクリックして結果を表示することができます。
End to End Desktopのジョブタイプを選択します。入力ファイル、ソフトウェアの選択、ハードウェアの設定は、バッチジョブのワークフローと同じです。
ジョブ実行後、上部のConnectボタンからターミナルを開き、デスクトップに入ることができる。
バッチジョブと同様に、Modulusシミュレーションを実行するためのMPIコマンドを以下に示します。
$ cd ~/work/shared
$ mpirun -np $[$RESCALE_GPUS_PER_NODE*$RESCALE_NODES_PER_SLOT] -N
$RESCALE_GPUS_PER_NODE singularity exec --nv /usr/bin/Modulus_v21.06.sif python
<your-code.py>
Jupyter notebook
新しい SSH ターミナルを開き、作業ディレクトリに cd して、Modulus コンテナを次のようにロードします。
$ cd ~/work/shared
$ singularity shell --nv /usr/bin/Modulus_v21.06.sif
を作成し、その中で対話型シェルを実行します。
$ jupyter notebook list
トークンとURLのリンクが表示されます。URLをコピーしてください。jupyter notebookを起動します。
$ jupyter notebook
DCVのWebブラウザで上記のURLを貼り付け、警告を受け入れる。
Tensorboard
また、Singularityコンテナ内のテンソルボードを次のように起動することもできる。
$ tensorboard --logdir=./
DCVのWebブラウザにhttps://localhost:6006/ を貼り付けると、コンバージェンスを確認することができます。
Paraview
https://catalog.ngc.nvidia.com/orgs/nvidia-hpcvis/containers/paraview-index
新しいターミナルを開き、以下の方法で画像を引き出します。
$ singularity pull docker://nvcr.io/nvidia-hpcvis/paraview-index:5.7.0-egl-pvw
結果データフォルダをボンディングして画像を起動します。例えば、~/work/shared byのディレクトリでparaviewを起動します。
$ singularity run --nv -B ${PWD}/network_checkpoint_ldc_2d:/data
paraview-index_5.7.0-egl-pvw.sif
ここでは、val_domain/results/ *.vtu形式ファイルを可視化します。DCVのWebブラウザでhttps://localhost:8080/、パラビューを開き、結果を確認します。
Rescale上でModulusを対話型ジョブとして実行する概要
インタラクティブジョブを通じて、ユーザーは1つのジョブ内で、コードの開発、ニューラルネットワークの学習プロセスの監視、後処理を行うことができます。インタラクティブジョブでは、Rescale上の最新のNVIDIA GPUハードウェアを搭載した仮想ワークステーション上でモデルの開発やプロトタイプ作成を行いながら、可視化ツールなどを利用することができます。これにより、オンプレミスではアクセスできないようなワークステーション上でも、モデルの開発やテストが可能になります。さらに、必要に応じて、Singularity(Apptainer)コンテナランタイムを使用して、インタラクティブなGUI環境を保ちながら、開発ワークフローを複数ノードにスケールアウトすることができます。
概要と追加資料
このチュートリアルがRescale上でのModulusの実行を始めるのにお役に立てれば幸いです。ご覧のように、Rescaleのバッチジョブを通じて、マルチノードGPUでModulusワークフローを実行することができます。また、Rescale End-to-End DesktopジョブでModulusと他のツールを対話的に実行し、複数のGPUを持つ仮想ワークステーションでコード開発、トレーニングのモニタリング、結果の後処理を行うこともできます。私たちのプラットフォームは、お客様が選択できる様々なGPUアーキテクチャと、AIワークフローを構築するために必要なすべての資産を提供します。
Modulus を使用して、迅速な設計探査スタディのためのサロゲートモデルを作成することができます。流体力学から構造力学、そして多分野にわたる最適化まで、PDE(偏微分方程式)の形で表現できるほぼすべての工学設計問題に適用することが可能です。詳細については、NVIDIA Modulus docsおよびNVIDIA GTC 2022におけるResaleのModulusプレゼンテーションをご参照ください。