MatRIS: Toward Reliable and Efficient Pretrained Machine Learning Interatomic Potentials
Official PyTorch implementation of MatRIS (Materials Representation and Interaction Simulation), a pretrained interatomic potential for materials simulation.
Update
Oct 2026
- Optimized kernels and
torch.compilesupport (~5× faster inference). - TorchSim integration.
- New models: OMat24 and the MatPES PBE/r2SCAN family.
Installation
- Python ≥ 3.12, PyTorch ≥ 2.11
- NumPy, ASE, pymatgen, nvalchemi-toolkit-ops, Ninja
Pretrained Models
We offer seven pretrained models:
| Model key | Checkpoint | Dataset | Target |
|---|---|---|---|
matris_10m_omat |
Download | OMat24 | efs |
matris_10m_oam |
Download | OMat24 → sAlex + MPtrj | efsm |
matris_10m_mp |
Download | MPtrj | efsm |
matris_4m_matpes_pbev1 |
Download | MatPES-PBE (2025.1) | efs |
matris_4m_matpes_pbev2 |
Download | MatPES-PBE (2025.2) | efs |
matris_4m_matpes_r2scanv1 |
Download | MatPES-r2SCAN (2025.1) | efs |
matris_4m_matpes_r2scanv2 |
Download | MatPES-r2SCAN (2025.2) | efs |
If you need other models, feel free to contact me.
Usage
There are some examples how to use MatRIS, including calculator, geometry optimization, molecular dynamics and TorchSim.
ASE Calculator
from ase.build import bulk
import torch
from matris.applications.base import MatRISCalculator
device = "cuda" if torch.cuda.is_available() else "cpu"
calc = MatRISCalculator(
model="matris_10m_oam", # model name or checkpoint path
task="efsm",
device=device,
mode="fast", # optimized kernel + compile; "torch" for eager mode
activation_checkpoint=True, # set True for adaptive memory-saving recomputation
tf32=False, # set True to allow TF32 in interaction blocks (~1.5x faster)
)
atoms = bulk("Cu", cubic=True)
atoms.calc = calc
energy = atoms.get_potential_energy() # total energy, eV
forces = atoms.get_forces() # eV/A
stress = atoms.get_stress() # eV/A^3, ASE convention
magmoms = atoms.get_magnetic_moments() # muB
Structure Optimization
from ase.build import bulk
import torch
from matris.applications.relax import StructOptimizer
device = "cuda" if torch.cuda.is_available() else "cpu"
optimizer = StructOptimizer(
model="matris_10m_oam",
task="efsm",
optimizer="FIRE",
device=device,
mode="fast",
activation_checkpoint=False,
tf32=False,
)
atoms = bulk("Cu", cubic=True)
result = optimizer.relax(
atoms=atoms,
verbose=True,
steps=500,
fmax=0.05,
relax_cell=True,
ase_filter="FrechetCellFilter",
)
final_structure = result["final_structure"]
trajectory = result["trajectory"]
Molecular Dynamics
from ase.build import bulk
from matris.applications import MolecularDynamics
atoms = bulk("Cu", cubic=True)
md = MolecularDynamics(
atoms=atoms,
model="matris_10m_oam",
ensemble="nvt",
temperature=300,
starting_temperature=300,
timestep=1,
trajectory="md_out.traj",
logfile="md_out.log",
loginterval=100,
task="efsm",
device="cuda",
mode="fast",
activation_checkpoint=False,
tf32=True,
)
md.run(1000)
md.set_atoms(new_atoms) restarts the integrator and step count for a new system,
retains the calculator, and appends trajectory output. Reattach custom ASE
observers to md.dyn after replacing atoms.
TorchSim
Install torch-sim-atomistic, then use pretrained names or local weights:
import torch
import torch_sim as ts
from ase.build import bulk
from matris.applications.torchsim import MatRISTorchSimModel
model = MatRISTorchSimModel(
model="matris_10m_oam",
target="efsm", # OAM/MP: efsm; OMat/MatPES: efs
device="cuda",
mode="fast",
activation_checkpoint=True,
tf32=False,
)
state = ts.io.atoms_to_state(
[bulk("Si", "diamond", a=5.43)], device=model.device, dtype=torch.float32,
)
results = model(state) # energy (eV), forces (eV/Å), stress (eV/ų), magmoms (μB)
state = ts.integrate(
state, model, integrator=ts.Integrator.nvt_langevin,
n_steps=100, temperature=300, timestep=0.001, # ps
)
Citation
If you use MatRIS in your work, please cite:
@inproceedings{
zhou2026matris,
title={Mat{RIS}: Toward Reliable and Efficient Pretrained Machine Learning Interatomic Potentials},
author={Yuanchang Zhou and Siyu Hu and Xiangyu Zhang and Hongyu Wang and Guangming Tan and Weile Jia},
booktitle={The Fourteenth International Conference on Learning Representations},
year={2026},
url={https://openreview.net/forum?id=5xBT5Ziute}
}
License
MatRIS is licensed under the BSD-3-Clause License. See LICENSE for details.
Metadata
Release files for matris 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| matris-1.0.0.tar.gz | 81.6 kB | Without provenance | Details for matris-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| matris-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for matris-1.0.0-py3-none-any.whl |
Total release size: 167.4 kB
Release files / matris-1.0.0.tar.gz
| Download URL | matris-1.0.0.tar.gz |
|---|---|
| Size | 81.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
35564980ba57a47eb128a52cabffc046c7cf3ddc3eb7a85d7b897f0bb8653bd3
|
|
BLAKE2b-256 checksum How to use checksums |
02d2e6b642589fca0af1f1d0c214f58cdf4f4c1b72ffd33d91b1c9a209957f93
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Release files / matris-1.0.0-py3-none-any.whl
| Download URL | matris-1.0.0-py3-none-any.whl |
|---|---|
| Size | 85.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3c8495ee8a9010f52d8c75c6e2ec6da2c66a8a2b7703ba1ecd3b621203fe871a
|
|
BLAKE2b-256 checksum How to use checksums |
15c0962a380445ed4dd33b372a0b57d8f15ad5fbee1447f2dbd9d29f5f3c1c03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Security for matris 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.