Neurips 2022 종이 Pdebench의 코드 저장소 : 과학 기계 학습을위한 광범위한 벤치 마크
? Simtech Best Paper Award 2023 ?
Pdebench는 도전적이고 현실적인 신체적 문제를 포함하여 과학 기계 학습을위한 다양하고 포괄적 인 벤치 마크를 제공합니다. 이 저장소는 데이터 세트를 생성하고 데이터 저장소에서 데이터 세트를 업로드하고 다운로드하는 데 사용되는 코드로 구성됩니다. PDEBENCH는 기존 벤치 마크보다 훨씬 더 넓은 범위의 PDE를 특징으로하며 다양한 초기 및 경계 조건을 포함하는 더 큰 즉시 사용 가능한 데이터 세트 및 PDE 매개 변수를 포함하는 현실적이고 어려운 문제 (전방 및 역수)를 포함합니다. 또한, PDEBENCH는 소스 코드를 확장하기 위해 만들어졌으며 SCIML 커뮤니티의 적극적인 참여를 초대하여 벤치 마크를 개선하고 확장합니다.
Makoto Takamoto <[email protected], [email protected]>
, Timothy Praditia <[email protected]>
, Raphael Leiteritz, Mathinlay, Francesco Alesoi, Dirkfflüer, and and and and and and and and and and and-stuttgart.de.
우리는 또한 데이터 세트와 미리 관리 된 기계 학습 모델을 제공합니다.
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
dois
장소 상에서:
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을 참조하십시오.
테스트에서 Pytorch보다 시뮬레이션에 대해 약 6 배 빠른 JAX의 경우 JAX#PIP- 설치 GPU-CUDA 설치 -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
.gen_diff_sorp.py
1D 확산-흡수 데이터를 생성합니다.gen_radial_dam_break.py
2D 얕은 물 데이터를 생성합니다.gen_ns_incomp.py
2D 비 압축 불균일 한 Navier-Stokes 데이터를 생성합니다.plot.py
생성 된 데이터를 플롯하려면.uploader.py
생성 된 데이터를 데이터 저장소에 업로드하려면..env
생성 된 데이터를 업로드하기 위해 Dataverse URL 및 API 토큰을 저장하는 환경 데이터입니다. 파일 이름은 엄격하게 .env
여야합니다 (즉, 파일 이름에서 example
제거).configs
디렉토리에는 시뮬레이션 구성을 저장하는 Yaml 파일이 포함되어 있습니다. 시뮬레이션에 대한 인수는 문제 별이며 자세한 설명은 시뮬레이션 스크립트에서 찾을 수 있습니다.src
디렉토리에는 다양한 문제에 대한 시뮬레이션 스크립트가 포함되어 있습니다. sim_diff_react-py
용 SIM_DIFF_REACT-PY 용 2D 확산-반응, sim_diff_sorp.py
용 1D 확산-흡착 및 얕은 수 방정식의 swe
.데이터 생성 코드는 data_gen_nle에 포함되어 있습니다.
utils.py
데이터 생성, 주로 경계 조건 및 초기 조건을위한 파일.
1D 대류 방정식 훈련 샘플을 생성하기위한 소스 코드가있는 AdvectionEq
디렉토리
1D 버거 방정식 훈련 샘플을 생성하기위한 소스 코드가 장착 된 BurgersEq
디렉토리
압축성 Navier-Stokes 방정식 훈련 샘플을 생성하기위한 소스 코드가 장착 된 CompressibleFluid
디렉토리
ReactionDiffusionEq
디렉토리 ( 참고 :이 폴더에서 run_darcyflow2d.sh에 의해 darcyflow 데이터를 생성 할 수 있습니다. ) 디렉토리 save
생성 된 교육 샘플을 저장하십시오
훈련 샘플을 생성하기위한 전형적인 예 (1d Averection Dequation) : ( 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 Array로 저장합니다. 따라서 데이터 로더를 통해 해당 데이터를 읽으려면 데이터 변환/병합을 수행해야합니다. 구성 파일이있는 data_gen_NLE/Data_Merge.py
data_gen/data_gen_NLE/config/config.yaml
하여 수행 할 수 있습니다. 구성 파일에서 매개 변수를 올바르게 설정 한 후 (유형 : PDES 이름, DIM : 공간 차원 수, BD : 경계 조건) 해당 HDF5 파일을 다음과 같이 얻을 수 있습니다.
python3 Data_Merge.py
.env
파일에 구성 Vars를 넣어이 프로젝트의 데이터 위치의 기본값을 설정할 수 있습니다.
WORKING_DIR=~/Data/Working
ARCHIVE_DATA_DIR=~/Data/Archive
example.env
에 예가 있습니다.
다운로드 스크립트는 data_download에서 제공됩니다. 데이터를 다운로드 할 수있는 두 가지 옵션이 있습니다.
download_direct.py
사용 ( 권장 )download_easydataverse.py
사용합니다 (느리고 오류/문제가 발생할 수 있습니다. 따라서 권장되지 않습니다!)config
디렉토리의 구성 파일을 사용하십시오. args.filename
과 일치하는 데이터 세트의 모든 파일은 args.data_folder
로 다운로드됩니다. 이 작업에서는 벤치 마크 데이터 세트, 즉 FNO, U-NET 및 PINN에 대해 교육 및 평가할 세 가지 ML 모델을 제공합니다. 기준 모델 구현의 코드는 모델에 포함되어 있습니다.
train_models_forward.py
는 모델을 교육하고 평가하는 주요 스크립트입니다. 입력 인수에 따라 모델 별 스크립트를 호출합니다.train_models_inverse.py
는 역 문제에 대한 모델을 교육하고 평가하는 주요 스크립트입니다. 입력 인수에 따라 모델 별 스크립트를 호출합니다.metrics.py
는 논문에 설명 된 다양한 평가 지표를 기반으로 훈련 된 모델을 평가하는 스크립트입니다. 또한 예측 및 대상 데이터도 표시합니다.analyse_result_forward.py
는 저장된 피클 파일을 메트릭 계산 스크립트에서 Pandas Dataframe 형식으로 변환하고 CSV 파일로 저장하는 스크립트입니다. 또한 다른 모델 간의 결과를 비교하기 위해 막대 차트를 표시합니다.analyse_result_inverse.py
는 저장된 피클 파일을 메트릭 계산 스크립트에서 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 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
파일을 참조하십시오.