| --- |
| 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 |
|
|