AIMNet Machine Learned Interatomic Potential
Project description
- Github repository: https://github.com/isayevlab/aimnetcentral/
- Documentation https://isayevlab.github.io/aimnetcentral/
AIMNet2 : ML interatomic potential for fast and accurate atomistic simulations
Key Features
- Accurate and Versatile: AIMNet2 excels at modeling neutral, charged, organic, and elemental-organic systems.
- Flexible Interfaces: Use AIMNet2 through convenient calculators for popular simulation packages like ASE and PySisyphus.
- Flexible Long-Range Interactions: Optionally employ the Damped-Shifted Force (DSF) or Ewald summation Coulomb models for accurate calculations in large or periodic systems.
Requirements
Python Version
AIMNet2 requires Python 3.11 or 3.12.
GPU Support (Optional)
AIMNet2 works on CPU out of the box. For GPU acceleration:
- CUDA GPU: Install PyTorch with CUDA support from pytorch.org
- compile_mode: Requires CUDA for ~5x MD speedup (see Performance Optimization)
Example PyTorch installation with CUDA 12.4:
pip install torch --index-url https://download.pytorch.org/whl/cu124
Available Models
| Model | Elements | Description |
|---|---|---|
aimnet2 |
H, B, C, N, O, F, Si, P, S, Cl, As, Se, Br, I | wB97M-D3 (default) |
aimnet2_b973c |
H, B, C, N, O, F, Si, P, S, Cl, As, Se, Br, I | B97-3c functional |
aimnet2_2025 |
H, B, C, N, O, F, Si, P, S, Cl, As, Se, Br, I | B97-3c + improved intermolecular interactions |
aimnet2nse |
H, B, C, N, O, F, Si, P, S, Cl, As, Se, Br, I | Open-shell chemistry |
aimnet2pd |
H, B, C, N, O, F, Si, P, S, Cl, Se, Br, Pd, I | Palladium-containing systems |
Each model has ensemble members (append _0 to _3). Ensemble averaging recommended for production use.
Installation
Basic Installation
Install from PyPI:
pip install aimnet
Optional Features
AIMNet2 provides optional extras for different use cases:
ASE Calculator (for atomistic simulations with ASE):
pip install "aimnet[ase]"
PySisyphus Calculator (for reaction path calculations):
pip install "aimnet[pysis]"
Training (for model training and development):
pip install "aimnet[train]"
All Features:
pip install "aimnet[ase,pysis,train]"
Development Installation
For contributors, use uv for fast dependency management:
git clone https://github.com/isayevlab/aimnetcentral.git
cd aimnetcentral
make install
source .venv/bin/activate
Quick Start
Basic Usage (Core)
from aimnet.calculators import AIMNet2Calculator
# Load a pre-trained model
calc = AIMNet2Calculator("aimnet2")
# Prepare input
data = {
"coord": coordinates, # Nx3 array
"numbers": atomic_numbers, # N array
"charge": 0.0,
}
# Run inference
results = calc(data, forces=True)
print(results["energy"], results["forces"])
Output Data
The calculator returns a dictionary with the following keys:
| Key | Shape | Description |
|---|---|---|
energy |
(,) or (B,) |
Total energy in eV |
charges |
(N,) or (B, N) |
Atomic partial charges in e |
forces |
(N, 3) or (B, N, 3) |
Atomic forces in eV/A (if requested) |
hessian |
(N, 3, N, 3) |
Second derivatives (if requested) |
stress |
(3, 3) |
Stress tensor for PBC (if requested) |
B = batch size, N = number of atoms
ASE Integration
With aimnet[ase] installed:
from ase.io import read
from aimnet.calculators import AIMNet2ASE
atoms = read("molecule.xyz")
atoms.calc = AIMNet2ASE("aimnet2")
energy = atoms.get_potential_energy()
forces = atoms.get_forces()
Periodic Boundary Conditions
For periodic systems, provide a unit cell:
data = {
"coord": coordinates,
"numbers": atomic_numbers,
"charge": 0.0,
"cell": cell_vectors, # 3x3 array in Angstrom
}
results = calc(data, forces=True, stress=True)
Long-Range Coulomb Methods
Configure electrostatic interactions for large or periodic systems:
# Damped-Shifted Force (DSF) - recommended for periodic systems
calc.set_lrcoulomb_method("dsf", cutoff=15.0, dsf_alpha=0.2)
# Ewald summation - for accurate periodic electrostatics
calc.set_lrcoulomb_method("ewald", ewald_accuracy=1e-8)
Performance Optimization
For molecular dynamics simulations, use compile_mode for ~5x speedup:
calc = AIMNet2Calculator("aimnet2", compile_mode=True)
Requirements:
- CUDA GPU required
- Not compatible with periodic boundary conditions
- Best for repeated inference on similar-sized systems
Training
With aimnet[train] installed:
aimnet train --config my_config.yaml --model aimnet2.yaml
Technical Details
Batching and Neighbor Lists
The AIMNet2Calculator automatically selects the optimal strategy based on system size (nb_threshold, default 120 atoms) and hardware:
- Dense Mode (O(N²)): Used for small molecules on GPU. Input is kept in 3D batched format
(B, N, 3). No neighbor list is computed; the model uses a fully connected graph for maximum parallelism. - Sparse Mode (O(N)): Used for large systems or CPU execution. Input is flattened to 2D
(N_total, 3)with an adaptive neighbor list. This ensures linear memory scaling.
Adaptive Neighbor List
In sparse mode, AIMNet2 uses an AdaptiveNeighborList that automatically resizes its buffer to maintain efficient utilization (~75%) while preventing overflows.
- Format: The neighbor list is stored as a 2D integer matrix
nbmatof shape(N_total, max_neighbors). Each rowicontains the indices of atoms neighboring atomi. - Padding: Rows with fewer neighbors than
max_neighborsare padded with the indexN_total(a dummy atom index). - Buffer Management: The buffer size
max_neighborsis always a multiple of 16 for memory alignment. It dynamically expands (by 1.5x) on overflow and shrinks if utilization drops significantly below the target, ensuring robust performance during MD simulations where density fluctuates.
Development
Common development tasks using make:
make check # Run linters and code quality checks
make test # Run tests with coverage
make docs # Build and serve documentation
make build # Build distribution packages
Citation
If you use AIMNet2 in your research, please cite the appropriate paper:
AIMNet2 (main model):
@article{aimnet2,
title={AIMNet2: A Neural Network Potential to Meet Your Neutral, Charged, Organic, and Elemental-Organic Needs},
author={Anstine, Dylan M and Zubatyuk, Roman and Isayev, Olexandr},
journal={Chemical Science},
volume={16},
pages={10228--10244},
year={2025},
doi={10.1039/D4SC08572H}
}
AIMNet2-NSE: ChemRxiv preprint
AIMNet2-Pd: ChemRxiv preprint
License
See LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aimnet-0.1.0.tar.gz.
File metadata
- Download URL: aimnet-0.1.0.tar.gz
- Upload date:
- Size: 524.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a7a72201fa95b030aca23706a2362137f37e2a54f654cccc66566ddd60add126
|
|
| MD5 |
4802bc8dddac3f2f031624884191155c
|
|
| BLAKE2b-256 |
9fa093e397d3473577995c04939b3d520e7fc7b0930d90aa9e08732379fa199f
|
File details
Details for the file aimnet-0.1.0-py3-none-any.whl.
File metadata
- Download URL: aimnet-0.1.0-py3-none-any.whl
- Upload date:
- Size: 549.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca8822b4cb0b63c13071d0dea6dbb73806cbf64bb72ce50e33eafeab2c9f8a61
|
|
| MD5 |
4bda2020c7acb4f5741b18edba823493
|
|
| BLAKE2b-256 |
9e50cdc9a1fc9b03ff7881b821e20e50db40a85149beebde67754dd67d8a4d23
|