Metatomic Interface#
Added in version 2.0.
The Metatomic interface allows eOn to use machine learning potentials developed
with the metatensor and pytorch libraries.
Setup and Compilation#
The most robust way to handle the dependencies is to use -Dwith_metatomic=True -Dpip_metatomic=True -Dtorch_version=2.9 inside the pixi s -e meta-dev
environment.
Some notes about this implemetnation:
Unlike the
pythonpotentials, usingpip_metatomicdoes not share aguardacross the clientThese models are typically stored in
.ptfiles.
For more details including building from source, refer to the upstream documentation.
Basic Configuration#
[Potential]
potential = metatomic
[Metatomic]
model_path = lennard-jones.pt
The model_path is the path to the PyTorch model file (.pt). As with other
external files, it is highly recommended to provide the full absolute path to
the model.
Usage example#
Lennard Jones Baseline#
Here is a complete workflow, from generating a simple Lennard-Jones test model to running a calculation with eonclient.
The metatomic-lj-test package provides a simple way to create a sample model file. Run this Python script:
import metatomic_lj_test
model = metatomic_lj_test.lennard_jones_model(
atomic_type=1,
cutoff=3.4,
sigma=1.5,
epsilon=23.0,
length_unit="Angstrom",
energy_unit="eV",
with_extension=False,
)
model.save("lennard-jones.pt", collect_extensions="extensions/")
print("Saved model to lennard-jones.pt")
This will create the lennard-jones.pt file in your current directory.
This can be loaded checked with a configuration file for eOn:
[Main]
job = point
temperature = 300
random_seed = 706253457
[Potential]
potential = metatomic
[Metatomic]
model_path = lennard-jones.pt
With coordinates from the lj13.con file:
cp docs/lj13.con pos.con
eonclient
# Energy: 98374.877530582715
# Max atom force: 109591.908376179999
Validated with the metatomic wrapper.
import numpy as np
import ase.io as aseio
from metatomic.torch import load_atomistic_model
from metatomic.torch.ase_calculator import MetatomicCalculator
atomistic_model = load_atomistic_model("lennard-jones.pt")
mta_calculator = MetatomicCalculator(atomistic_model)
atoms = aseio.read("pos.con")
atoms.calc = mta_calculator
# NOTE(rg): Normally needs a mask to remove fixed atoms, lj13 has no fixed atoms
print(atoms.get_potential_energy())
print(np.max(np.linalg.norm(atoms.get_forces(), axis=1)))
Which yields the expected result.
In [2]: atoms.get_potential_energy()
Out[2]: np.float64(98374.87753058573)
In [6]: np.max(np.linalg.norm(atoms.get_forces(), axis=1))
Out[6]: np.float64(109591.90837618345)
PET-MAD#
To use pet-mad we can use metatrain to grab the model.
mtt export https://huggingface.co/lab-cosmo/pet-mad/resolve/v1.1.0/models/pet-mad-v1.1.0.ckpt
Variance#
Added in version 2.2.
To enable per-atom energy uncertainty checks, set the uncertainty_threshold
parameter to a positive value. This parameter serves simultaneously as the
activation switch and the warning threshold.
This functionality supports models which expose an energy_uncertainty output
key.
If the configuration specifies a variant_base or variant_energy_uncertainty,
eOn will automatically target the corresponding variant key (e.g.,
energy_uncertainty/ensemble).
Variants#
Added in version 2.9.0.
Metatomic models frequently act as multi-headed neural networks, capable of
predicting properties corresponding to different levels of theory (e.g.,
energy/pbe0 versus energy/r2scan) or auxiliary outputs within a single model
file. The eOn interface permits precise selection of these output heads through
the [Metatomic] configuration block.
The implementation follows the upstream Metatomic
specification
where variants appear as suffixes to the base quantity (e.g.,
energy/<variant>).
Variant Configuration#
Three keys control variant selection:
variant_base: Appends the specified string to all requested outputs (energy, forces, and uncertainty). For example, setting this topbetargetsenergy/pbeandenergy_uncertainty/pbe.variant_energy: Overrides the energy selection specifically. Setting this takes precedence overvariant_base. Use the special valueoffto revert to the defaultenergyoutput even ifvariant_baseremains active for other quantities.variant_energy_uncertainty: Overrides the uncertainty selection specifically, functioning identically tovariant_energy.
Example#
To select a specific functional (e.g., PBE0) for both energy and uncertainty:
[Metatomic]
model_path = universal-potential.pt
variant_base = pbe0
To use a baseline potential for energy but a specific variance head for uncertainty quantification:
[Metatomic]
model_path = active-learning.pt
# Uses 'energy' (default)
variant_energy = off
# Uses 'energy_uncertainty/ensemble'
variant_energy_uncertainty = ensemble