Garden's Almanac of Matter Models

eSCN

January 2023

Checkpoint Params Polaris Sophia Perlmutter Delta Frontier Della
escn-l6-m2-lay12-s2ef-oc20-all-md
escn-l6-m3-lay20-s2ef-oc20-all-md 200M
escn-l6-m2-lay12-s2ef-oc20-2m
escn-l4-m2-lay12-s2ef-oc20-2m
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="escn-l6-m2-lay12-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.

escn_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"""
20eSCN environment for Rootstock.
21
22Uses fairchem-core 1.x to access legacy OC20 eSCN checkpoints via
23OCPCalculator. These checkpoints are optimized for catalysis systems
24(slabs + adsorbates).
25
26Models:
27 - "eSCN-L6-M2-Lay12-S2EF-OC20-All+MD": default
28 - "eSCN-L6-M3-Lay20-S2EF-OC20-All+MD"
29 - "eSCN-L6-M2-Lay12-S2EF-OC20-2M"
30 - "eSCN-L4-M2-Lay12-S2EF-OC20-2M"
31"""
32
33CHECKPOINTS = {
34 "escn-l6-m2-lay12-s2ef-oc20-all-md": "eSCN-L6-M2-Lay12-S2EF-OC20-All+MD",
35 "escn-l6-m3-lay20-s2ef-oc20-all-md": "eSCN-L6-M3-Lay20-S2EF-OC20-All+MD",
36 "escn-l6-m2-lay12-s2ef-oc20-2m": "eSCN-L6-M2-Lay12-S2EF-OC20-2M",
37 "escn-l4-m2-lay12-s2ef-oc20-2m": "eSCN-L4-M2-Lay12-S2EF-OC20-2M",
38 # Your own fine-tuned weights: pair with weights= (loaded via setup_from_path).
39 "escn:custom": None,
40}
41
42
43def setup(checkpoint: str, device: str = "cuda"):
44 """
45 Load an eSCN OC20 calculator.
46
47 Args:
48 checkpoint: Canonical checkpoint id, must be a key of CHECKPOINTS.
49 device: PyTorch device string (e.g., "cuda", "cpu").
50
51 Returns:
52 ASE-compatible OCPCalculator.
53 """
54 import os
55
56 from fairchem.core import OCPCalculator
57 from fairchem.core.models.model_registry import model_name_to_local_file
58
59 cache_dir = os.environ.get("XDG_CACHE_HOME", os.path.expanduser("~/.cache"))
60 local_path = model_name_to_local_file(CHECKPOINTS[checkpoint], local_cache=cache_dir)
61 return OCPCalculator(checkpoint_path=local_path, cpu=(device == "cpu"))
62
63
64def setup_from_path(path: str, device: str = "cuda"):
65 # Custom checkpoints (`:custom` ids with user weights): OCPCalculator loads a
66 # checkpoint file natively — this is setup() minus the registry download.
67 from fairchem.core import OCPCalculator
68
69 return OCPCalculator(checkpoint_path=path, cpu=(device == "cpu"))
70

Built on Polaris: 2026-07-31

Couldn't load the current environments from Rootstock.


References
  1. Passaro, Saro, Zitnick, C. Lawrence, Reducing SO(3) Convolutions to SO(2) for Efficient Equivariant GNNs, arXiv, 2023.