pdebench / PDEBench

PDEBench: An Extensive Benchmark for Scientific Machine Learning
Other
708 stars 82 forks source link
ai autoregressive-models benchmark deep-learning fluid-dynamics jax machine-learning navier-stokes-equations neural-networks neural-operators partial-differential-equations physics-informed-neural-networks pytorch scientific scientific-computing sciml simulation

PDEBench

The code repository for the NeurIPS 2022 paper PDEBench: An Extensive Benchmark for Scientific Machine Learning

:tada: SimTech Best Paper Award 2023 :confetti_ball:

PDEBench provides a diverse and comprehensive set of benchmarks for scientific machine learning, including challenging and realistic physical problems. This repository consists of the code used to generate the datasets, to upload and download the datasets from the data repository, as well as to train and evaluate different machine learning models as baselines. PDEBench features a much wider range of PDEs than existing benchmarks and includes realistic and difficult problems (both forward and inverse), larger ready-to-use datasets comprising various initial and boundary conditions, and PDE parameters. Moreover, PDEBench was created to make the source code extensible and we invite active participation from the SciML community to improve and extend the benchmark.

Visualizations of some PDE problems covered by the benchmark.

Created and maintained by Makoto Takamoto <makoto.takamoto@neclab.eu, takamtmk@gmail.com>, Timothy Praditia <timothy.praditia@iws.uni-stuttgart.de>, Raphael Leiteritz, Dan MacKinlay, Francesco Alesiani, Dirk PflΓΌger, and Mathias Niepert.


Datasets and Pretrained Models

We also provide datasets and pretrained machine learning models.

PDEBench Datasets: https://darus.uni-stuttgart.de/dataset.xhtml?persistentId=doi:10.18419/darus-2986

PDEBench Pre-Trained Models: https://darus.uni-stuttgart.de/dataset.xhtml?persistentId=doi:10.18419/darus-2987

DOIs

DOI:10.18419/darus-2986 DOI:10.18419/darus-2987

Installation

Using pip

Locally:

pip install --upgrade pip wheel
pip install .

From PyPI:

pip install pdebench

To include dependencies for data generation:

pip install "pdebench[datagen310]"
pip install ".[datagen310]" # locally

or

pip install "pdebench[datagen39]"
pip install ".[datagen39]" # locally

GPU Support

For GPU support there are additional platform-specific instructions:

For PyTorch, the latest version we support is v1.13.1 see previous-versions/#linux - CUDA 11.7.

For JAX, which is approximately 6 times faster for simulations than PyTorch in our tests, see jax#pip-installation-gpu-cuda-installed-via-pip

Installation using conda:

If you like you can also install dependencies using anaconda, we suggest to use mambaforge as a distribution. Otherwise you may have to enable the conda-forge channel for the following commands.

Starting from a fresh environment:

conda create -n myenv python=3.9
conda activate myenv

Install dependencies for model training:

conda install deepxde hydra-core h5py -c conda-forge

According to your hardware availability, either install PyTorch with CUDA support:

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

Optional dependencies for data generation:

conda install clawpack jax jaxlib python-dotenv

Configuring DeepXDE

In our tests we used PyTorch as backend for DeepXDE. Please follow the documentation to enable this.

Data Generation

The data generation codes are contained in data_gen:

Data Generation for 1D Advection/Burgers/Reaction-Diffusion/2D DarcyFlow/Compressible Navier-Stokes Equations

The data generation codes are contained in data_gen_NLE:

A typical example to generate training samples (1D Advection Equation): (in data_gen/data_gen_NLE/AdvectionEq/)

python3 advection_multi_solution_Hydra.py +multi=beta1e0.yaml

which is assumed to be performed in each directory.

Examples for generating other PDEs are provided in run_trainset.sh in each PDE's directories. The config files for Hydra are stored in config directory in each PDE's directory.

Data Transformaion and Merge into HDF5 format

1D Advection/Burgers/Reaction-Diffusion/2D DarcyFlow/Compressible Navier-Stokes Equations save data as a numpy array. So, to read those data via our dataloaders, the data transformation/merge should be performed. This can be done using data_gen_NLE/Data_Merge.py whose config file is located at: data_gen/data_gen_NLE/config/config.yaml. After properly setting the parameters in the config file (type: name of PDEs, dim: number of spatial-dimension, bd: boundary condition), the corresponding HDF5 file could be obtained as:

python3 Data_Merge.py

Configuration

You can set the default values for data locations for this project by putting config vars like this in the .env file:

WORKING_DIR=~/Data/Working
ARCHIVE_DATA_DIR=~/Data/Archive

There is an example in example.env.

Data Download

The download scripts are provided in data_download. There are two options to download data.

1) Using download_direct.py (recommended)

Baseline Models

In this work, we provide three different ML models to be trained and evaluated against the benchmark datasets, namely FNO, U-Net, and PINN. The codes for the baseline model implementations are contained in models:

An example to run the forward model training can be found in run_forward_1D.sh, and an example to run the inverse model training can be found in run_inverse.sh.

Short explanations on the config args

U-Net specific args:

FNO specific args:

INVERSE specific args:

Plotting specific args:

Datasets and pretrained models

We provide the benchmark datasets we used in the paper through our DaRUS data repository. The data generation configuration can be found in the paper. Additionally, the pretrained models are also available to be downloaded from PDEBench Pretrained Models DaRus repository. To use the pretrained models, users can specify the argument continue_training: True in the config file.


Directory Tour

Below is an illustration of the directory structure of 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

Publications & Citations

Please cite the following papers if you use PDEBench datasets and/or source code in your research.

PDEBench: An Extensive Benchmark for Scientific Machine Learning - NeurIPS'2022
``` @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} } ```
PDEBench Datasets - NeurIPS'2022
``` @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} } ```
Learning Neural PDE Solvers with Parameter-Guided Channel Attention - ICML'2023
``` @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}, } ```
Vectorized Conditional Neural Fields: A Framework for Solving Time-dependent Parametric Partial Differential Equations - ICLR-W'2024 & ICML'2024
``` @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)} } ```

Code contributors

License

MIT licensed, except where otherwise stated. See LICENSE.txt file.