A frontier model is far too big for one GPU. This is how labs split the model — and the batch — across hundreds of chips, so a 7.5-billion-parameter model that needs 120 GB trains on 80 GB cards. Play with each split and watch the memory per GPU fall.
The simplest split: put a full copy of the model on every GPU, feed each a different slice of the batch, then average their gradients so all copies stay identical.
all-reduce = each GPU sends its gradients and gets back the sum.)When the model itself won't fit on a card, you cut it up. There are two ways, and a real run uses both at once.
Data parallel wastes memory: every GPU keeps an identical copy of the params, gradients and optimizer state. ZeRO — and PyTorch's FSDP — stops the duplication, sharding those three across GPUs and gathering each piece only when it's needed.
You've split the model across the cluster. Next: the optimizer that spends all that memory — from AdamW to Muon, the newer optimizers that update weights as whole matrices, not loose numbers, and train large models faster for the same compute.