Splitting a model across 16 GPUs
From Chapter 46 of Large Language Models from the Ground Up. No single seam suffices at scale, so real runs stack three: data, tensor, and pipeline parallelism. Toggle each on and watch 16 GPUs re-partition a model — and watch the memory per GPU and the network traffic change with it.
Toggle the three seams; degrees auto-factor to 16 GPUs
Each GPU tile is coloured by pipeline stage (hue) and tensor slice (shade); the outlined boxes are data-parallel replicas. The badge shows DP×TP×PP = 16. Memory and communication are computed for a 16-billion-parameter model at 16 bytes/parameter.
Memory per GPU (weights + optimizer)
What crosses the wire
Turn on only Data parallel and every GPU is a full copy: 256 GB of training state each — far past an 80 GB GPU, which is precisely why 70B "can't fit" and why ZeRO/FSDP shards the copies. Turn on Tensor or Pipeline and the model is genuinely cut into pieces: params-per-GPU falls as 1/(TP×PP), and the memory drops with it. But each seam bills the network differently — DP all-reduces gradients once per step, TP synchronises every layer (so it stays inside one node), PP passes only small activations between stages (so it spans machines). The book's canonical fleet stacks all three — TP=8, PP=16, DP=80 = 10,240 GPUs on one model — nesting the chatty seam inside the fast links and the frugal one across the slow ones. This explorer shows the same logic at 16 GPUs, where the factors stay small enough to see.