Skip to content

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 07 Aug 00:28
· 190 commits to main since this release

[0.6.1] - 2026-08-07

Design gets one verb: tt-bio design INPUT --model boltzgen|rfd3, mirroring tt-bio predict --model .... tt-bio gen still works unchanged and is now a hidden deprecated alias for
tt-bio design --model boltzgen. ESMC-300M/600M single-sequence embedding is trace-captured,
and RFD3 multi-card design no longer strangles itself on host threads: four cards aggregated
0.68x of a single card before, 3.48x after. --devices N is honoured on the single-card embed
and RFD3 design paths, where it had been ignored, and predict now says so out loud when a run
finishes on fewer cards than you asked for instead of quietly returning a slower result.

This release also merges back the v0.6.0 release commits, which were tagged but never landed on
main. For five days main reported version 0.5.0, shipped no 0.6.0 changelog entry, and
carried a tests/ file that aborted pytest collection so the host suite never ran.

Changed

  • Unified design CLItt-bio design INPUT --model boltzgen|rfd3 is now the single design
    command, mirroring tt-bio predict --model .... BoltzGen pipeline options (--steps,
    --config STEP key=val, --num_designs, --budget, --devices, --out_dir) moved onto the
    shared command as boltzgen-scoped flags (boltzgen is the default model, so existing
    single-model invocations need only swap the verb). The RFD3 checkpoint flag is renamed
    --golden_dir to --checkpoint, with the old spelling kept as a hidden deprecated alias for
    one release. The RFD3 engine modules moved from flat tt_bio/rfd3*.py files into a
    self-contained tt_bio/rfd3/ package mirroring tt_bio/boltzgen/; import tt_bio.rfd3
    resolves to the package. Numerics are bit-identical: this is a CLI, layout and docs change
    only. BoltzGen user documentation moved from the README to docs/boltzgen-design.md, and the
    README now has one Design section covering both models. (26cf293a)
  • fa77e884 predict: warn loudly when a run completes on fewer cards than requested, rather
    than silently returning the slower result.
  • 7bee7292 embed and ef0265ef rfd3: honour --devices N on the single-card path.

Deprecated

  • tt-bio gen — hidden from --help and prints a deprecation warning on stderr, then
    forwards every argument to BoltzGen unchanged. It still works; it will be removed in a future
    release. Use tt-bio design INPUT --model boltzgen instead (gen run X --output out becomes
    design X --model boltzgen --out_dir out).

Fixed

  • 280de387 tenstorrent: restore the bf16 construction defaults in fast mode. This was the root
    cause of ESMFold2 returning NaN confidence.
  • a657a636 boltz2: use one sample-chunk width for the whole diffusion trajectory and pad the
    short tail. Chunk width is not bit-inert, so a trajectory that changed width partway changed
    its own numbers.
  • 46b641e3 protenix: --trace was a silent no-op for --model protenix-v2; the predict
    worker now forwards it.
  • c7313862 worker: self-terminate when the spawning dispatcher dies, instead of outliving it
    and holding a card.
  • 69649a0e stderr filter: kill the nanobind-filter grandchild together with its parent.
  • 13107362 find_mmseqs: pair mmseqs with the colabfold_search actually in use.
  • 176fc85b embed: clean up the co-location nonce on failure, and stop accepting a missing
    shared file.

Performance

  • 3bb206e7, 11cbb13a ESMC-300M/600M: the single-sequence embed forward is captured as a ttnn
    trace, and the trace region is guaranteed at fleet load time. Measured 1.47x host-relative and
    bit-exact (2584548d).
  • 75fe28b3 rfd3: cap host thread pools in the design fan-out. Four co-resident single-card
    designs aggregated 0.68x before the fix and 3.48x after, the same thread-oversubscription
    class that --host_threads addressed for folds in 0.6.0.
  • 67786544, 78e1ebec embed: pin single-card visibility before the ttnn import, and raise the
    parallel npz writers to 32 threads.
  • 719807ef, 114f4b4d embed: co-located workers hand back result paths instead of pushing
    base64 through the controller.

