Skip to main content

Fair and transparent benchmark of machine learning interatomic potentials (MLIPs), beyond error-based regression metrics

Project description

⚔️ MLIP Arena ⚔️

Hugging Face Static Badge Static Badge
GitHub Actions Workflow Status PyPI - Version PyPI - Downloads DOI

Foundation machine learning interatomic potentials (MLIPs), trained on extensive databases containing millions of density functional theory (DFT) calculations, have revolutionized molecular and materials modeling, but existing benchmarks suffer from data leakage, limited transferability, and an over-reliance on error-based metrics tied to specific DFT references.

We introduce MLIP Arena, a unified benchmark platform for evaluating foundation MLIP performance beyond conventional error metrics. It focuses on revealing the physical soundness learned by MLIPs and assessing their utilitarian performance agnostic to underlying model architecture and training dataset.

By moving beyond static DFT references and revealing the important failure modes of current foundation MLIPs in real-world settings, MLIP Arena provides a reproducible framework to guide the next-generation MLIP development toward improved predictive accuracy and runtime efficiency while maintaining physical consistency.

MLIP Arena leverages modern pythonic workflow orchestrator 💙 Prefect 💙 to enable advanced task/flow chaining and caching.

Thumnail

[!NOTE] Contributions of new tasks through PRs are very welcome! See project page for some outstanding tasks, or propose new feature requests in Discussion.

Announcement

Installation

From PyPI (prefect workflow only, without pretrained models)

pip install mlip-arena

From source (with integrated pretrained models)

[!CAUTION] We strongly recommend clean build in a new virtual environment due to the compatibility issues between multiple popular MLIPs. We provide a single installation script using uv for minimal package conflicts and fast installation!

[!CAUTION] To automatically download fairchem model checkpoints, please make sure you have gained downloading access to their HuggingFace model repo (e.g. OMAT24) (not dataset repo), and login locally on your machine through hf auth login (see HF hub authentication)

Linux

# (Optional) Install uv, way faster than pip, why not? :)
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env

git clone https://github.com/atomind-ai/mlip-arena.git
cd mlip-arena

# One script uv pip installation
bash scripts/install.sh

[!TIP] Sometimes installing all compiled models takes all the available local storage. Optional pip flag --no-cache could be uesed. uv cache clean will be helpful too.

Mac

# (Optional) Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
# One script uv pip installation
bash scripts/install-macosx.sh

Quickstart

Instruction for individual benchmark is provided in the README in each corresponding folder under /benchmark.

Workflow Overview

✅ The first Prefect workflow: molecular dynamics

Arena provides a unified interface to run all the compiled MLIPs. This can be achieved simply by looping through MLIPEnum:

from mlip_arena.models import MLIPEnum
from mlip_arena.tasks import MD
from mlip_arena.tasks.utils import get_calculator

from ase import units
from ase.build import bulk

atoms = bulk("Cu", "fcc", a=3.6) * (5, 5, 5)

results = []

for model in MLIPEnum:
    result = MD(
        atoms=atoms,
        calculator=get_calculator(
            model,
            calculator_kwargs=dict(), # passing into calculator
            dispersion=True,
            dispersion_kwargs=dict(
                damping='bj', xc='pbe', cutoff=40.0 * units.Bohr
            ), # passing into TorchDFTD3Calculator
        ), # compatible with custom ASE Calculator
        ensemble="nve", # nvt, nvt available
        dynamics="velocityverlet", # compatible with any ASE Dynamics objects and their class names
        total_time=1e3, # 1 ps = 1e3 fs
        time_step=2, # fs
    )
    results.append(result)

🚀 Parallelize benchmarks at scale

To run multiple benchmarks in parallel, add .submit before the task function and wrap all the tasks into a flow to dispatch the tasks to worker for concurrent execution. See Prefect Doc on tasks and flow for more details.

...
from prefect import flow

@flow
def run_all_tasks:

    futures = []
    for model in MLIPEnum:
        future = MD.submit(
            atoms=atoms,
            ...
        )
        future.append(future)

    return [f.result(raise_on_failure=False) for f in futures]

For a more practical example using HPC resources, please now refer to MD stability benchmark.

List of modular tasks

