File size: 9,511 Bytes
87ba944 0ee9206 87ba944 0ee9206 87ba944 0ee9206 87ba944 0ee9206 87ba944 0ee9206 87ba944 0ee9206 87ba944 0ee9206 87ba944 13e9de2 87ba944 37966b4 aabbb4a 0ee9206 87ba944 0ee9206 87ba944 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | ---
library_name: aimnet
license: mit
tags:
- chemistry
- computational-chemistry
- reactions
- transition-states
- reaction-pathways
- neb
- interatomic-potential
- neural-network-potential
- pytorch
- aimnet2
pipeline_tag: other
---
# AIMNet2-rxn
AIMNet2-rxn is a neural network interatomic potential specialized for **generalized organic reaction modeling** — energies, forces, charges, and electrostatic moments along reaction coordinates at near-ωB97M-V/def2-TZVPP accuracy. Trained on ~4.7M reaction-relevant geometries to handle bond breaking/forming, transition states, and minimum-energy pathways out of the box, without system-specific fine-tuning.
## Highlights
- **Reaction-aware:** ~1 kcal mol⁻¹ across IRC profiles, ~1.6 kcal mol⁻¹ RMSD on reaction energies, ~2 kcal mol⁻¹ RMSD on diverse-reaction barrier heights, ~3 kcal mol⁻¹ RMSD on the Grambow benchmark — all without retraining or fine-tuning. (Numbers from the paper; see below.)
- **High-throughput pathway search:** Enables minimum-energy-pathway searches at ~10⁶ reactions/day via batched NEB on a single GPU — roughly 10⁶× the throughput of serial NEB-DFT at the reference level. Per-call speedup is closer to 10³–10⁴×; the 10⁶× figure is end-to-end batched NEB throughput, not per-energy-evaluation.
- **TS- and NEB-ready:** Designed for transition-state optimization and (batched) nudged-elastic-band minimum-energy-pathway searches.
- **Ensemble:** 4 ensemble members for uncertainty estimation.
- **Outputs:** energy, forces (autograd), atomic charges, molecular dipole, molecular quadrupole.
## Element coverage
**H, C, N, O only.** The model was trained on closed-shell organics. Unsupported elements (F, P, S, …) are not validated by the calculator and will silently produce undefined predictions — read `implemented_species` from this repo's `config.json` (`[1, 6, 7, 8]`) and check input atomic numbers yourself before running on novel systems. For broader element coverage on equilibrium structures, use [`isayevlab/aimnet2-wb97m-d3`](https://huggingface.co/isayevlab/aimnet2-wb97m-d3) or related families.
## Energy convention
AIMNet2-rxn outputs are on a **learned per-element shifted electronic-energy scale** (eV). They are designed to be accurate for energy *differences* between geometries that share atomic composition — barrier heights, reaction energies, IRC profiles, conformer energies. They are **not** absolute ωB97M-V/def2-TZVPP electronic energies and **not** formal atomization energies.
Practical implications:
- Methane sits near a few eV on this scale, **not** the −1100 eV scale used by `aimnet2-wb97m-d3` and the other AIMNet2 families. Do **not** mix or compare energies across families.
- Single-point energies in isolation are not physically meaningful. Always interpret as a difference vs. another geometry from this same model.
## Installation
```bash
pip install "aimnet[hf]"
```
## Quick Start
```python
from aimnet.calculators import AIMNet2Calculator
# Load from Hugging Face (downloads and caches automatically)
calc = AIMNet2Calculator("isayevlab/aimnet2-rxn")
# Single-point calculation
results = calc(
{"coord": coords, "numbers": atomic_numbers, "charge": 0.0},
forces=True,
)
print(results["energy"]) # Energy in eV (atomization-style scale, see "Energy convention")
print(results["forces"]) # Forces in eV/A
print(results["charges"]) # Partial charges in e
```
### With ASE — minimum energy path via NEB
```python
from aimnet.calculators.aimnet2ase import AIMNet2ASE
from ase.mep import NEB
from ase.optimize import LBFGS
# images: list[ase.Atoms] interpolated between reactant and product
calc_factory = lambda: AIMNet2ASE("isayevlab/aimnet2-rxn")
for img in images:
img.calc = calc_factory()
neb = NEB(images, climb=True)
LBFGS(neb).run(fmax=0.05)
```
For batched-NEB (BNEB) on millions of pathways, see the AIMNet2-rxn paper for the recommended workflow with `pysisyphus`.
### Transition-state and Hessian workflows
For TS optimization or any workflow that requires a Hessian (e.g. P-RFO, dimer, IRC, vibrational analysis), **set `compile_model=False`** when constructing the calculator:
```python
calc = AIMNet2Calculator("isayevlab/aimnet2-rxn", compile_model=False)
```
`torch.compile` (Dynamo) is known to hang on the double-backward path through GELU activations that Hessian autograd requires. The default avoids the issue, but explicit `compile_model=True` for speed should be reserved for pure energy/force evaluations.
## Ensemble Members
This repo contains 4 ensemble members (`ensemble_0.safetensors` through `ensemble_3.safetensors`). The default loads member 0. For uncertainty estimation, load all 4 and average predictions.
| File | Description |
|------|-------------|
| `ensemble_0.safetensors` | Ensemble member 0 (default) |
| `ensemble_1.safetensors` | Ensemble member 1 |
| `ensemble_2.safetensors` | Ensemble member 2 |
| `ensemble_3.safetensors` | Ensemble member 3 |
| `config.json` | Shared model configuration and metadata |
## Model Details
- **Architecture:** AIMNet2 (Atomic Environment Vectors + message-passing MLPs) with `dipole` and `quadrupole` heads
- **Cutoff radius:** 5.0 Å
- **DFT reference:** **ωB97M-V / def2-TZVPP** (range-separated hybrid meta-GGA with VV10 nonlocal correlation; Mardirossian & Head-Gordon, *J. Chem. Phys.* 144, 214110, 2016)
- **Dispersion:** Supplied by ωB97M-V's VV10 nonlocal correlation kernel, included in every training-set energy and force. No separate D3/D4 correction is added at inference (`needs_dispersion: false` in `config.json`); doing so would double-count the dispersion already baked into the reference data. AIMNet2's external D3 path remains available for other family members whose reference functional does not carry its own dispersion (e.g. `aimnet2-wb97m-d3`).
- **Coulomb:** Short-range embedded (≤4.6 Å) + external long-range (≥4.6 Å, applied by the calculator via `LRCoulomb`). The 4.6 Å crossover is **physically frozen** — it is the SR/LR cancellation point used during training. Do not alter `coulomb_sr_rc` at inference.
- **Training set:** 4,685,165 geometries combining the AIMNet2 base set with the RGD-1 reaction database, all recomputed at ωB97M-V/def2-TZVPP
- **Format:** safetensors (converted from JIT TorchScript via reconstructed YAML)
## Intended use
Mechanism enumeration, transition-state searches, NEB / BNEB, reaction-coordinate energy profiles, high-throughput reactivity screening on closed-shell organic systems.
## Calculator-enforced safeguards (with `aimnet>=NEXT_VERSION`)
The calculator validates inputs and refuses to silently produce undefined output:
- **Element scope** — passing atomic numbers outside `[1, 6, 7, 8]` raises `ValueError` (bypass with `validate_species=False`).
- **Net charge** — `charge != 0` raises `ValueError` (zwitterions are OK as long as the net charge is zero; for net-charged species use [`isayevlab/aimnet2-wb97m-d3`](https://huggingface.co/isayevlab/aimnet2-wb97m-d3)).
- **Hessian + `torch.compile`** — combining both raises `RuntimeError` (Dynamo and GELU double-backward hang); reconstruct the calculator with `compile_model=False` for TS / IRC / vibrational analysis.
- **Coulomb cutoff** — `set_lrcoulomb_method(...)` warns if you change the SR/LR crossover from 4.6 Å (physically frozen during training).
- **Cross-family mixing** — constructing calculators from two AIMNet2 families in one process emits a one-time `UserWarning` about energy-scale incompatibility.
`afv.weight` rows for elements outside `[1, 6, 7, 8]` are NaN-padded at the safetensors level, so even with `validate_species=False` the model produces NaN (not plausible-looking nonsense) for unsupported elements. Two layers of defense.
## Limitations
- **Element scope:** H, C, N, O only — passing other elements is not validated by the calculator and yields undefined output.
- **Closed-shell only:** Open-shell species (radicals, doublets) are not handled by AIMNet2-rxn. For open-shell reactions and radical chemistry, use [`isayevlab/aimnet2-nse`](https://huggingface.co/isayevlab/aimnet2-nse) — a fully reactive model with parametrization focused on open-shell systems and radicals.
- **Net-charged species (anions, cations):** Out of scope for this release; future work per the paper. **Net-neutral zwitterions are within the training distribution and supported** — local charge separation in a globally neutral molecule (e.g. amino acid neutral forms, proton-transfer intermediates) is a deliberate part of training.
- **Transition metals & heteroatoms beyond H/C/N/O:** Not supported.
- **Equilibrium MD on large organics:** While accurate near equilibrium, the wb97m-d3 family is generally preferred when reaction information is not needed.
- **Hessian/TS workflows under `torch.compile`:** Set `compile_model=False` (see Quick Start). `torch.compile` and Hessian autograd through GELU activations are known to interact poorly.
## Citation
```bibtex
@misc{anstine2025aimnet2rxn,
title = {AIMNet2-rxn: A Machine Learned Potential for Generalized Reaction Modeling on a Millions-of-Pathways Scale},
author = {Anstine, Dylan M. and Zhao, Qiyuan and Zubatiuk, Roman and Zhang, Shuhao and Singla, Veerupaksh and Nikitin, Filipp and Savoie, Brett M. and Isayev, Olexandr},
year = {2025},
doi = {10.26434/chemrxiv-2025-hpdmg},
note = {ChemRxiv preprint}
}
```
## License
MIT License
|