Open in tt-awesome →

tt-atom

affiliated
by moritztng · Python · MIT · 26⭐ ·
tt-atom preview

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.

📦 Repo
LATEST v0.2.1 2026-07-20T11:06:13Z Release notes ↗
2 previous releases
v0.2.0 2026-07-11T07:47:26Z
v0.1.0 2026-07-08T19:08:02Z
See all releases on GitHub ↗
# 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
molecular-dynamics interatomic-potential mlip uma ase inference custom-kernel
blackhole