tt-atom
affiliated
Meta's UMA interatomic potential running on Tenstorrent Blackhole — energy, forces, and stress for molecules and periodic materials behind an ASE calculator. Its per-edge Wigner rotation runs as a custom tt-metal kernel for a highest-performance uma-s build.
Links
📦
Repo
Releases
See all releases on GitHub ↗
📋 Changelog
# Changelog All notable changes to TT-Atom are recorded here. Versioning is [SemVer](https://semver.org); releases are cut only from a commit that has passed the on-hardware release gate — accuracy parity, no OOM across the supported size range, no perf or UX regression, and a clean install smoke (see `RELEASING.md`). ## Unreleased ### Added - **Multi-card data-parallel fan-out for `tt-atom run`**: pass several structure files with `--devices 0,1,...` and each card runs a full `Calculator` + relax/MD loop (or the single-point energy default) for its shard of structures — the high-throughput virtual-screening path. Per-structure results come back in input order, bit-exact vs the single-card path (`scripts/_multicard_sim_parity.py`); without `--devices`, multiple structures run one after another on one card. `--out` is a directory in batch mode and each written geometry carries its energy and forces. The new `tt_atom.batch.MultiCardSim` pool backs the CLI and is usable directly; `scripts/multicard_sim_scaling.py` measures the throughput scaling. - Orb's batched path (`evaluate_batch`) now applies ZBL pair repulsion union-wide through one autograd pass, matching the per-system path at short contact. ### Fixed - `tt-atom run a.xyz b.xyz --relax --devices 0` with two **different-composition** structures no longer crashes the worker. The multicard worker builds one UMA `Calculator` per reduced composition and used to call `open_device` once per `Calculator`, so a second composition opened the same card a second time in one process (`TT_FATAL: No MetalContext instance for context_id N`). The worker now opens its device once and reuses it across every `Calculator` it builds; the `Calculator.close()` it owns never closes a device it didn't open. - `tt-atom run` (multicard) now exits non-zero when any structure fails. The worker has always caught per-structure errors and returned the other structures' results, but the CLI used to exit 0 regardless, so a failed structure silently dropped its output. It now reports which structures failed and exits non-zero while still writing the ones that succeeded. - Built wheels now include both weight exporters, so automatic UMA and Orb cache misses work outside a source checkout. - Fresh UMA and Orb cache misses can download their checkpoints again; explicit `HF_HUB_OFFLINE=1` still enforces offline use. Concurrent exports now use separate sidecars. - Release mode now blocks every missing fixture, baseline, required op, and model-family OOM row. `--allow-gaps` remains available for development diagnostics. - Release and UX subprocesses always open logical device 0 after `TT_VISIBLE_DEVICES` selects the physical card. - Custom-op validation now rejects invalid gate modes and shapes, and program-cache keys include every operand layout that affects compiled accessors. - The silicon-melt example now checks the exact-cutoff neighbour graph every step and recaptures only when
Works on
blackhole