From 9abc429cc7badaafc59c54e5830c0ce90dd6d223 Mon Sep 17 00:00:00 2001 From: Luis Barroso-Luque Date: Fri, 19 Jul 2024 10:45:33 -0700 Subject: [PATCH 1/2] Fix dataset logic (#771) * adding new notebook for using fairchem models with NEBs without CatTSunami enumeration (#764) * adding new notebook for using fairchem models with NEBs * adding md tutorials * blocking code cells that arent needed or take too long * fix dataset config logic * add empty val/test if not defined * add empty dicts for all missing datasets --------- Co-authored-by: Brook Wander <73855115+brookwander@users.noreply.github.com> Co-authored-by: Muhammed Shuaibi <45150244+mshuaibii@users.noreply.github.com> Co-authored-by: zulissimeta <122578103+zulissimeta@users.noreply.github.com> --- src/fairchem/core/trainers/base_trainer.py | 56 +++++++++------------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/src/fairchem/core/trainers/base_trainer.py b/src/fairchem/core/trainers/base_trainer.py index 12e2e61e7e..dce5099452 100644 --- a/src/fairchem/core/trainers/base_trainer.py +++ b/src/fairchem/core/trainers/base_trainer.py @@ -159,12 +159,18 @@ def __init__( if len(dataset) > 2: self.config["test_dataset"] = dataset[2] elif isinstance(dataset, dict): - self.config["dataset"] = dataset.get("train", {}) - self.config["val_dataset"] = dataset.get("val", {}) - self.config["test_dataset"] = dataset.get("test", {}) - self.config["relax_dataset"] = dataset.get("relax", {}) + # or {} in cases where "dataset": None is explicitly defined + self.config["dataset"] = dataset.get("train", {}) or {} + self.config["val_dataset"] = dataset.get("val", {}) or {} + self.config["test_dataset"] = dataset.get("test", {}) or {} + self.config["relax_dataset"] = dataset.get("relax", {}) or {} else: - self.config["dataset"] = dataset + self.config["dataset"] = dataset or {} + + # add empty dicts for missing datasets + for dataset_name in ("val_dataset", "test_dataset", "relax_dataset"): + if dataset_name not in self.config: + self.config[dataset_name] = {} if not is_debug and distutils.is_master(): os.makedirs(self.config["cmd"]["checkpoint_dir"], exist_ok=True) @@ -277,19 +283,8 @@ def load_datasets(self) -> None: self.val_loader = None self.test_loader = None - # Default all of the dataset portions to {} if - # they don't exist, or are null - if not self.config.get("dataset", None): - self.config["dataset"] = {} - if not self.config.get("val_dataset", None): - self.config["val_dataset"] = {} - if not self.config.get("test_dataset", None): - self.config["test_dataset"] = {} - if not self.config.get("relax_dataset", None): - self.config["relax_dataset"] = {} - # load train, val, test datasets - if self.config["dataset"] and self.config["dataset"].get("src", None): + if "src" in self.config["dataset"]: logging.info( f"Loading dataset: {self.config['dataset'].get('format', 'lmdb')}" ) @@ -307,7 +302,7 @@ def load_datasets(self) -> None: self.train_sampler, ) - if self.config["val_dataset"]: + if "src" in self.config["val_dataset"]: if self.config["val_dataset"].get("use_train_settings", True): val_config = self.config["dataset"].copy() val_config.update(self.config["val_dataset"]) @@ -329,13 +324,8 @@ def load_datasets(self) -> None: self.val_sampler, ) - if self.config["test_dataset"]: - if ( - self.config["test_dataset"].get("use_train_settings", True) - and self.config[ - "dataset" - ] # if there's no training dataset, we have nothing to copy - ): + if "src" in self.config["test_dataset"]: + if self.config["test_dataset"].get("use_train_settings", True): test_config = self.config["dataset"].copy() test_config.update(self.config["test_dataset"]) else: @@ -407,16 +397,16 @@ def load_task(self): "outputs" ][target_name].get("level", "system") if "train_on_free_atoms" not in self.output_targets[subtarget]: - self.output_targets[subtarget][ - "train_on_free_atoms" - ] = self.config["outputs"][target_name].get( - "train_on_free_atoms", True + self.output_targets[subtarget]["train_on_free_atoms"] = ( + self.config[ + "outputs" + ][target_name].get("train_on_free_atoms", True) ) if "eval_on_free_atoms" not in self.output_targets[subtarget]: - self.output_targets[subtarget][ - "eval_on_free_atoms" - ] = self.config["outputs"][target_name].get( - "eval_on_free_atoms", True + self.output_targets[subtarget]["eval_on_free_atoms"] = ( + self.config[ + "outputs" + ][target_name].get("eval_on_free_atoms", True) ) # TODO: Assert that all targets, loss fn, metrics defined are consistent From f9ecf7350596bbf9de7e9266f56042facf8ff083 Mon Sep 17 00:00:00 2001 From: zulissimeta <122578103+zulissimeta@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:05:19 -0700 Subject: [PATCH 2/2] OCP->FAIRChem + paper highlight list in docs (#772) * adding new notebook for using fairchem models with NEBs without CatTSunami enumeration (#764) * adding new notebook for using fairchem models with NEBs * adding md tutorials * blocking code cells that arent needed or take too long * OCP->FAIRChem + paper list --------- Co-authored-by: Brook Wander <73855115+brookwander@users.noreply.github.com> Co-authored-by: Muhammed Shuaibi <45150244+mshuaibii@users.noreply.github.com> --- docs/core/fine-tuning/fine-tuning-oxides.md | 2 +- docs/core/gotchas.md | 18 +- docs/core/inference.md | 2 +- docs/core/papers_using_models.md | 48 +++- docs/core/quickstart.md | 2 +- docs/legacy_tutorials/OCP_Tutorial.md | 4 +- docs/references.bib | 267 ++++++++++++++++++ docs/tutorials/NRR/NRR_example.md | 2 +- docs/tutorials/OCP-introduction.md | 2 +- docs/tutorials/adsorbml_walkthrough.md | 2 +- docs/tutorials/advanced/embeddings.md | 2 +- .../advanced/fine-tuning-in-python.md | 2 +- docs/tutorials/cattsunami_tutorial.md | 2 +- docs/tutorials/fairchem_models_for_nebs.md | 2 +- docs/tutorials/intro.md | 2 +- 15 files changed, 334 insertions(+), 25 deletions(-) diff --git a/docs/core/fine-tuning/fine-tuning-oxides.md b/docs/core/fine-tuning/fine-tuning-oxides.md index d01b8fcbdc..77a9350d3b 100644 --- a/docs/core/fine-tuning/fine-tuning-oxides.md +++ b/docs/core/fine-tuning/fine-tuning-oxides.md @@ -29,7 +29,7 @@ We get this checkpoint here. ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/fairchem_checkpoints/') ``` The data we need is provided in `supporting-information.json`. That file is embedded in the supporting information for the article, and is provided here in the tutorial. We load this data and explore it a little. The json file provides a dictionary with the structure: diff --git a/docs/core/gotchas.md b/docs/core/gotchas.md index f548bb9cea..d0dfac5b12 100644 --- a/docs/core/gotchas.md +++ b/docs/core/gotchas.md @@ -45,7 +45,7 @@ The problem here is that no neighbors are found for the single atom which causes ```{code-cell} ipython3 from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/fairchem_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path) ``` @@ -79,7 +79,7 @@ add_adsorbate(slab, 'O', height=1.2, position='fcc') from fairchem.core.models.model_registry import model_name_to_local_file # OC20 model - trained on adsorption energies -checkpoint_path = model_name_to_local_file('GemNet-OC-S2EF-OC20-All', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EF-OC20-All', local_cache='/tmp/fairchem_checkpoints/') with contextlib.redirect_stdout(StringIO()) as _: calc = OCPCalculator(checkpoint_path=checkpoint_path, cpu=False) @@ -92,7 +92,7 @@ slab.get_potential_energy() ```{code-cell} ipython3 # An OC22 checkpoint - trained on total energy -checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/fairchem_checkpoints/') with contextlib.redirect_stdout(StringIO()) as _: calc = OCPCalculator(checkpoint_path=checkpoint_path, cpu=False) @@ -105,7 +105,7 @@ slab.get_potential_energy() ```{code-cell} ipython3 # This eSCN model is trained on adsorption energies -checkpoint_path = model_name_to_local_file('eSCN-L4-M2-Lay12-S2EF-OC20-2M', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('eSCN-L4-M2-Lay12-S2EF-OC20-2M', local_cache='/tmp/fairchem_checkpoints/') with contextlib.redirect_stdout(StringIO()) as _: calc = OCPCalculator(checkpoint_path=checkpoint_path, cpu=False) @@ -158,7 +158,7 @@ from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file import os -checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/fairchem_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path) ``` @@ -184,7 +184,7 @@ from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file import os -checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/fairchem_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path) ``` @@ -209,7 +209,7 @@ from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file import os -checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/fairchem_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path) ``` @@ -231,7 +231,7 @@ This happens because a random selection of is made to sample edges, and a differ from fairchem.core.models.model_registry import model_name_to_local_file from fairchem.core.common.relaxation.ase_utils import OCPCalculator -checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/fairchem_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path, cpu=True) from ase.build import fcc111, add_adsorbate @@ -258,7 +258,7 @@ In DFT, the forces on all the atoms should sum to zero; otherwise, there is a ne ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/fairchem_checkpoints/') from fairchem.core.common.relaxation.ase_utils import OCPCalculator calc = OCPCalculator(checkpoint_path=checkpoint_path, cpu=True) diff --git a/docs/core/inference.md b/docs/core/inference.md index fc717d71c7..d10dc6fed2 100644 --- a/docs/core/inference.md +++ b/docs/core/inference.md @@ -70,7 +70,7 @@ print(available_pretrained_models) ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-dT-S2EFS-OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-dT-S2EFS-OC22', local_cache='/tmp/fairchem_checkpoints/') checkpoint_path ``` diff --git a/docs/core/papers_using_models.md b/docs/core/papers_using_models.md index a59b7589f6..a1040199af 100644 --- a/docs/core/papers_using_models.md +++ b/docs/core/papers_using_models.md @@ -1,5 +1,47 @@ -# Studies that have leveraged OCP models +# Studies leveraging pre-trained or fine-tuned FAIR-Chem models + +Many papers have now used FAIR-Chem models to accelerate screening and discovery efforts and enable new computational chemistry simulations. We highlight some here just to give an idea of the breadth of possibilities and how they have been used. Feel free to reach out (or submit PRs) if you want them included! + +## Accelerating computational catalysis + +```{bibliography} +:style: plain +:filter: category == "accelerating catalysis" +``` + +## Transfer/fine-tuning strategies for FAIR-Chem pre-trained checkpoints + +```{bibliography} +:style: plain +:filter: category == "transfer strategies" +``` + +## Transfer/fine-tuning applications for FAIR-Chem pre-trained checkpoints + +```{bibliography} +:style: plain +:filter: category == "transfer applications" +``` + +## Catalyst discovery or optimization + +```{bibliography} +:style: plain +:filter: category == "catalyst discovery" +``` + +## Uncertainty quantification + +```{bibliography} +:style: plain +:filter: category == "uncertainty" +``` + +## Properties beyond energies and forces + +```{bibliography} +:style: plain +:filter: category == "other properties" +``` -Many papers have now used the latest OCP models to accelerate screening and discovery efforts and enable new computational chemistry simulations! -We highlight some here just to give an idea of the breadth of possibilities and how they have been used. Feel free to reach out (or submit PRs with links to your papers if you want them included)! diff --git a/docs/core/quickstart.md b/docs/core/quickstart.md index 7396dfb4d9..b2788d011f 100644 --- a/docs/core/quickstart.md +++ b/docs/core/quickstart.md @@ -26,7 +26,7 @@ print(available_pretrained_models) ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/fairchem_checkpoints/') checkpoint_path ``` diff --git a/docs/legacy_tutorials/OCP_Tutorial.md b/docs/legacy_tutorials/OCP_Tutorial.md index b05cef74b1..8b5d4d522a 100644 --- a/docs/legacy_tutorials/OCP_Tutorial.md +++ b/docs/legacy_tutorials/OCP_Tutorial.md @@ -1388,7 +1388,7 @@ relax_dataset = "data/is2re/val_20/data.lmdb" from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-dT-S2EF-OC20-All', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-dT-S2EF-OC20-All', local_cache='/tmp/fairchem_checkpoints/') ``` @@ -2021,7 +2021,7 @@ For this tutorial we download one of our earlier model checkpoints: GemNet-T from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-dT-S2EF-OC20-All', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-dT-S2EF-OC20-All', local_cache='/tmp/fairchem_checkpoints/') ``` diff --git a/docs/references.bib b/docs/references.bib index 8f821a5174..6c69e66f8e 100644 --- a/docs/references.bib +++ b/docs/references.bib @@ -28,3 +28,270 @@ @article{tran-2023-open-catal + + +@article{lan2023adsorbml, +category={accelerating catalysis}, + title={AdsorbML: a leap in efficiency for adsorption energy calculations using generalizable machine learning potentials}, + author={Lan, Janice and Palizhati, Aini and Shuaibi, Muhammed and Wood, Brandon M and Wander, Brook and Das, Abhishek and Uyttendaele, Matt and Zitnick, C Lawrence and Ulissi, Zachary W}, + journal={npj Computational Materials}, + volume={9}, + number={1}, + pages={172}, + year={2023}, + publisher={Nature Publishing Group UK London} +} + +@article{wander2024cattsunami, +category={accelerating catalysis}, + title={CatTSunami: Accelerating Transition State Energy Calculations with Pre-trained Graph Neural Networks}, + author={Wander, Brook and Shuaibi, Muhammed and Kitchin, John R and Ulissi, Zachary W and Zitnick, C Lawrence}, + journal={arXiv preprint arXiv:2405.02078}, + year={2024} +} + +@article{blais2024uncertainty, +category={accelerating catalysis}, + title={Uncertainty Quantification of Linear Scaling, Machine Learning, and DFT Derived Thermodynamics for the Catalytic Partial Oxidation of Methane on Rhodium}, + author={Blais, Christopher and Xu, Chao and West, Richard}, + year={2024}, + journal={Chemrxiv} +} + +@article{kolluru2024adsorbdiff, +category={accelerating catalysis}, + title={AdsorbDiff: Adsorbate Placement via Conditional Denoising Diffusion}, + author={Kolluru, Adeesh and Kitchin, John R}, + journal={arXiv preprint arXiv:2405.03962}, + year={2024} +} + + +@article{clausen2024adapting, +category={transfer applications}, + title={Adapting oc20-trained equiformerv2 models for high-entropy materials}, + author={Clausen, Christian M and Rossmeisl, Jan and Ulissi, Zachary W}, + journal={The Journal of Physical Chemistry C}, + year={2024}, + publisher={ACS Publications} +} + +@article{garrison2023applying, +category={transfer applications}, + title={Applying Large Graph Neural Networks to Predict Transition Metal Complex Energies Using the tmQM\_wB97MV Data Set}, + author={Garrison, Aaron G and Heras-Domingo, Javier and Kitchin, John R and dos Passos Gomes, Gabriel and Ulissi, Zachary W and Blau, Samuel M}, + journal={Journal of Chemical Information and Modeling}, + volume={63}, + number={24}, + pages={7642--7654}, + year={2023}, + publisher={ACS Publications} +} + +@article{kolluru2022transfer, +category={transfer strategies}, + title={Transfer learning using attentions across atomic systems with graph neural networks (TAAG)}, + author={Kolluru, Adeesh and Shoghi, Nima and Shuaibi, Muhammed and Goyal, Siddharth and Das, Abhishek and Zitnick, C Lawrence and Ulissi, Zachary}, + journal={The Journal of Chemical Physics}, + volume={156}, + number={18}, + year={2022}, + publisher={AIP Publishing} +} + +@article{wang2024generalization, +category={transfer strategies}, + title={Generalization of graph-based active learning relaxation strategies across materials}, + author={Wang, Xiaoxiao and Musielewicz, Joseph and Tran, Richard and Ethirajan, Sudheesh Kumar and Fu, Xiaoyan and Mera, Hilda and Kitchin, John R and Kurchin, Rachel C and Ulissi, Zachary W}, + journal={Machine Learning: Science and Technology}, + volume={5}, + number={2}, + pages={025018}, + year={2024}, + publisher={IOP Publishing} +} + +@article{musielewicz2022finetuna, +category={transfer strategies}, + title={FINETUNA: fine-tuning accelerated molecular simulations}, + author={Musielewicz, Joseph and Wang, Xiaoxiao and Tian, Tian and Ulissi, Zachary}, + journal={Machine Learning: Science and Technology}, + volume={3}, + number={3}, + pages={03LT01}, + year={2022}, + publisher={IOP Publishing} +} + +@article{shoghi2023molecules, +category={transfer strategies}, + title={From molecules to materials: Pre-training large generalizable models for atomic property prediction}, + author={Shoghi, Nima and Kolluru, Adeesh and Kitchin, John R and Ulissi, Zachary W and Zitnick, C Lawrence and Wood, Brandon M}, + journal={arXiv preprint arXiv:2310.16802}, + year={2023} +} + +@article{khrabrov2024nabla, +category={transfer applications}, + title={$$\backslash$nabla\^{} 2$ DFT: A Universal Quantum Chemistry Dataset of Drug-Like Molecules and a Benchmark for Neural Network Potentials}, + author={Khrabrov, Kuzma and Ber, Anton and Tsypin, Artem and Ushenin, Konstantin and Rumiantsev, Egor and Telepov, Alexander and Protasov, Dmitry and Shenbin, Ilya and Alekseev, Anton and Shirokikh, Mikhail and others}, + journal={arXiv preprint arXiv:2406.14347}, + year={2024} +} + +@article{nishio2024lightweight, +category={transfer strategies}, + title={Lightweight and high-precision materials property prediction using pre-trained Graph Neural Networks and its application to a small dataset}, + author={Nishio, Kento and Shibata, Kiyou and Mizoguchi, Teruyasu}, + journal={Applied Physics Express}, + volume={17}, + number={3}, + pages={037002}, + year={2024}, + publisher={IOP Publishing} +} + +@article{wang2023dr, +category={transfer strategies}, + title={Dr-label: Improving gnn models for catalysis systems by label deconstruction and reconstruction}, + author={Wang, Bowen and Liang, Chen and Wang, Jiaze and Liu, Furui and Hao, Shaogang and Li, Dong and Hao, Jianye and Chen, Guangyong and Zou, Xiaolong and Heng, Pheng-Ann}, + journal={arXiv preprint arXiv:2303.02875}, + year={2023} +} + +@article{falk2024transfer, +category={transfer strategies}, + title={Transfer learning for atomistic simulations using GNNs and kernel mean embeddings}, + author={Falk, John and Bonati, Luigi and Novelli, Pietro and Parrinello, Michele and Pontil, Massimiliano}, + journal={Advances in Neural Information Processing Systems}, + volume={36}, + year={2024} +} + +@article{eremin2022hybrid, +category={transfer applications}, + title={Hybrid dft/data-driven approach for searching for new quasicrystal approximants in sc-x (x= rh, pd, ir, pt) systems}, + author={Eremin, Roman A and Humonen, Innokentiy S and Zolotarev, Pavel N and Medrish, Inna V and Zhukov, Leonid E and Budennyy, Semen A}, + journal={Crystal Growth \& Design}, + volume={22}, + number={7}, + pages={4570--4581}, + year={2022}, + publisher={ACS Publications} +} + +@article{agarwal2024heusler, +category={catalyst discovery}, + title={Heusler Alloys as Catalysts for Hydrogen Production by Ammonia Decomposition: Data-Driven Screening Via Graph Neural Networks}, + author={Agarwal, Abhishek and Srinivasan, Sriram Goverapet and Rai, Beena}, + year={2024}, + journal={Chemrxiv}, +} + +@article{wander2022catlas, +category={catalyst discovery}, + title={Catlas: an automated framework for catalyst discovery demonstrated for direct syngas conversion}, + author={Wander, Brook and Broderick, Kirby and Ulissi, Zachary W}, + journal={Catalysis Science \& Technology}, + volume={12}, + number={20}, + pages={6256--6267}, + year={2022}, + publisher={Royal Society of Chemistry} +} + +@article{tran2023rational, +category={catalyst discovery}, + title={Rational design of oxide catalysts for OER with OC22}, + author={Tran, Richard and Huang, Liqiang and Zi, Yuan and Wang, Shengguang and Comer, Benjamin M and Wu, Xuqing and Raaijman, Stefan J and Sinha, Nishant K and Sadasivan, Sajanikumari and Thundiyil, Shibin and others}, + journal={arXiv preprint arXiv:2311.00784}, + year={2023} +} + +@article{tran2022screening, +category={catalyst discovery}, + title={Screening of bimetallic electrocatalysts for water purification with machine learning}, + author={Tran, Richard and Wang, Duo and Kingsbury, Ryan and Palizhati, Aini and Persson, Kristin Aslaug and Jain, Anubhav and Ulissi, Zachary W}, + journal={The Journal of chemical physics}, + volume={157}, + number={7}, + year={2022}, + publisher={AIP Publishing} +} + +@article{broderick2024surface, +category={catalyst discovery}, + title={Surface Segregation Studies in Ternary Noble Metal Alloys: Comparing DFT and Machine Learning with Experimental Data}, + author={Broderick, Kirby and Burnley, Robert A and Gellman, Andrew J and Kitchin, John R}, + journal={ChemPhysChem}, + pages={e202400073}, + year={2024}, + publisher={Wiley Online Library} +} + +@article{ock2023beyond, +category={uncertainty}, + title={Beyond independent error assumptions in large GNN atomistic models}, + author={Ock, Janghoon and Tian, Tian and Kitchin, John and Ulissi, Zachary}, + journal={The Journal of Chemical Physics}, + volume={158}, + number={21}, + year={2023}, + publisher={AIP Publishing} +} + +@article{shuaibi2020enabling, +category={uncertainty}, + title={Enabling robust offline active learning for machine learning potentials using simple physics-based priors}, + author={Shuaibi, Muhammed and Sivakumar, Saurabh and Chen, Rui Qi and Ulissi, Zachary W}, + journal={Machine Learning: Science and Technology}, + volume={2}, + number={2}, + pages={025007}, + year={2020}, + publisher={IOP Publishing} +} + +@misc{musielewicz2024rotationallyinvariantlatentdistances, +category={uncertainty}, + title={Rotationally Invariant Latent Distances for Uncertainty Estimation of Relaxed Energy Predictions by Graph Neural Network Potentials}, + author={Joseph Musielewicz and Janice Lan and Matt Uyttendaele and John R. Kitchin}, + year={2024}, + eprint={2407.10844}, + archivePrefix={arXiv}, + primaryClass={cs.LG}, + url={https://arxiv.org/abs/2407.10844}, +} + +@article{sunshine2023chemical, +category={other properties}, + title={Chemical Properties from Graph Neural Network-Predicted Electron Densities}, + author={Sunshine, Ethan M and Shuaibi, Muhammed and Ulissi, Zachary W and Kitchin, John R}, + journal={The Journal of Physical Chemistry C}, + volume={127}, + number={48}, + pages={23459--23466}, + year={2023}, + publisher={ACS Publications} +} + +@article{sanspeur2024circumventing, +category={other properties}, + title={Circumventing data imbalance in magnetic ground state data for magnetic moment predictions}, + author={Sanspeur, Rohan Yuri and Kitchin, John R}, + journal={Machine Learning: Science and Technology}, + volume={5}, + number={1}, + pages={015023}, + year={2024}, + publisher={IOP Publishing} +} + +@article{fu2024recipe, +category={other properties}, + title={A Recipe for Charge Density Prediction}, + author={Fu, Xiang and Rosen, Andrew and Bystrom, Kyle and Wang, Rui and Musaelian, Albert and Kozinsky, Boris and Smidt, Tess and Jaakkola, Tommi}, + journal={arXiv preprint arXiv:2405.19276}, + year={2024} +} + diff --git a/docs/tutorials/NRR/NRR_example.md b/docs/tutorials/NRR/NRR_example.md index 1a9197d473..b69e078d1a 100644 --- a/docs/tutorials/NRR/NRR_example.md +++ b/docs/tutorials/NRR/NRR_example.md @@ -44,7 +44,7 @@ np.random.seed(22) ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/fairchem_checkpoints/') checkpoint_path ``` diff --git a/docs/tutorials/OCP-introduction.md b/docs/tutorials/OCP-introduction.md index 4bf827faca..d426021a07 100644 --- a/docs/tutorials/OCP-introduction.md +++ b/docs/tutorials/OCP-introduction.md @@ -60,7 +60,7 @@ The different models have different compute requirements. If you find your kerne ```{code-cell} from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/fairchem_checkpoints/') ``` Next we load the checkpoint. The output is somewhat verbose, but it can be informative for debugging purposes. diff --git a/docs/tutorials/adsorbml_walkthrough.md b/docs/tutorials/adsorbml_walkthrough.md index 262ac3fca5..7d6beeda1d 100644 --- a/docs/tutorials/adsorbml_walkthrough.md +++ b/docs/tutorials/adsorbml_walkthrough.md @@ -75,7 +75,7 @@ from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file import os -checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/fairchem_checkpoints/') os.makedirs(f"data/{bulk}_{adsorbate}", exist_ok=True) diff --git a/docs/tutorials/advanced/embeddings.md b/docs/tutorials/advanced/embeddings.md index 04a605ae18..ec1a25c12c 100644 --- a/docs/tutorials/advanced/embeddings.md +++ b/docs/tutorials/advanced/embeddings.md @@ -58,7 +58,7 @@ from fairchem.core.common.relaxation.ase_utils import OCPCalculator from fairchem.core.models.model_registry import model_name_to_local_file import os -checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/fairchem_checkpoints/') calc = OCPCalculator(checkpoint_path=checkpoint_path) ``` diff --git a/docs/tutorials/advanced/fine-tuning-in-python.md b/docs/tutorials/advanced/fine-tuning-in-python.md index 568d92723b..1d14219c88 100644 --- a/docs/tutorials/advanced/fine-tuning-in-python.md +++ b/docs/tutorials/advanced/fine-tuning-in-python.md @@ -51,7 +51,7 @@ root.addHandler(handler_err) ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/fairchem_checkpoints/') from fairchem.core.common.relaxation.ase_utils import OCPCalculator calc = OCPCalculator(checkpoint_path=checkpoint_path, trainer='forces', cpu=False) ``` diff --git a/docs/tutorials/cattsunami_tutorial.md b/docs/tutorials/cattsunami_tutorial.md index 7454f56167..d5f397b828 100644 --- a/docs/tutorials/cattsunami_tutorial.md +++ b/docs/tutorials/cattsunami_tutorial.md @@ -96,7 +96,7 @@ tags: ["skip-execution"] # Instantiate the calculator # NOTE: If you have a GPU, use cpu = False # NOTE: Change the checkpoint path to locally downloaded files as needed -checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/fairchem_checkpoints/') cpu = True calc = OCPCalculator(checkpoint_path = checkpoint_path, cpu = cpu) ``` diff --git a/docs/tutorials/fairchem_models_for_nebs.md b/docs/tutorials/fairchem_models_for_nebs.md index 85bfc46e13..b2723288d1 100644 --- a/docs/tutorials/fairchem_models_for_nebs.md +++ b/docs/tutorials/fairchem_models_for_nebs.md @@ -45,7 +45,7 @@ cpu = True # set to False if you have a GPU # NOTE: Change the checkpoint path to locally downloaded files as needed -checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('EquiformerV2-31M-S2EF-OC20-All+MD', local_cache='/tmp/fairchem_checkpoints/') ``` ## If you have your own set of NEB frames diff --git a/docs/tutorials/intro.md b/docs/tutorials/intro.md index 51799a4d81..4be41ae745 100644 --- a/docs/tutorials/intro.md +++ b/docs/tutorials/intro.md @@ -68,7 +68,7 @@ You can get a checkpoint file with one of the keys listed above like this. The r ```{code-cell} ipython3 from fairchem.core.models.model_registry import model_name_to_local_file -checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/ocp_checkpoints/') +checkpoint_path = model_name_to_local_file('GemNet-OC-S2EFS-OC20+OC22', local_cache='/tmp/fairchem_checkpoints/') checkpoint_path ```