Skip to main content

MatRIS: Toward Reliable and Efficient Pretrained Machine Learning Interatomic Potentials

Paper | Poster

Official PyTorch implementation of MatRIS (Materials Representation and Interaction Simulation), a pretrained interatomic potential for materials simulation.

Update

Oct 2026

  • Optimized kernels and torch.compile support (~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)

Source distribution for matris 1.0.0
File Size Uploaded
matris-1.0.0.tar.gz 81.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for matris 1.0.0
File Interpreter ABI Platform
matris-1.0.0-py3-none-any.whl Python 3 none any Details

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

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

0.1.0

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page