Hiding communication behind computation in LLM training has been tried with fused kernels and with graph schedulers, each missing what the other sees — Centauri observes that any collective can be partitioned three ways (substitute the primitive, split the device group, chunk the workload) and schedules the pieces at operation, layer, and model tiers, for up to 1.49× faster training.
The argument in one glance
-
Problem
Hybrid parallelism means hybrid communication
Training a large language model spreads work by data parallelism (gradient allreduce), tensor parallelism (activation collectives), pipeline parallelism (activation sends), and fully-sharded data parallelism (weight allgathers and gradient reduce-scatters) — often all at once. Each injects collectives into the graph, and on clusters where inter-node bandwidth is a fraction of intra-node NVSwitch bandwidth, communication becomes a large share of every training step.
-
What people did
Overlap it: schedule coarsely or fuse finely
Frameworks overlap collectives with computation by graph-level scheduling (prefetch weights early, reduce gradients during backward — PyTorch FSDP, ZeRO, Megatron-LM), by multi-stream concurrency, or by compiler-level kernel fusion that splits a collective and its neighbor computation into interleaved chunks (CoCoNet, the decomposition approach).
-
Why it fell short
Each method sees only a slice of the overlap space
Coarse graph scheduling leaves visible idle gaps — whole collectives wait on whole computations. Fine kernel fusion optimizes one operator pair but can lose globally: the paper’s opening example shows a plain MatMul finishing before its cleverly-fused equivalent because fusion forecloses a better graph-level order. Single-parallelism schedulers cannot navigate hybrid mixes where forward and backward passes want different strategies.
-
This paper's idea
Partition communication in three dimensions, schedule in three tiers
A collective is just a mapping of a workload across a device group — so it can be partitioned by primitive substitution (allreduce → reduce-scatter + allgather…), group partitioning (topology-aligned sub-groups), and workload chunking. Prior methods’ spaces are subsets of this one; even SP and ZeRO fall out as points in it. A hierarchical scheduler then optimizes cheaply at operation, layer, and model tiers, exploiting LLMs’ repetitive structure. Result: up to 1.45× on single-parallel and 1.49× on hybrid LLaMA training across two clusters, up to 256 GPUs.
Why this problem is worth solving
This page completes a trilogy on this site. CoCoNet (ASPLOS 2022) broke the computation/communication abstraction barrier with a DSL and fused GPU kernels; Google’s decomposition work (ASPLOS 2023) made overlap automatic in XLA for TPU pods. Centauri arrives at the GPU-cluster frontier where LLM training actually happens — hybrid parallelism on heterogeneous networks — and argues both prior philosophies explore corners of a larger space.
The setting: pre-training scales by combining
running data parallelism (replicate the
model, allreduce gradients), tensor parallelism (split layers,
communicate activations), pipeline parallelism (split the model into
stages, send activations), and fully-sharded data parallelism/ZeRO
(shard weights and optimizer state, allgather weights before use,
reduce-scatter gradients after) simultaneously
The paper’s survey table makes the fragmentation concrete: each prior system — Megatron-LM, DeepSpeed ZeRO, PyTorch FSDP, out-of-order backprop, breadth-first pipelines, CoCoNet, Dist-Einsum — exercises a subset of the possible partitioning and scheduling dimensions. Nobody had named the whole space, let alone searched it.
What people did before, and where it broke
Graph-level scheduling. FSDP prefetches the next layer’s weight allgather during the current layer’s compute; ZeRO overlaps gradient reduction with backward. Effective but coarse: whole collectives overlap whole computations, and the paper’s Figure-1 timeline shows the tell-tale idle gaps when a collective outlasts its computation partner.
Multi-stream concurrency. Running collectives on parallel GPU streams (Better-Together-style) parallelizes communication with communication, not with computation — a narrower win.
Fine-grained kernel fusion. CoCoNet and the decomposition approach split a collective and its dependent matmul into chunks inside fused kernels — powerful for that pair, but locally greedy: Centauri’s motivating example shows the unfused MatMul B finishing earlier under a better graph-level order than the fused kernel achieves. Fusing an operator pair forecloses reorderings around it.
Single-parallelism focus. Most schedulers optimize one parallelism’s pattern. Hybrid reality is messier: the best backward schedule under tensor parallelism (activation gradients first) differs from the best under FSDP (weight gradients first) — a choice prior systems hard-coded one way.
Centauri: a partition space and a scheduling hierarchy
-
Dimension 1: primitive substitution new
Rewrite collectives into equivalent sub-primitives: allreduce → reduce-scatter + allgather (or reduce + broadcast); reduce-scatter → per-root reduces; allgather → per-root broadcasts. Costed and pruned (unrooted forms preferred — root ranks become contention hotspots). A lovely aside: substituting DP’s allreduce and repositioning the allgather past elementwise ops literally derives ZeRO-1/2 and sequence parallelism from DP and TP.
-
Dimension 2: group partitioning new
Split the device group into a topology-aligned mesh of sub-groups (e.g., intra-node × inter-node), so a collective becomes iterated sub-collectives. Pruned by network reality: sub-groups with unbalanced bandwidths are excluded, and splits that would break NCCL’s carefully-built ring channels are avoided.
-
Dimension 3: workload partitioning new
Chunk the tensor itself, splitting the collective and its adjacent computation into a chain of overlappable pieces — with chunk counts bounded because too-fine partitions drown in kernel-launch and data-movement overheads.
-
Scheduling tier 1 — operation (forward) new
Per collective, greedily pick the partition + schedule with minimal modeled cost: chunk counts sized to the ratio of communication to independent-computation cost; uneven intra/inter-node splits launched in the order that hides the slow part.
-
Tiers 2 and 3 — layer (backward) and model new
Layer: choose between activation-gradient-first (best for TP) and weight-gradient-first (best for FSDP prefetch) by comparing two closed-form cost expressions. Model: partition the DP allreduce into allgather-overlapping-forward and reduce-scatter-overlapping-backward, and pick how many pipeline micro-batches launch together — between memory-minimal depth-first and overlap-maximal breadth-first — under the device memory budget.
The idea
Name the space first. Centauri’s conceptual move is the observation that a collective is nothing but a mapping transformation of a data volume across a device group — so there is nothing sacred about its granularity. It can be rewritten (primitive), subdivided across machines (group), or sliced across data (workload), and any combination preserves semantics. The three dimensions are searched in that order because each stage’s choice sets the cost model for the next. Two satisfying corollaries: the optimization spaces of eight prior systems are subsets of this space, and famous parallelism strategies themselves — ZeRO-1/2, sequence parallelism — turn out to be specific substitution-and- repositioning choices within it. What the field treats as distinct algorithms, Centauri treats as coordinates.
Prune with topology, not hope. The space is huge, and much of it is bad. Pruning rules encode network physics: rooted primitives lose to unrooted ones as device counts grow (root contention); sub-groups mixing fast and slow links are excluded (the slow link sets the pace); chunk counts are capped (launch overhead); on some architectures finer group splits would fragment NCCL’s ring channels and are rejected. What survives is a tractable menu of genuinely plausible partitions.
Schedule where the structure is. A global schedule over a partitioned billion-parameter graph is intractable — but LLMs are towers of identical layers trained with gradient accumulation, so the problem factorizes. Operation tier: within a forward layer, each collective greedily picks its best partition-and-overlap scheme (Algorithm 1 sizes chunks by the communication-to- independent-compute ratio and orders intra/inter-node pieces). Layer tier: the backward pass has a natural binary choice — activation gradients first (the classical order, right for TP) or weight gradients first (right for FSDP, whose next-layer weight allgather wants to start early) — decided per configuration by comparing two cost formulas. Model tier: the DP gradient allreduce is split into an allgather hidden under the next forward pass and a reduce-scatter hidden under backward, chunk-by-chunk; and in pipelines, the number of micro-batches launched together interpolates between depth-first (minimum activation memory, minimum overlap) and breadth-first (maximum both) — chosen to maximize overlap within the memory budget.
Different clusters, different winners — automatically. Because every choice is costed against the actual topology, the same model gets different schedules on the bandwidth-starved Cluster A (25 Gb/s/device inter-node) and the well-fed Cluster B (100 Gb/s) — and the gains concentrate exactly where bandwidth is scarce, which is where they are needed.
One training step of LLaMA under FSDP + DP, Centauri-scheduled
FSDP = weights sharded; each layer needs a weight allgather before use and a gradient reduce-scatter after backward. DP = replica groups needing gradient allreduce. AG/RS = allgather/reduce-scatter. Cluster A: 600 GB/s intra-node, 25 Gb/s per device inter-node. The walkthrough composes the paper's Figures 1, 6, and 7.
Step 1 of 6
Partition: rewrite before you schedule
The DP allreduce is substituted by reduce-scatter + allgather — not for kernel fusion, but so its halves can hide under DIFFERENT phases (RS under backward, AG under the next forward). FSDP’s weight allgathers get group-partitioned into an intra-node stage (fast, on NVSwitch) and an inter-node stage (slow, on InfiniBand), and workload-partitioned into chunks per weight tensor.
AR → RS + AG (phase-splittable) AG → [intra-node × inter-node] × chunks
Why it works
- A collective is a workload mapping over a group → partitioning by primitive, group, and workload preserves semantics while multiplying overlap opportunities → the spaces of eight prior systems (and even ZeRO/SP themselves) become searchable points rather than competing doctrines.
- Topology-aware pruning encodes network physics → unbalanced sub-groups, rooted contention, and over-fine chunks are excluded a priori → the surviving space is small enough for greedy, per-collective decisions.
- LLM structure factorizes the schedule → identical layers and gradient accumulation let three cheap tiers (operation, layer, model) compose into a global schedule → no monolithic graph-scheduling problem is ever solved.
- The backward pass has a genuine binary degree of freedom (activation- vs weight-gradient priority) → costing it per configuration instead of hard-coding captures wins that single-parallelism schedulers structurally miss.
- Overlap potential is bounded by concurrent computation → the micro-batch count knob converts spare activation memory directly into hidden communication → memory, not cleverness, becomes the binding constraint, and it is spent deliberately.
What it costs
- Search and modeling machinery. Cost models for every partition scheme, per topology; greedy tier-wise choices are cheap but the framework must be maintained against evolving NCCL/cluster behavior.
- Memory spent on overlap. The model-tier knob deliberately raises activation memory (more concurrent micro-batches) to buy overlap — capacity that competes with model size and batch size.
- Kernel-launch granularity limits. Chunking is capped by launch overheads; on very fast networks the whole approach yields little (~5% at 256 GPUs on Cluster B) because there is little to hide.
- Greedy, not optimal. Operation-tier decisions are sequential and local; the hierarchy trades global optimality for tractability.
- Training-loop scope. The techniques lean on LLM regularity (uniform layers, gradient accumulation); irregular models or inference serving are outside the demonstrated envelope.
The evaluation
LLaMA models at four sizes trained under FSDP, DP, FSDP+DP, and TP+PP+DP on two deliberately different clusters: Cluster A (8× A100-80G per node, 600 GB/s NVSwitch intra-node, but PCIe 3.0 hosts and a shared InfiniBand HDR port — 25 Gb/s per device inter-node) and Cluster B (4× HDR ports — 100 Gb/s per device), scaling to 256 GPUs. Baselines: Megatron-LM, DeepSpeed ZeRO-1/2/3 with direct overlap, and per-configuration overlap variants.
Three generations of communication-computation overlap
| Property | Graph-level scheduling (FSDP/ZeRO/Megatron) | Fine-grained kernel fusion (CoCoNet / decomposition) | Centauri (partition + hierarchical scheduling) |
|---|---|---|---|
| Unit of overlap | |||
| Hybrid-parallel awareness | |||
| Measured gains (LLaMA) | Baseline | ||
| Where it struggles | Duration-mismatched pairs; heterogeneous networks | Graph-level opportunities beyond the fused pair |
Check your understanding
1. Centauri’s opening example shows a plain, unfused MatMul finishing EARLIER than the same MatMul fused with its allgather by a CoCoNet-style kernel. How can fine-grained fusion lose?
2. Substituting DP’s allreduce with reduce-scatter + allgather, then repositioning the allgather past elementwise operations, "derives ZeRO-1/2 and sequence parallelism from DP and TP." What is the significance of this observation?
3. Backward passes traditionally compute activation gradients before weight gradients. Why does Centauri sometimes flip this order under FSDP?
4. At the model tier, Centauri launches MORE pipeline micro-batches together than memory-minimal depth-first scheduling would. What is being purchased, and with what currency?