Three things can be split, and they split differently
Data parallelism runs the same model on different batches.
Tensor parallelism splits one matrix multiply across devices.
Pipeline parallelism puts different layers on different devices.
Which one to use is decided by what does not fit: the batch, a single layer, or the whole model.
A 70-billion-parameter model needs over a terabyte of optimiser state and gradients, so the question is never whether to distribute but how.
Data parallel, and its communication cost
Every device holds a full copy, processes its own shard of the batch, and the gradients are averaged before the step.
The averaging moves roughly twice the parameter count per step regardless of the number of devices, which is why it overlaps with the backward pass rather than waiting for it.
ZeRO shards the optimiser state first, then the gradients, then the parameters.
Fully sharded data parallel keeps the data-parallel structure and splits the memory, gathering each layer's parameters just before it is needed and releasing them after.
That converts a memory problem into a bandwidth problem, and it is the default for large model training today.
Tensor parallel
A matrix multiply splits along the output dimension with no communication, and along the input dimension with a sum afterwards.
Attention splits naturally, one head per device.
Transformers split cleanly because heads are independent and the feed-forward block is two matrices in sequence.
That costs two all-reduces per layer.
The cost is communication inside every layer, which means tensor parallelism is used within a machine over fast interconnect and almost never across machines.
Pipeline parallel, and the bubble
- : the number of pipeline stages.
- : the number of micro-batches.
Splitting by layer means stage two waits for stage one on the first batch, and the idle time at the start and end is the bubble.
Many small micro-batches shrink it, and they also shrink the arithmetic efficiency of each one, which is the trade.
One large run, in order
- Tensor parallel inside a node, where the interconnect is fastest.
- Pipeline parallel across a small number of nodes, if a stage still does not fit.
- Data parallel across everything else, with sharded optimiser state.
- Gradient checkpointing to trade recomputation for activation memory.
- Overlap every collective with computation, or the network becomes the bottleneck.
Using all three at once is called 3D parallelism.
That combination is what every frontier training run uses, and the ratios between the three are tuned to the specific cluster rather than chosen from a rule.
Model FLOPs utilisation is the number to watch. A well-tuned large run reaches 40 to 55 percent, and anything below 30 usually means communication is not overlapping.