tt-bio
affiliated★ featuredBoltz-2 biomolecular model for drug discovery on Tenstorrent Blackhole. Supports single-card and multi-card configurations — QuietBox (4×) and Galaxy (32×). Approaches physics-based FEP accuracy at 1000× the speed.
📋 Changelog
# Changelog All notable changes to TT-Bio are recorded here. Versioning is [SemVer](https://semver.org); releases are cut from a commit that has passed the on-hardware test suite (see `RELEASING.md`). ## [Unreleased] ### Added - **Protenix-v2 and OpenDDE now report per-chain-pair ipTM in `results.json`.** A multi-chain entry carries `pair_chains_iptm` and `chains_ptm`, the same two fields Boltz-2 already writes and in the same shape, for every sample rather than only the best one. Read `pair_chains_iptm[binder][target]` to score one named interface of a complex; the global `iptm` averages the whole interface, and on a two-chain target the two agree. The matrix was already computed to derive the per-chain averages and then dropped, so nothing about the fold changed: the same input gives the same coordinates, pLDDT, pTM and ipTM as before. Opened as #15 by @ssiddhantsharma; the diagonal (each chain's own pTM) and the device confidence path (`TT_PROTENIX_CONF_DEVICE=1`) were added on top of it. ## [0.9.0] - 2026-09-18 ### Added - **A preflight warning when a host OpenMPI is set up to break the bundled one.** tt-metal ships the OpenMPI it wants and single-host prediction needs no MPI setup; `OMPI_MCA_*`, `OPAL_PREFIX` or a foreign `libmpi` on `LD_LIBRARY_PATH` aborts it in `MPI_Init` before any Python runs. Every local-worker path now names what it saw and points at the `unset` line, and changes nothing for you. README gained the matching troubleshooting note. Reported in #12 by @ssiddhantsharma. - **`tt-bio --version`.** `-V` works too. Both print `tt-bio, version X.Y.Z` from the installed package metadata and exit, without importing ttnn or opening a card. ### Fixed - **A BoltzGen design spread over a full box now gets the same idle-thread parking a full box of folds does.** The design fan-out built its per-card worker environment itself, with its own copy of the cores-over-workers split, so it capped threads but never parked them: 32 single-chip design workers on a 64-thread host sat at a two-thread share spinning their OpenMP pools through every device sync, which is the one regime parking is for. It now takes that environment from `runtime.host_thread_cap_env`, the same builder `predict` and ESMC use. The thread cap itself is unchanged at every width, and an operator's own `OMP_NUM_THREADS` still wins. - **A host where the device bring-up lock file is not writable no longer brings chips up unserialized in silence.** `/tmp/tt-bio-device-open.lock` belongs to whichever account created it, so a second account on a shared box got a `PermissionError`, and tt-bio answered it by skipping serialization entirely with nothing printed. That is the exact race the lock exists to prevent: concurrent opens deadlock in the driver's `LockManager`, or bring a chip up remote-only so it throws on the first program dispatch. tt-bio now falls back to a per-uid lock file beside the shared one and says on std
Works on
blackhole
quietbox
galaxy