Two independent theoretical roads — online convex optimization and natural-gradient descent — converge on the same Kronecker-factorization trick. This paper is the systems engineering that finally makes it cheap enough to run at scale.
Full-matrix AdaGrad's preconditioner for one layer this size would be 16M×16M — the bar below is capped and annotated, not to scale.
Instead of one dense preconditioner per layer, Shampoo factors it into two much smaller matrices — one per input dimension, one per output dimension — and inverts each separately.
Diagonal optimizer state is cheap enough to copy on every worker. Shampoo's factor matrices are not — so each worker owns and computes only a shard, greedily load-balanced by parameter size.
Each worker computes its shard of search directions, then a single AllGather (via PyTorch DTensor) reunites the full set before the parameter update.