Gates and documentation

  • cd891272 parity gate: pin the in-process harness legs to one card instead of the whole mesh.
  • 81128ae7 parity gate: derive worker locality from the real hostname. $HOSTNAME is not
    exported to non-interactive shells, so every non-pc host classified itself as remote and
    tried to ssh to itself.
  • cca9e030 parity: make the esmfold2-trpcage leg runnable on Wormhole.
  • e50f285e perf gate: seed the p300c baselines for opendde-abag and rfd3.
  • 3d6239ee parity docs: record the BoltzGen sampling bound and SaProt-1.3B near-pass.
  • Restored from the unmerged v0.6.0 release commits: the README documentation for
    --host_threads and --max_parallel_samples, the re-synced RELEASING.md accuracy floors, the
    qb1 p150a opendde-abag perf baseline, and the fix that stopped a tests/ script aborting
    pytest collection.

Release gate (Blackhole P150a on tt-quietbox, card 0)

Host suite: 241 tests collect and run (on main before the v0.6.0 merge-back, collection aborted
at 220 and no test executed). Full run 7 failed, 212 passed, 22 skipped; re-run one file per
process, six of the seven pass alone, the one-device-context-per-process false-failure class
from 0.6.0. The seventh, test_confidence_device_resident_parity, fails at PCC
0.9807124853748275, bit-identical at v0.6.0 and v0.5.0: pre-existing, not a regression in this
range. Packaging guard: 15/15 data files and 31/31 declared dependencies in the wheel and
sdist. UX gate: PASS on all 11 surfaces plus the CLI leg, including the deprecated gen alias
warning.

Accuracy gate — every shipped fold architecture folded end-to-end with production sampling
and checked against a per-model ground-truth floor, not self-consistency:

model RMSD (A) TM floor result
boltz2 1.555 0.942 <=3.0 / >=0.75 PASS
esmfold2 1.834 0.906 <=8.0 / >=0.40 PASS
esmfold2-fast 1.811 0.909 <=4.5 / >=0.60 PASS
protenix-v2 1.458 0.945 <=6.0 / >=0.50 PASS
opendde 1.350 0.953 <=6.0 / >=0.50 PASS

BoltzGen scRMSD 0.849 A at a 75% pass rate (floor <=2.0 A, >=50%); OpenDDE-abag DockQ 0.854
with fnat 0.922 (floor >=0.50); capacity leg peaked at 5.97 GiB against a 7.0 GiB budget,
writing all 50 samples. ESMC-300m/600m per-residue PCC 0.99961 / 0.99964, trace bit-exact.

Parity gate (scripts/full_parity_gate.py, 23 legs): 20 PASS, 3 GAP, 0 DRIFT, every leg
reproducing its committed verdict. boltz2-prot-nomsa and boltz2-affinity-fkbp12-nomsa reproduce
their committed GAP-evidenced verdicts. The third, protenix-ubq-msa, is newly accepted
GAP-evidenced (cf35cc15): the in-range MSA row-chunking for large MSAs changes bf16
summation order on exactly the one leg whose MSA crosses the 0.25 GiB chunk budget, and the
observed 2.015 A sits inside both the chunking commit's own measured envelope (mean 0.738 /
max 3.98 A) and this target's committed noise floor (max 2.993 A). Root cause and evidence are in
docs/implementation-parity.md.

Performance gate: PASS on a quiet host, 13 of 14 models within the +/-15% threshold —
boltz2 +0.2%, esmfold2 -1.7%, esmfold2-fast -1.5%, protenix-v2 -8.6%, opendde +2.0%,
opendde-abag +0.9%, esmc-300m +0.3%, esmc-600m +0.2%, esmc-6b +1.7%, saprot-650m -0.3%,
boltzgen -0.4%, boltz2-affinity -3.7%, rfd3 +2.9%. esmc-300m-single is a first seeded
tt-quietbox machine baseline
at 14.62 seq/s, not a compared number: its only prior baseline
was seeded on pc, and qb1's p150a reads ~30-36% slower on that leg from within-p150a machine
variance, which the machine-id baseline layer exists to absorb. A first run co-resident with a
CPU-only campaign read -10..-28% on every host-dispatch-heavy leg while the dispatch-light
control held +0.3%; the quiet re-run recovered all of them.