Garden's Almanac of Matter Models

EquiformerV2

January 2023

Checkpoint Params Polaris Sophia Perlmutter Delta Frontier Della
equiformer-v2-153m-s2ef-oc20-all-md 153M
equiformer-v2-31m-s2ef-oc20-all-md 31M
equiformer-v2-83m-s2ef-oc20-2m 83M
eqv2-31m-mp 31M
eqv2-31m-omat 31M
eqv2-86m-omat 86M
eqv2-153m-omat 153M
eqv2-31m-omat-mp-salex 31M
eqv2-86m-omat-mp-salex 86M
eqv2-153m-omat-mp-salex 153M
eqv2-dens-31m-mp 31M
eqv2-dens-86m-mp 86M
eqv2-dens-153m-mp 153M
verified, last 30 days installed, not recently verified not installed

No cluster has installed any checkpoint of this model yet.


Running this model
1# from a job or interactive session on a supported cluster:
2from rootstock import RootstockCalculator
3
4with RootstockCalculator(
5 cluster=YOUR_CLUSTER_ID, # eg, "polaris", "sophia"
6 checkpoint="equiformer-v2-153m-s2ef-oc20-all-md",
7 device="cuda",
8) as calc:
9 # model is now running in subprocess on compute node
10 atoms.calc = calc
11 atoms.get_potential_energy()

Environments

Rootstock runs each model family inside an isolated Python environment defined by a single file. This environment file includes the specific dependencies needed, plus a setup() function that loads the model and returns an ASE calculator. These files are usually almost identical for a given model family, but because of cluster-specific quirks (eg, an old CUDA driver) the dependencies and setup code can vary a bit.

equiformer_env.py
1# /// script
2# requires-python = ">=3.11,<3.12"
3# dependencies = [
4# "torch>=2.4.0",
5# "fairchem-core>=1.0.0,<2.0.0",
6# "ase>=3.22",
7# # scipy.special.sph_harm was removed in scipy 1.17 and fairchem-core 1.x
8# # still imports it — an uncapped rebuild breaks at import (Delta, 2026-07-18).
9# "scipy<1.17",
10# "torch-geometric",
11# "torch-scatter",
12# "torch-sparse",
13# "torch-cluster",
14# ]
15#
16# [tool.uv]
17# find-links = ["https://data.pyg.org/whl/torch-2.4.0+cu121.html"]
18# ///
19"""
20EquiformerV2 environment for Rootstock.
21
22Uses fairchem-core 1.x to access legacy OC20 EquiformerV2 checkpoints via
23OCPCalculator. These checkpoints are optimized for catalysis systems
24(slabs + adsorbates).
25
26Models:
27 - "EquiformerV2-153M-S2EF-OC20-All+MD": default
28 - "EquiformerV2-31M-S2EF-OC20-All+MD"
29 - "EquiformerV2-83M-S2EF-OC20-2M"
30"""
31
32CHECKPOINTS = {
33 "equiformer-v2-153m-s2ef-oc20-all-md": "EquiformerV2-153M-S2EF-OC20-All+MD",
34 "equiformer-v2-31m-s2ef-oc20-all-md": "EquiformerV2-31M-S2EF-OC20-All+MD",
35 "equiformer-v2-83m-s2ef-oc20-2m": "EquiformerV2-83M-S2EF-OC20-2M",
36 # Your own fine-tuned weights: pair with weights= (loaded via setup_from_path).
37 "equiformer:custom": None,
38}
39
40
41def setup(checkpoint: str, device: str = "cuda"):
42 """
43 Load an EquiformerV2 OC20 calculator.
44
45 Args:
46 checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.
47 device: PyTorch device string (e.g., "cuda", "cpu").
48
49 Returns:
50 ASE-compatible OCPCalculator.
51 """
52 import os
53
54 from fairchem.core import OCPCalculator
55 from fairchem.core.models.model_registry import model_name_to_local_file
56
57 cache_dir = os.environ.get("XDG_CACHE_HOME", os.path.expanduser("~/.cache"))
58 local_path = model_name_to_local_file(CHECKPOINTS[checkpoint], local_cache=cache_dir)
59 return OCPCalculator(checkpoint_path=local_path, cpu=(device == "cpu"))
60
61
62def setup_from_path(path: str, device: str = "cuda"):
63 # Custom checkpoints (`:custom` ids with user weights): OCPCalculator loads a
64 # checkpoint file natively — this is setup() minus the registry download.
65 from fairchem.core import OCPCalculator
66
67 return OCPCalculator(checkpoint_path=path, cpu=(device == "cpu"))
68

Built on Polaris: 2026-07-31

Couldn't load the current environments from Rootstock.


References
  1. Liao, Yi-Lun, Wood, Brandon, Das, Abhishek, Smidt, Tess, EquiformerV2: Improved Equivariant Transformer for Scaling to Higher-Degree Representations, arXiv, 2023.