Distributed learning#
Alpha compiles one learning system into a set of cooperating native programs, one for each participant in a run. Distribution is not a library wrapped around a model. It is a transformation the compiler performs and checks: of what the state means, of who owns each part of it, and of the schedule that moves it.
The same system can be paired with:
- one GPU, or two identical GPUs;
- two unequal GPUs on separate machines;
- host processes on different instruction sets.
Changing the pairing changes how the system is realized. Changing the learner changes what is learned. The compiler keeps the two apart.
This section explains how that works today, piece by piece, and is exact about what has been checked, executed and physically run.
Why it matters#
- Every run is the same run. The reduction order is part of the program, so resume, repartitioning and mixed instruction sets reproduce the same bits.
- Nothing to install. Each participant is one self-contained executable. A GPU machine needs Linux and the NVIDIA kernel driver, not CUDA, NCCL, MPI or Python.
- Failures are refused by name, at compile time, on the first message, at start-up and at resume, before they can corrupt state.
- State is portable. Checkpoints are indexed by logical identity and can resume on a different number of owners.
- Built to scale without a coordinator. Membership, hierarchy and checkpoint metadata are bounded by fan-out, and are checked at 200,000 roles.
The cost is real: distributed runs are small, host-staged and not yet timed. Benefits and tradeoffs makes the case in full and weighs it honestly.
Three kinds of "multi"#
| Axis | Meaning | Where it stands |
|---|---|---|
| Multi-device | Several GPUs contribute to one update of one learner | Two GPUs per run, physically qualified on RTX 3070s and on a 3070 + 3090 pair |
| Multi-host | Participants run on separate machines and exchange frames over the network | Two GPU hosts physically, over an SSH-relayed TCP path; up to ten host processes in CI |
| Hybrid | Participants differ: unequal GPUs, or different host instruction sets | 3070 + 3090 physically; x86-64 + AArch64 in CI, with AArch64 emulated |
Different vendors (NVIDIA with AMD or Apple) in one run is the next physical milestone. It is not built yet.
How a run fits together#
- The system declares its model, learner and state, with no device, host or address anywhere in them.
- The distribution plan names:
- the roles, the membership and the topology (a pair, a star or a hierarchy);
- the protocol: what each role sends, receives and computes in each round;
- the combine tree, the numerical contract, and which owner holds which state.
- A pairing per role chooses the host target (x86-64 or AArch64), and for a GPU role the device profile, and admits the role's demands against them.
- Deployment inputs (the exact card's minor and UUID, the peer address and port, resume or fresh) are compile-time arguments.
- The compiler emits one executable per role. Each contains its own connection setup, its projected schedule, its frame checks, its GPU host program and its checkpoint code.
- At run time the participants connect to each other, exchange bounded frames, combine contributions in the declared order, and apply the update. A checkpoint is published only when every owner's piece belongs to one capture.
- A fresh process resumes from the published checkpoint, or evaluates from it.
There is no coordinator service, no Python controller, no MPI or NCCL, and no vendor runtime. A deployment tool copies the executables and starts them. It does not decide what is computed.
The invariants#
These hold for every distributed composition. Most are enforced by the compiler; the rest are checked by the runtime guards it emits.
- Model and learner semantics contain no device product, driver, endpoint, command descriptor or launch address.
- Every state mutation has one logical owner and a version. A replica is never a second authority.
- Communication is explicit in the typed plan, including completion, visibility and failure.
- A distributed rewrite declares exact or approximate semantics; a schedule cannot silently change the mathematics.
- Missing target support fails by name. Host transport is allowed. Computing an unsupported accelerator operation on the host is not.
- Persisted state is indexed by logical identity, not by rank, address or shard count.
- A failed round commits nothing.
Vocabulary#
| Term | Means |
|---|---|
| Participant | One running executable of the system |
| Role | A participant's logical identity, 0 to n − 1; not a device |
| Owner | The role that holds, and alone may change, a piece of state |
| Membership | The set of roles in a run, with its epoch; fixed for the run |
| Topology | Who exchanges with whom: a pair, a star around role 0, or a bounded-fan-out hierarchy |
| Frame | One bounded, identity-checked message between two participants |
| Combine | An ordered numerical tree that reduces contributions |
| Numerical contract | The formats, rounding and operation order a result is defined by |
| Capture | The epoch, update number and input cursor a checkpoint was taken at |
| Pairing | One role built for one target and, for a GPU, one device profile |
What has been established#
| Capability | Checked (laws) | Executed natively (x86-64) | AArch64 (emulated) | Physical GPUs |
|---|---|---|---|---|
| Endpoints, frames and refusals | ✓ | ✓ | ✓ | Two 3070s; 3070 + 3090 |
| Projected protocols and agreed choices | ✓ | ✓, three processes | ✓ | — |
| Ordered combine, star and hierarchy | ✓ | ✓, up to ten owners | ✓ | Two owners |
| Samples-partitioned learner | ✓ | ✓ | — | Two 3070s; 3070 + 3090 |
| Coordinate-owned learner, GPU-resident state | ✓ | ✓ | ✓ | Two 3070s; 3070 + 3090 |
| Independent-state learner | ✓ | ✓, 2–10 owners | ✓ | Two 3070s |
| Data parallelism, star and hierarchy | ✓ | ✓ | ✓ | — |
| Optimizer-state, parameter and gradient partitioning | ✓ | ✓ | ✓ | — |
| Manifest-tree checkpoints | ✓ | ✓ | ✓ | — |
| Repartitioned restore (4 → 3 → 5 owners) | ✓ | ✓ | ✓ | — |
| 200,000-role membership and hierarchy | ✓ | — | — | — |
| Cross-vendor (AMD, Apple) | — | — | — | — |
The 3070 + 3090 runs (3 October 2026) qualified the implementation of that date. The merged tree was requalified on two RTX 3070s on 13 October 2026 across all three GPU lanes. On 14 October the host executables were made about twenty times smaller (shared routine code, compact SHA-256, a compressed image unpacked at start-up); executables built since then have passed every host gate but have not yet run on GPUs. No result on this page is a performance claim. Qualifying on real hardware lists every physical record.
Where the code lives#
| Concern | Owners |
|---|---|
| Membership and topology | Representation.ParticipantGroup, Representation.ParticipantTree |
| Connections and sockets | Runtime.NativePeerEndpoint, Runtime.NativePeerTree, Runtime.NativeSocketPlan |
| Frames | Runtime.RegionFrame, Runtime.NativeRegionFrame |
| Protocols | Runtime.Protocol, Compiler.Planning.Protocol, Runtime.NativeProtocol |
| Combining | Runtime.OrderedCombine, Compiler.Planning.OrderedCombine, Runtime.NativeCombine, Learning.Numerics |
| Learners | Learning.DataParallel, Runtime.NativeDataParallel, Runtime.NativeDataParallelOwned, Runtime.NativeIndependentState |
| Checkpoints | Checkpoint.RegionManifest, Checkpoint.NativeRegions, Checkpoint.NativeTreePublication |
| Hosts and devices | Runtime.NativeHostTarget, Platform.Linux.Nvidia.DeviceBinding, Platform.Linux.Nvidia.ResourcePlan, Execution.ResourceGraph |
| Systems that use them | partitioned-regression (samples, coordinates, data parallelism), local-correlation (independent state) |
Read the section#
- Benefits and tradeoffs: the case for this design, and its pros and cons.
- Participants, endpoints and frames: roles, membership, topologies, connections, frames and protocols.
- Combining contributions: ordered combine trees, delivery, and numerical contracts.
- Distributing learning state: the learners, and partitioning of optimizer state, parameters and gradients.
- Distributed checkpoints and resume: publication, manifest trees, restore and repartitioning.
- Hybrid hosts and multiple GPUs: mixed instruction sets, device binding, unequal devices and memory admission.
- Qualifying on real hardware: the physical driver, its controls, and every result.
- Toward 200,000 devices: the fleet design target and what already exists for it.
The full product requirements and design are in docs/multi-device-learning/: 22 chapters, the implementation handoff, and the tracker.