Neurips 2022 Paper Pdebenchのコードリポジトリ:科学機械学習のための広範なベンチマーク
? SimTech Best Paper Award 2023 ?
Pdebenchは、挑戦的で現実的な身体的問題を含む、科学機械学習のための多様で包括的なベンチマークのセットを提供します。このリポジトリは、データセットを生成し、データリポジトリからデータセットをアップロードおよびダウンロードし、さまざまな機械学習モデルをベースラインとしてトレーニングおよび評価するために使用されるコードで構成されています。 Pdebenchは、既存のベンチマークよりもはるかに広い範囲のPDEを備えており、現実的で困難な問題(前方および逆の両方)、さまざまな初期条件と境界条件を含むより大きな使用可能なデータセット、およびPDEパラメーターが含まれます。さらに、Pdebenchはソースコードを拡張可能にするために作成され、SCIMLコミュニティからの積極的な参加を招待して、ベンチマークを改善および拡張します。
Makoto takamoto <[email protected], [email protected]>
、ティモシープラデティア<[email protected]>
、raphael leiteritz、danmackinlay、mathiani natiani、direk o。
また、データセットと前提条件の機械学習モデルも提供しています。
pdebenchデータセット:https://darus.uni-stuttgart.de/dataset.xhtml?persistentid=doi:10.18419/darus-2986
pdebench事前訓練モデル:https://darus.uni-stuttgart.de/dataset.xhtml?persistentid=doi:10.18419/darus-2987
ドイス
ローカル:
pip install --upgrade pip wheel
pip install .
Pypiから:
pip install pdebench
データ生成の依存関係を含めるには:
pip install " pdebench[datagen310] "
pip install " .[datagen310] " # locally
または
pip install " pdebench[datagen39] "
pip install " .[datagen39] " # locally
GPUサポートには、追加のプラットフォーム固有の指示があります。
Pytorchの場合、私たちがサポートする最新バージョンはv1.13.1以前のversions/#linux -cuda 11.7を参照してください。
私たちのテストでは、Pytorchの約6倍のシミュレーションの場合は、jax#pip-installation-gpu-cuda-installed-via-pipを参照してください。
Anacondaを使用して依存関係をインストールできる場合は、Mambaforgeを分布として使用することをお勧めします。それ以外の場合は、次のコマンドに対してConda-Forgeチャネルを有効にする必要があります。
新鮮な環境から始まります:
conda create -n myenv python=3.9
conda activate myenv
モデルトレーニングの依存関係をインストールします:
conda install deepxde hydra-core h5py -c conda-forge
ハードウェアの可用性によると、CUDAサポートを備えたPytorchをインストールしてください。
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 cpuonly -c pytorch
データ生成のオプションの依存関係:
conda install clawpack jax jaxlib python-dotenv
テストでは、PytorchをDeepxdeのバックエンドとして使用しました。これを有効にするには、ドキュメントに従ってください。
データ生成コードはdata_genに含まれています。
gen_diff_react.py
2D拡散対応データを生成します。gen_diff_sorp.py
1D拡散吸収データを生成します。gen_radial_dam_break.py
2D浅水データを生成します。gen_ns_incomp.py
2Dの非圧縮性不均一ナビエストークスデータを生成します。plot.py
生成されたデータをプロットします。uploader.py
生成されたデータをデータリポジトリにアップロードします。.env
は、生成されたデータをアップロードしてDataverse URLおよびAPIトークンを保存する環境データです。ファイル名は厳密に.env
である必要があることに注意してください(つまり、ファイル名からexample
を削除します)configs
ディレクトリには、シミュレーションの構成を保存するYAMLファイルが含まれています。シミュレーションの引数は問題固有であり、詳細な説明はシミュレーションスクリプトに記載されています。src
ディレクトリには、さまざまな問題のシミュレーションスクリプトが含まれています:2D Diffusion-Reactionのsim_diff_react-py
、1D Diffusion-Sorptingのsim_diff_sorp.py
、および浅い水方程式のswe
。データ生成コードは、data_gen_nleに含まれています。
utils.py
utilファイル、データ生成のためのファイル、主に境界条件と初期条件。
1D移流方程式トレーニングサンプルを生成するためのソースコードを備えたAdvectionEq
ディレクトリ
ソースコードを備えたBurgersEq
ディレクトリ1Dバーガー方程式トレーニングサンプルを生成する
圧縮可能なナビエストークス方程式トレーニングサンプルを生成するためのソースコードを備えたCompressibleFluid
ディレクトリ
ReactionDiffusionEq
ディレクトリ1D反応拡散方程式トレーニングサンプルを生成する(注:Darcyflowデータは、このフォルダーのrun_darcyflow2d.shによって生成できます。 )生成されたトレーニングサンプルを保存するディレクトリsave
トレーニングサンプルを生成するための典型的な例(1D移点方程式):( data_gen/data_gen_NLE/AdvectionEq/
)
python3 advection_multi_solution_Hydra.py +multi=beta1e0.yaml
各ディレクトリで実行されると想定されています。
他のPDEを生成するための例は、各PDEのディレクトリのrun_trainset.sh
で提供されます。 Hydraの構成ファイルは、各PDEのディレクトリのconfig
ディレクトリに保存されます。
1D移流/バーガー/反応拡散/2D Darcyflow/Compressible Navier-Stokes方程式データをNumpy配列として保存します。したがって、データローダーを介してそれらのデータを読み取るには、データ変換/マージを実行する必要があります。これはdata_gen/data_gen_NLE/config/config.yaml
data_gen_NLE/Data_Merge.py
を使用して実行できます。構成ファイルにパラメーターを適切に設定した後(PDESの名前、DIM:SPATIAL-DIMENSIONの数、BD:境界条件)、対応するHDF5ファイルは次のように取得できます。
python3 Data_Merge.py
このような構成varを.env
ファイルに配置することにより、このプロジェクトのデータロケーションのデフォルト値を設定できます。
WORKING_DIR=~/Data/Working
ARCHIVE_DATA_DIR=~/Data/Archive
example.env
に例があります。
ダウンロードスクリプトはdata_downloadで提供されます。データをダウンロードする2つのオプションがあります。
download_direct.py
(推奨)の使用download_easydataverse.py
を使用して(遅い可能性があり、エラー/問題に遭遇する可能性があります。したがって、推奨されません!)config
ディレクトリから構成ファイルを使用します。 DataSetの任意のファイルは、 args.filename
がargs.data_folder
にダウンロードされます。 この作業では、ベンチマークデータセット、つまりFNO、U-NET、およびPINNに対してトレーニングおよび評価される3つの異なるMLモデルを提供します。ベースラインモデルの実装のコードは、モデルに含まれています。
train_models_forward.py
は、モデルをトレーニングおよび評価する主なスクリプトです。入力引数に基づいてモデル固有のスクリプトを呼び出します。train_models_inverse.py
は、逆問題のモデルをトレーニングおよび評価する主なスクリプトです。入力引数に基づいてモデル固有のスクリプトを呼び出します。metrics.py
、私たちの論文で説明されているさまざまな評価メトリックに基づいて、訓練されたモデルを評価するスクリプトです。さらに、予測データとターゲットデータもプロットします。analyse_result_forward.py
、保存したピクルスファイルをMetrics Calculation ScriptからPandas DataFrame形式に変換し、CSVファイルとして保存するスクリプトです。さらに、異なるモデル間の結果を比較するためにバーチャートをプロットします。analyse_result_inverse.py
は、保存したピクルスファイルをMetrics Calculation ScriptからPandas DataFrame形式に変換し、CSVファイルとして保存するスクリプトです。このスクリプトは、逆の問題に使用されます。さらに、異なるモデル間の結果を比較するためにバーチャートをプロットします。fno
には、FNO実装のスクリプトが含まれています。これらは、FNOリポジトリから部分的に適合しています。unet
、U-NET実装のスクリプトが含まれています。これらは、u-netリポジトリから部分的に採用されています。pinn
は、PINN実装のスクリプトが含まれています。これらはDeepXDEライブラリを利用します。inverse
、勾配に基づいた逆モデルのモデルが含まれています。config
モデルトレーニング入力のyamlファイルが含まれています。さまざまな方程式のデフォルトテンプレートがARGSディレクトリに提供されています。ユーザーは、config.yamlファイルのargsキーワードにコピーして貼り付けるだけです。フォワードモデルトレーニングを実行する例はrun_forward_1d.shにあり、逆モデルトレーニングを実行する例はrun_inverse.shにあります。
Darusデータリポジトリを通じて、ペーパーで使用したベンチマークデータセットを提供します。データ生成の構成は、論文に記載されています。さらに、Pdebenchの前提型モデルDarusリポジトリからダウンロードすることもできます。事前に守られたモデルを使用するには、ユーザーはconfigファイルでocnion continue_training: True
を指定できます。
以下は、Pdebenchのディレクトリ構造の図です。
pdebench
|_? models
|_? pinn # Model: Physics-Informed Neural Network
|_? train.py
|_? utils.py
|_? pde_definitions.py
|_? fno # Model: Fourier Neural Operator
|_? train.py
|_? utils.py
|_? fno.py
|_? unet # Model: U-Net
|_? train.py
|_? utils.py
|_? unet.py
|_? inverse # Model: Gradient-Based Inverse Method
|_? train.py
|_? utils.py
|_? inverse.py
|_? config # Config: All config files reside here
|_? train_models_inverse.py
|_? run_forward_1D.sh
|_? analyse_result_inverse.py
|_? train_models_forward.py
|_? run_inverse.sh
|_? metrics.py
|_? analyse_result_forward.py
|_? data_download # Data: Scripts to download data from DaRUS
|_? config
|_? download_direct.py
|_? download_easydataverse.py
|_? visualize_pdes.py
|_? README.md
|_? download_metadata.csv
|_? data_gen # Data: Scripts to generate data
|_? configs
|_? data_gen_NLE
|_? src
|_? notebooks
|_? gen_diff_sorp.py
|_? plot.py
|_? example.env
|_? gen_ns_incomp.py
|_? gen_diff_react.py
|_? uploader.py
|_? gen_radial_dam_break.py
|_? __init__.py
調査でPDEBENCHデータセットやソースコードを使用する場合は、次の論文を引用してください。
@inproceedings{PDEBench2022,
author = {Takamoto, Makoto and Praditia, Timothy and Leiteritz, Raphael and MacKinlay, Dan and Alesiani, Francesco and Pflüger, Dirk and Niepert, Mathias},
title = {{PDEBench: An Extensive Benchmark for Scientific Machine Learning}},
year = {2022},
booktitle = {36th Conference on Neural Information Processing Systems (NeurIPS 2022) Track on Datasets and Benchmarks},
url = {https://arxiv.org/abs/2210.07182}
}
@data{darus-2986_2022,
author = {Takamoto, Makoto and Praditia, Timothy and Leiteritz, Raphael and MacKinlay, Dan and Alesiani, Francesco and Pflüger, Dirk and Niepert, Mathias},
publisher = {DaRUS},
title = {{PDEBench Datasets}},
year = {2022},
doi = {10.18419/darus-2986},
url = {https://doi.org/10.18419/darus-2986}
}
@article{cape-takamoto:2023,
author = {Makoto Takamoto and
Francesco Alesiani and
Mathias Niepert},
title = {Learning Neural {PDE} Solvers with Parameter-Guided Channel Attention},
journal = {CoRR},
volume = {abs/2304.14118},
year = {2023},
url = {https://doi.org/10.48550/arXiv.2304.14118},
doi = {10.48550/arXiv.2304.14118},
eprinttype = {arXiv},
eprint = {2304.14118},
}
@inproceedings{vcnef-vectorized-conditional-neural-fields-hagnberger:2024,
author = {Hagnberger, Jan and Kalimuthu, Marimuthu and Musekamp, Daniel and Niepert, Mathias},
title = {{Vectorized Conditional Neural Fields: A Framework for Solving Time-dependent Parametric Partial Differential Equations}},
year = {2024},
booktitle = {Proceedings of the 41st International Conference on Machine Learning (ICML 2024)}
}
@article{active-learn-neuralpde-benchmark-musekamp:2024,
author = {Daniel Musekamp and
Marimuthu Kalimuthu and
David Holzm{"{u}}ller and
Makoto Takamoto and
Mathias Niepert},
title = {Active Learning for Neural {PDE} Solvers},
journal = {CoRR},
volume = {abs/2408.01536},
year = {2024},
url = {https://doi.org/10.48550/arXiv.2408.01536},
doi = {10.48550/ARXIV.2408.01536},
eprinttype = {arXiv},
eprint = {2408.01536},
}
特に明記されている場合を除き、MITライセンス。 LICENSE.txt
ファイルを参照してください。