The implemented tasks are available under mlip_arena.tasks.<module>.run or from mlip_arena.tasks import * for convenient imports (currently doesn't work if phonopy is not installed).

  • OPT: Structure optimization
  • EOS: Equation of state (energy-volume scan)
  • MD: Molecular dynamics with flexible dynamics (NVE, NVT, NPT) and temperature/pressure scheduling (annealing, shearing, etc)
  • PHONON: Phonon calculation driven by phonopy
  • NEB: Nudged elastic band
  • NEB_FROM_ENDPOINTS: Nudge elastic band with convenient image interpolation (linear or IDPP)
  • ELASTICITY: Elastic tensor calculation

Contribute and Development

PRs are welcome. Please clone the repo and submit PRs with changes.

To make change to huggingface space, fetch large files from git lfs first and run streamlit:

git lfs fetch --all
git lfs pull
streamlit run serve/app.py

Add new MLIP models

If you have pretrained MLIP models that you would like to contribute to the MLIP Arena and show benchmark in real-time, there are two ways:

External ASE Calculator (easy)

  1. Implement new ASE Calculator class in mlip_arena/models/externals.
  2. Name your class with awesome model name and add the same name to registry with metadata.

[!CAUTION] Remove unneccessary outputs under results class attributes to avoid error for MD simulations. Please refer to CHGNet as an example.

Hugging Face Model (recommended, difficult)

  1. Inherit Hugging Face ModelHubMixin class to your awesome model class definition. We recommend PytorchModelHubMixin.
  2. Create a new Hugging Face Model repository and upload the model file using push_to_hub function.
  3. Follow the template to code the I/O interface for your model here.
  4. Update model registry with metadata

Benchmark Evaluation Pipeline (Model Submission)

Once your model is ready (either registered or initialized as a custom ASE Calculator), you can run the core benchmark suite on a SLURM cluster:

  1. Move into the benchmarks/ directory:
    cd benchmarks
    
  2. Open and modify the submit_model.py template script. Under the USER CONFIGURATION section:
    • Provide your MODEL (as a registered string or custom ASE Calculator instance).
    • Adjust the SLURM_CONFIG parameters for your specific HPC allocation (including any conda environments or module loads in the job_script_prologue).
  3. Submit the pipeline:
    python submit_model.py
    
    This will dynamically distribute and run the core benchmarks (diatomics, EOS bulk, and E-V scans) via a Dask-Jobqueue on your SLURM cluster.

Add new benchmark

[!NOTE] Please reuse, extend, or chain the general tasks defined above and add new folder and script under /benchmarks

Citation

If you find the work useful, please consider citing the following:

@inproceedings{
    chiang2025mlip,
    title={{MLIP} Arena: Advancing Fairness and Transparency in Machine Learning Interatomic Potentials via an Open, Accessible Benchmark Platform},
    author={Yuan Chiang and Tobias Kreiman and Christine Zhang and Matthew C. Kuner and Elizabeth Jin Weaver and Ishan Amin and Hyunsoo Park and Yunsung Lim and Jihan Kim and Daryl Chrzan and Aron Walsh and Samuel M Blau and Mark Asta and Aditi S. Krishnapriyan},
    booktitle={The Thirty-ninth Annual Conference on Neural Information Processing Systems Datasets and Benchmarks Track},
    year={2025},
    url={https://openreview.net/forum?id=SAT0KPA5UO}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mlip_arena-0.2.0.tar.gz (2.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mlip_arena-0.2.0-py3-none-any.whl (99.3 kB view details)

Uploaded Python 3

File details

Details for the file mlip_arena-0.2.0.tar.gz.

File metadata

  • Download URL: mlip_arena-0.2.0.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.33.0

File hashes

Hashes for mlip_arena-0.2.0.tar.gz
Algorithm Hash digest
SHA256 a58026abd04910fc5529770178ed0636dae6cf8a153c5576784304dd5d4230e1
MD5 e035137c063d61b2546cebe67ee49dde
BLAKE2b-256 a0a6d4283d5e76c785d4d1108d7f2d230b2492136a1bf462fd2981ab8865c90d

See more details on using hashes here.

File details

Details for the file mlip_arena-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: mlip_arena-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 99.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.33.0

File hashes

Hashes for mlip_arena-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1ee27acb529d038e01d942ae8709b4f4722e684b274ef51759515a1510bfe6c0
MD5 a72eafd5f6f43fda415c41e720d5ef77
BLAKE2b-256 dc98959c494d1e3683821ea2e43e8fd6b2fd1dfd9e320147b578f36e53e7b494

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page