Das Code -Repository für die Neurips 2022 Paper Pdebch: Ein umfangreicher Benchmark für wissenschaftliches maschinelles Lernen
? Simtech Best Paper Award 2023 ?
Pdebch bietet eine vielfältige und umfassende Reihe von Benchmarks für wissenschaftliches maschinelles Lernen, einschließlich herausfordernder und realistischer körperlicher Probleme. Dieses Repository besteht aus dem Code, mit dem die Datensätze generiert, die Datensätze aus dem Datenrepository hochgeladen und heruntergeladen werden können, sowie verschiedene maschinelle Lernmodelle als Baselines. Pdebch verfügt über eine viel größere Auswahl an PDEs als vorhandene Benchmarks und umfasst realistische und schwierige Probleme (sowohl vorwärts als auch inverse), größere Datensätze, die verschiedene Anfangs- und Randbedingungen sowie PDE-Parameter umfassen. Darüber hinaus wurde Pdebch erstellt, um den Quellcode auszudehnen zu machen, und wir laden eine aktive Teilnahme der Sciml -Community ein, den Benchmark zu verbessern und zu erweitern.
Created and maintained by Makoto Takamoto <[email protected], [email protected]>
, Timothy Praditia <[email protected]>
, Raphael Leiteritz, Dan MacKinlay, Francesco Alesiani, Dirk Pflüger, and Mathias Niepert.
Wir bieten auch Datensätze und vorbereitete Modelle für maschinelles Lernen.
PDEBch-Datensätze: https://darus.uni-stuttgart.de/dataset.xhtml?persistentide=doi:10.18419/darus-2986
PDEBench PreAned Models: https://darus.uni-stuttgart.de/dataset.xhtml?persistid=doi:10.18419/darus-2987
Dois
Lokal:
pip install --upgrade pip wheel
pip install .
Von pypi:
pip install pdebench
Abhängigkeiten für die Datenerzeugung einbeziehen:
pip install " pdebench[datagen310] "
pip install " .[datagen310] " # locally
oder
pip install " pdebench[datagen39] "
pip install " .[datagen39] " # locally
Für die GPU-Unterstützung gibt es zusätzliche plattformspezifische Anweisungen:
Für Pytorch ist die neueste Version, die wir unterstützen, v1.13.1 Siehe vorherige Versionen/#Linux - CUDA 11.7.
Für JAX, der für Simulationen ungefähr 6-mal schneller ist als bei Pytorch in unseren Tests
Wenn Sie mögen, können Sie auch Abhängigkeiten mit Anaconda installieren, empfehlen wir, Mambaforge als Verteilung zu verwenden. Andernfalls müssen Sie möglicherweise den Conda-Forge-Kanal für die folgenden Befehle aktivieren .
Ausgehend von einer frischen Umgebung:
conda create -n myenv python=3.9
conda activate myenv
Installieren Sie Abhängigkeiten für das Modelltraining:
conda install deepxde hydra-core h5py -c conda-forge
Entsprechend Ihrer Hardwareverfügbarkeit installieren Sie entweder Pytorch mit CUDA -Unterstützung:
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
Optionale Abhängigkeiten für die Datenerzeugung:
conda install clawpack jax jaxlib python-dotenv
In unseren Tests haben wir Pytorch als Backend für DeepXde verwendet. Bitte befolgen Sie die Dokumentation, um dies zu aktivieren.
Die Datenerzeugungscodes sind in Data_Gen enthalten:
gen_diff_react.py
Um die 2D-Diffusionsreaktionsdaten zu generieren.gen_diff_sorp.py
Um die 1D-Diffusionsorptionsdaten zu generieren.gen_radial_dam_break.py
Um die 2D-Sachwasserdaten zu generieren.gen_ns_incomp.py
um die inkompressiblen 2D-inhomogenen Navier-Stokes-Daten zu generieren.plot.py
um die generierten Daten zu zeichnen.uploader.py
, um die generierten Daten in das Datenrepository hochzuladen..env
sind die Umgebungsdaten, um Dataverse -URL und API -Token zu speichern, um die generierten Daten hochzuladen. Beachten Sie, dass der Dateiname ausschließlich .env
sein sollte (dh das example
aus dem Dateinamen entfernen).configs
enthält die YAML -Dateien, die die Konfiguration für die Simulation speichern. Argumente für die Simulation sind problemspezifische und detaillierte Erläuterungen finden Sie in den Simulationsskripten.src
Verzeichnis enthält die Simulationsskripte für unterschiedliche Probleme: sim_diff_react-py
für 2D-Diffusionsreaktion, sim_diff_sorp.py
für 1D-Diffusionsorption und swe
für die Flachwassergleichung.Die Datenerzeugungscodes sind in data_gen_nle enthalten:
utils.py
Util -Datei für die Datenerzeugung, hauptsächlich Randbedingungen und Anfangsbedingungen.
AdvectionEq
-Verzeichnis mit den Quellcodes, um 1D -Proben der Advection -Gleichung zu generieren
BurgersEq
-Verzeichnis mit den Quellcodes, um 1D Burgers Gleichungstraining -Proben zu generieren
CompressibleFluid
-Verzeichnis mit den Quellcodes, um kompressible Navier-Stokes-Gleichungs-Trainingsproben zu erzeugen
ReactionDiffusionEq
-Verzeichnis mit den Quellcodes zur Generierung von 1D-Reaktions-Diffusion-Gleichungstraining-Proben ( Hinweis: Darcyflow-Daten können in diesem Ordner durch run_darcyflow2d.sh generiert werden. ) Verzeichnis save
um die generierten Trainingsmuster zu speichern
Ein typisches Beispiel zum Generieren von Trainingsmuster (1d Advection -Gleichung): (in data_gen/data_gen_NLE/AdvectionEq/
)
python3 advection_multi_solution_Hydra.py +multi=beta1e0.yaml
Es wird angenommen, dass in jedem Verzeichnis ausgeführt wird.
Beispiele für die Erzeugung anderer PDEs sind in run_trainset.sh
in den Verzeichnissen jedes PDE bereitgestellt. Die Konfigurationsdateien für HYDRA werden im Verzeichnis config
in jedem PDE -Verzeichnis gespeichert.
1d Advection/Burgers/Reaktionsdiffusion/2d Darcyflow/kompressible Navier-Stokes-Gleichungen speichern Daten als numpy Array. Um diese Daten über unsere DataLoader zu lesen, sollte die Datenumwandlung/-verarbeitung durchgeführt werden. Dies kann mit data_gen_NLE/Data_Merge.py
erfolgen, deren Konfigurationsdatei sich unter: data_gen/data_gen_NLE/config/config.yaml
befindet. Nachdem die Parameter in der Konfigurationsdatei ordnungsgemäß eingestellt wurden (Typ: Name von PDEs, Dim: Anzahl der räumlichen Dimensionen, BD: Randbedingung), konnte die entsprechende HDF5-Datei als:
python3 Data_Merge.py
Sie können die Standardwerte für Datenorte für dieses Projekt festlegen, indem Sie Konfigurationsvars wie diese in der Datei .env
einfügen:
WORKING_DIR=~/Data/Working
ARCHIVE_DATA_DIR=~/Data/Archive
In example.env
gibt es ein Beispiel.
Die Download -Skripte sind in Data_download bereitgestellt. Es gibt zwei Optionen zum Herunterladen von Daten.
download_direct.py
( empfohlen )download_easydataverse.py
(könnte langsam sein und Sie können Fehler/Probleme aufnehmen; daher nicht empfohlen!)config
, das die YAML -Dateien enthält, die die Konfiguration speichern. Alle Dateien im Dataset -Matching args.filename
werden in args.data_folder
heruntergeladen. In dieser Arbeit stellen wir drei verschiedene ML-Modelle zur Verfügung, die an den Benchmark-Datensätzen trainiert und bewertet werden sollen, nämlich FNO, U-NET und Pinn. Die Codes für die Basismodellimplementierungen sind in Modellen enthalten:
train_models_forward.py
ist das Hauptskript, um das Modell zu trainieren und zu bewerten. Es wird das modellspezifische Skript basierend auf dem Eingabeargument aufrufen.train_models_inverse.py
ist das Hauptskript, um das Modell für umgekehrte Probleme zu trainieren und zu bewerten. Es wird das modellspezifische Skript basierend auf dem Eingabeargument aufrufen.metrics.py
ist das Skript zur Bewertung der geschulten Modelle basierend auf verschiedenen in unserem Artikel beschriebenen Bewertungsmetriken. Darüber hinaus plant es auch die Vorhersage- und Zieldaten.analyse_result_forward.py
ist das Skript zum Umwandeln der gespeicherten Pickle -Datei aus dem Metrikenberechnungskript in das Pandas -Datenfreame -Format und speichern sie als CSV -Datei. Darüber hinaus plant es auch ein Balkendiagramm, um die Ergebnisse zwischen verschiedenen Modellen zu vergleichen.analyse_result_inverse.py
ist das Skript zum Umwandeln der gespeicherten Pickle -Datei aus dem Metrics -Berechnungskript in das Pandas -Datenfreame -Format und speichern sie als CSV -Datei. Dieses Skript wird für die inversen Probleme verwendet. Darüber hinaus plant es auch ein Balkendiagramm, um die Ergebnisse zwischen verschiedenen Modellen zu vergleichen.fno
enthält die Skripte der FNO -Implementierung. Diese sind teilweise aus dem FNO -Repository angepasst.unet
enthält die Skripte der U-NET-Implementierung. Diese sind teilweise aus dem U-Net-Repository angepasst.pinn
enthält die Skripte der Pinn -Implementierung. Diese nutzen die DeepXDE -Bibliothek.inverse
enthält das Modell für das inverse Modell basierend auf Gradienten.config
enthält die YAML -Dateien für die Modelltrainingseingabe. Die Standardvorlagen für verschiedene Gleichungen sind im Args -Verzeichnis bereitgestellt. Der Benutzer muss sie nur kopieren und in das Keyword von Args in der Datei config.yaml einfügen.Ein Beispiel zum Ausführen des Vorwärtsmodelltrainings finden Sie in run_forward_1d.sh, und ein Beispiel zum Ausführen des inversen Modelltrainings finden Sie in run_inverse.sh.
Wir bieten die Benchmark -Datensätze, die wir im Papier über unser Darus -Datenrepository verwendet haben. Die Datenerzeugungskonfiguration finden Sie im Papier. Darüber hinaus können die vorbereiteten Modelle auch von PDEBch PretRainained Models Darus Repository heruntergeladen werden. Um die vorbereiteten Modelle zu verwenden, können Benutzer das Argument continue_training: True
in der Konfigurationsdatei angeben.
Unten ist eine Darstellung der Verzeichnisstruktur von Pdebch.
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
Bitte zitieren Sie die folgenden Arbeiten, wenn Sie PDEBch -Datensätze und/oder Quellcode in Ihrer Forschung verwenden.
@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 lizenziert, außer wenn sonst angegeben. Siehe LICENSE.txt
.