DRAFT — not yet reviewed for publish. Every number here is quoted from the run records in the measurement write-ups; verify against those records before deploying.

Two Macs, one adapter

caletta labs · measured · small run

The claim underneath everything we build is that machines people hold can train one model together without a datacenter coordinator. That is a claim you measure, not a claim you argue. So we measured it in the smallest configuration that still counts: two consumer Apple Silicon machines, a real model, a real network path between them, and no datacenter coordinator.

The run

Each machine independently fine-tuned a LoRA adapter, rank 2, on Qwen3-0.6B-4bit. After each round the machines exchanged adapters over the peer-to-peer transport built on mlx-go-iroh and robust-merged what they received. Three rounds ran to completion. In all three, the merged adapter was byte-identical on both hosts: the same file, to the last bit, computed on two machines that never shared more than the adapters themselves. Validation loss fell from 6.07 to 2.23 across the rounds without collapsing to zero.

Why byte-identical is the interesting part

Byte equality of a floating-point computation on two independent machines is not the default outcome. Floating-point addition is not associative; summation order, fused multiply-add, parallel reduction, and serialization metadata all change bytes. Getting the same bytes on both hosts means the merge behaves like a miniature reproducible build: operands in, one canonical file out, on any conforming machine. That turns the merged-adapter hash into an agreement object. A round succeeds when both hosts write the same hash (the recorded rounds: b1f9613c, 3c499c33, 1ca76dfb), and any disagreement is a signal, not a shrug. The conditions under which this property holds, and the ways real implementations silently break it, are worked out in a companion analysis with a pre-registered cross-architecture test plan.

The failure ladder

The run also produced failures, and they are part of the record. Moving the adapter, not training and not merging, was the wall: 93.8 seconds of a 95-second round, 98.7 percent, went to pushing 2.5 MB through a whole-value store protocol over a QUIC relay path, an effective rate near 0.027 MB/s. A base64 expansion stalled QUIC flow control between real machines while the same test passed on loopback, which is exactly why loopback results are labeled loopback results. And a rank-4 attempt with a 10 MB adapter failed on the relay path before merge: a transport-scale limit, not a convergence result, and recorded as such.

The fix is designed, not hand-waved: a streaming binary-frame store protocol with resumable verified transfers, an analytical latency model calibrated against this run, and pre-registered pass bars. The 10 MB case that failed must complete, and the effective rate must beat the measured workaround by at least five times, or the design is wrong.

What this does not show

Two machines we control, a small model, a tiny adapter rank, three rounds, no adversarial peers. It is not a swarm, it is not permissionless scale, and the end-to-end harness that replays the whole run from raw manifests is still owed. What it does show is the boundary crossing: a commodity node contributed real adapter weights to a shared model over a real network, and both sides could prove they agreed on the result. The run is small. It is also real, and its failures ship with it.

The full write-ups, with run records, are in preparation for publication. The transport is public today: mlx-go-iroh over go-iroh.

← groundwork · travis@tmc.dev