Репозиторий кода для Neurips 2022 Paper Pdebench: обширный эталон для научного машинного обучения
? Simtech Best Paper Award 2023 ?
Pdebench предоставляет разнообразный и всеобъемлющий набор критериев для научного машинного обучения, включая сложные и реалистичные физические проблемы. Этот репозиторий состоит из кода, используемого для генерации наборов данных, для загрузки и загрузки наборов данных из репозитория данных, а также для обучения и оценки различных моделей машинного обучения как базовые. Pdebench имеет гораздо более широкий диапазон PDE, чем существующие тесты, и включает в себя реалистичные и сложные проблемы (как вперед, так и обратно), большие наборы готовых к использованию, включающие различные начальные и граничные условия, и параметры PDE. Кроме того, PDEBENCH был создан для того, чтобы сделать исходный код расширяемым, и мы приглашаем активное участие сообщества SCIML для улучшения и расширения эталона.
Создано и поддерживается Makoto Takamoto <[email protected], [email protected]>
, Timothy Praditia <[email protected]>
, Raphael Leiteritz, Dan Mackinlay, Francesco Alesiani, Dir
Мы также предоставляем наборы данных и модели машинного обучения.
Наборы данных 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, см. Предыдущие -версии/#linux - cuda 11.7.
Для JAX, который примерно в 6 раз быстрее для моделирования, чем Pytorch в наших тестах, см. Jax#PIP-Installation-GPU-CUDA-Installed-Via-PIP
Если вам нравится, вы также можете установить зависимости, используя Anaconda, мы предлагаем использовать Mambaborge в качестве распределения. В противном случае вам, возможно, придется включить канал Conda-Forge для следующих команд.
Начиная с свежей среды:
conda create -n myenv python=3.9
conda activate myenv
Установите зависимости для обучения модели:
conda install deepxde hydra-core h5py -c conda-forge
Согласно вашей доступности аппаратного обеспечения, либо установите Pytorch с поддержкой CUDA:
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 несжимаемых неоднородных данных Navier-Stokes.plot.py
, чтобы построить сгенерированные данные.uploader.py
для загрузки сгенерированных данных в репозиторий данных..env
- это данные среды для хранения DataRess DataRess URL и токена API для загрузки сгенерированных данных. Обратите внимание, что имя файла должно быть строго .env
(то есть удалить example
из имени файла)configs
содержит файлы YAML, хранящие конфигурацию для моделирования. Аргументы для симуляции являются конкретными проблемами, а подробное объяснение можно найти в сценариях моделирования.src
содержит сценарии моделирования для различных задач: sim_diff_react-py
для 2D-диффузионной реакции, sim_diff_sorp.py
для 1D-диффузионной сорбции и swe
для уравнения с мелкой водой.Коды генерации данных содержатся в data_gen_nle:
utils.py
UTIL FILE для генерации данных, в основном граничных условий и начальных условий.
Справочник AdvectionEq
с исходными кодами для генерации образцов обучения уравнения 1D адвекции
Справочник 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 представлены в run_trainset.sh
в каждом КПД. Файлы конфигурации для HYDRA хранятся в каталоге config
в каждом каталоге PDE.
1D Advection/Burgers/Реакция-диффузия/2D Darcyflow/сжатые уравнения Navier-Stokes Сохраняют данные в виде массива Numpy. Таким образом, чтобы прочитать эти данные через наши DataLoaders, должно быть выполнено преобразование/слияние данных. Это можно сделать с помощью data_gen_NLE/Data_Merge.py
чей файл конфигурации находится по адресу: data_gen/data_gen_NLE/config/config.yaml
. После правильного настройки параметров в файле конфигурации (тип: имя PDES, DIM: количество пространственного измерения, BD: граничное условие), соответствующий файл HDF5 может быть получен как:
python3 Data_Merge.py
Вы можете установить значения по умолчанию для местоположений данных для этого проекта, поместив такие конфигурации в файле .env
:
WORKING_DIR=~/Data/Working
ARCHIVE_DATA_DIR=~/Data/Archive
Есть пример в example.env
.
Сценарии загрузки представлены в Data_Download. Есть два варианта загрузки данных.
download_direct.py
( рекомендуется )download_easydataverse.py
(может быть медленным, и вы можете столкнуться с ошибками/проблемами; следовательно, не рекомендуется!)config
, который содержит файлы YAML, хранящие конфигурацию. Любые файлы в соответствующем наборе данных args.filename
будут загружены в args.data_folder
. В этой работе мы предоставляем три различных моделя ML, которые будут подготовлены и оценены по сравнению с эталонными наборами данных, а именно FNO, U-NET и PINN. Коды для реализаций базовой модели содержатся в моделях:
train_models_forward.py
- это основной сценарий для обучения и оценки модели. Он приведет к сценарию для конкретного модели на основе входного аргумента.train_models_inverse.py
- это основной сценарий для обучения и оценки модели для обратных задач. Он приведет к сценарию для конкретного модели на основе входного аргумента.metrics.py
- это сценарий для оценки обученных моделей на основе различных показателей оценки, описанных в нашей статье. Кроме того, он также представляет прогнозирование и целевые данные.analyse_result_forward.py
- это скрипт для преобразования сохраненного файла Pickle из сценария расчета метрик в формат DataFrame Pandas и сохранение его в виде файла CSV. Кроме того, он также представляет планку для сравнения результатов между различными моделями.analyse_result_inverse.py
- это скрипт для преобразования сохраненного файла Pickle из сценария расчета метрик в формат DataFrame Pandas и сохранение его в виде файла CSV. Этот сценарий используется для обратных проблем. Кроме того, он также представляет планку для сравнения результатов между различными моделями.fno
содержит сценарии реализации FNO. Они частично адаптированы из репозитория FNO.unet
содержит сценарии реализации U-Net. Они частично адаптированы из репозитория U-Net.pinn
содержит сценарии реализации PINN. Они используют библиотеку DeepXDE.inverse
содержит модель для обратной модели на основе градиента.config
содержит файлы YAML для ввода обучения модели. Шаблоны по умолчанию для разных уравнений представлены в каталоге ARGS. Пользователю просто нужно скопировать и вставить их в ключевое слово args в файле config.yaml.Пример для запуска обучения вперед модели можно найти в RUN_FORWARD_1D.SH, и пример для выполнения обратной модели подготовки можно найти в RUN_INVERN.SH.
Мы предоставляем контрольные наборы данных, которые мы использовали в статье через наш репозиторий данных Darus. Конфигурацию генерации данных можно найти в статье. Кроме того, предварительные модели также доступны для загрузки из Pdebench Pretrend Proserity Darus Repository. Для использования предварительно проведенных моделей пользователи могут указать аргумент 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
.