Dobb: Shard-Local Preconditioning in Block-Diagonal Eigenbases
Organizations: Department of Computer Sciences, University of Wisconsin–Madison, Madison, WI, USA · Meta FAIR, Menlo Park, CA, USA
Abstract
Training language models whose parameters and optimizer state exceed a single node's memory requires sharding these tensors across devices. Under tensor parallelism (TP) or fully sharded data parallelism (FSDP), matrix-aware optimizers such as Muon introduce communication to perform global matrix operations across shards. We propose Dobb (Distributed Optimizer with Block-diagonal Eigenbases), a matrix-aware optimizer designed to compute updates locally within parameter shards. Dobb approximates the input-activation second moment with diagonal blocks and tracks a complete basis within each block. It projects momentum into these bases, applies sign normalization to the coefficients, and reconstructs the update. When each block lies within one shard under TP or FSDP, Dobb applies its matrix update locally, requiring no communication beyond data-parallel synchronization of the activation second moments. We benchmark Dobb against Dion, a distributed matrix-aware optimizer designed to retain the benefits of orthonormalized updates while reducing communication. On GPT-2 XL (1.56B parameters), Dobb with 16 blocks reaches a validation loss of 2.476, compared with 2.511 for Dion at rank fraction 1/16. Under FSDP on 32 H100 GPUs, Dobb reduces the amortized optimizer-call time from 124.1 ms for Dion to 9.2 ms.
Figures & tables
| (a) Sign of a matrix | ||
| Orthogonality | ||
| Effective rank of | ||
| 80% | 0.736 | 0.775 |
| 50% | 0.412 | 0.643 |
| 20% | 0.205 | 0.543 |
| 5% | 0.109 | 0.457 |
| Dobb blocks | Dobb orthogonality | Dion rank | Dion orthogonality |
| 1 | 0.849 | 768 | 0.804 |
| 4 | 0.834 | 192 | 0.427 |
| 16 | 0.815 | 48 | 0.208 |
| Method | Optimizer-specific cross-shard payload |
|---|---|
| Muon, dense exchange | |
| Dion, rank | |
| Dobb |
| Optimizer | Blocks / rank fraction | Small | Medium | Large | XL |
|---|---|---|---|---|---|
| AdamW | n/a | 3.044 | 2.761 | 2.606 | 2.497 |
| Muon | full | 3.004 | 2.725 | 2.574 | 2.460 |
| RMNP | n/a | 3.083 | 2.778 | 2.618 | 2.499 |
| Dion | 3.002 | 2.720 | 2.568 | 2.453 | |
| 3.038 | 2.754 | 2.596 | 2.481 | ||
| 3.108 | 2.802 | 2.636 | 2.511 † |
| Optimizer call (ms) | Iteration (ms) | ||||||||||||
| Model | GPU | GPUs | AdamW | Muon | Dion | Dobb | AdamW | Muon | Dion | Dobb | |||
| GPT-2 Large | A5000 | 1 | 10 | 2 | 20 | 11.3 | 623.0 | 1224.1 | 6.9 | 7764 | 8376 | 8977 | 7760 |
| GPT-2 XL | A5000 | 2 | 8 | 2 | 32 | 18.7 | 946.5 | 2523.2 | 16.3 | 11,649 | 12,577 | 14,153 | 11,646 |
| GPT-2 XL | H100 | 2 | 16 | 1 | 32 | 9.3 | 82.7 | 232.7 | 9.2 | 1069 | 1143 | 1293 | 1069 |
| GPT-2 3B | H100 | 1 | 16 | 2 | 32 | 49.4 | 454.3 | 1385.6 | 7.6 | 2388 | 2793 | 3724 | 2346 |
| GPT-2 6B | H100 | 1 | 8 | 4 | 32 | 13.9 | 2106.8 | 1505.7 | 10.9 | 4823 | 6916 | 6315 | 4820 |
Appendix figures & tables21 assets
Supplementary material from the paper’s appendix.
Appendix
| Symbol | Meaning | Defined in |
| Layer and gradient statistics | ||
| , | Output and input dimensions of a weight matrix | Section 3 |
| , | Weight matrix of a layer at optimizer step | Section 3 |
| , | Mini-batch at step , and its number of examples or token positions | Section 3 |
| Mean loss on | Equation 1 | |
| , | Input activation and output gradient of the th contribution | Equation 1 |
| Configuration | Output axis sharded | Input axis sharded |
|---|---|---|
| Dobb | ||
| Dobb-G | ||
| Dobb- | ||
| Dobb-G- |
| Field | Small | Medium | Large | XL |
|---|---|---|---|---|
| Selected learning rate | ||||
| Grid index | ||||
| Evaluation interval (steps) | 1,000 | 1,000 | 1,000 | 1,000 |
| Evaluation sequences | 3,000 | 3,000 | 3,000 | 3,000 |
| Seeds | 5000 | 5000 | 5000 | 5000 |
| Raw update | RMS of | GPT-2 | ||
|---|---|---|---|---|
| Full-rank orthogonalized Muon | 0.2 | |||
| Dion, orthonormal left / unit-norm right columns | ||||
| RMNP, unit-norm rows | 0.2 or 0.4 a | |||
| Dobb, Dobb- | 0.2 or 0.4 b | |||
| Dobb-G, Dobb-G- | 0.2 or 0.4 a |
| Layers | Width | Heads | Steps | Grid | Runs | ( ) | ||
| Swept sizes | ||||||||
| 62M | 6 | 640 | 10 | 5,000 | 2.46B | 4.16 [3.74, 4.45] | ||
| 124M | 12 | 768 | 12 | 10,000 | 4.92B | 9 | 3.56 [3.42, 3.72] | |
| 219M | 18 | 896 | 14 | 15,000 | 7.37B | 5 | 3.56 [3.31, 3.83] | |
| 354M | 24 | 1024 | 16 | 20,000 | 9.83B | 5 | 3.13 [2.43, 3.60] | |
| Extrapolated sizes | ||||||||
| Small | Medium | Large | XL | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Dobb | Dobb- | Dobb | Dobb- | Dobb | Dobb- | Dobb | Dobb- | |||||
| 1 | 3.017 | 3.043 | 0.026 | 2.735 | 2.753 | 0.018 | 2.579 | 2.599 | 0.020 | 2.461 | 2.476 | 0.015 |
| 4 | 3.024 | 3.037 | 0.013 | 2.741 | 2.760 | 0.019 | 2.588 | 2.609 | 0.021 | 2.471 | 2.483 | 0.012 |
| 16 | 3.026 | 3.036 | 0.010 | 2.746 | 2.760 | 0.014 | 2.595 | 2.615 | 0.020 | 2.476 | 2.491 | 0.015 |
| 64 | 3.037 | 3.045 | 0.008 | 2.742 | 2.759 | 0.017 | 2.600 | 2.619 | 0.019 | 2.482 | 2.498 | 0.016 |
| Activation basis | Output-gradient basis | |||
|---|---|---|---|---|
| Dobb | Dobb- | Dobb-G | Dobb-G- | |
| 1 | 3.017 | 3.043 | 3.071 | 3.077 |
| 4 | 3.024 | 3.037 | 3.067 | 3.071 |
| 16 | 3.026 | 3.036 | 3.076 | 3.075 |
| 64 | 3.037 | 3.045 | 3.072 | 3.083 |
| Norm | Source | Final loss |
|---|---|---|
| Activation second moment (Dobb) | 3.017 | |
| Gradient Gram, input side | 3.027 | |
| Gradient Gram, output side | 3.055 | |
| Output-gradient second moment (Dobb-G) | 3.071 | |
| Activation second moment (Dobb- ) | 3.043 | |
| Gradient Gram, input side | 3.042 |
| Final loss | Full iteration (ms) | |
|---|---|---|
| 1 | 3.005 | 762.5 |
| 4 | 3.014 | 459.3 |
| 9 | 3.017 | 403.6 |
| 16 | 3.017 | 384.8 |
| 100 | 3.015 | 363.4 |
| Full iteration (ms) | ||||
|---|---|---|---|---|
| Basis refresh | Final loss | Non-refresh | Refresh | Amortized |
| (principal) | 3.017 | 359.5 | 756.5 | 403.6 |
| 3.019 | 359.9 | 1137.8 | 446.4 | |
| 3.017 | 358.5 | 1512.3 | 486.7 | |
| Exact eigendecomposition | 3.015 | 360.1 | 1388.9 | 474.4 |
| Full iteration (ms) | |||||
|---|---|---|---|---|---|
| QR routine | Final loss | Non-refresh | Refresh | Amortized | |
| 1 | Householder | 3.017 | 365.2 | 760.3 | 409.1 |
| Cholesky | 3.016 | 361.7 | 486.3 | 375.6 | |
| 4 | Householder | 3.024 | 394.2 | 604.7 | 417.6 |
| Cholesky | 3.022 | 393.2 | 431.8 | 397.5 | |
| Full iteration (ms) | |||||
|---|---|---|---|---|---|
| Method | Capture policy | Final loss | Non-refresh | Refresh | Amortized |
| Dobb | First micro-batch | 3.017 | 360.9 | 755.7 | 404.8 |
| All micro-batches | 3.021 | 361.8 | 888.1 | 420.3 | |
| Dobb-G | First micro-batch | 3.071 | 370.4 | 835.1 | 422.0 |
| All micro-batches | 3.071 | 370.2 | 894.7 | 428.5 | |
| Accumulation | Basis | Final loss | Median iteration (ms) | Storage per matrix (bytes) |
|---|---|---|---|---|
| fp32 | fp32 | 3.023 | 361.2 | |
| fp32 | bf16 (principal) | 3.017 | 360.4 | |
| bf16 | fp32 | 3.028 | 361.0 | |
| bf16 | bf16 | 3.027 | 360.9 |
| Method | Off | On | |
|---|---|---|---|
| Dobb | 1 | 3.017 | 3.014 |
| Dobb | 4 | 3.024 | 3.023 |
| Dobb | 16 | 3.026 | 3.030 |
| Muon | n/a | 3.004 | 3.004 |
| RMNP | n/a | 3.083 | 3.072 |
| Optimizer | Mean | Run-to-run SD | Range width |
|---|---|---|---|
| AdamW | 7723 | 22.8 | 77 |
| Muon | 7788 | 26.9 | 81 |
| Dion | 7713 | 16.0 | 56 |
| Dobb | 7740 | 15.3 | 48 |
| Optimizer | Operation | Reads | Frequency | Placement |
| AdamW | First and second moments; element-wise update | Gradient | Every step | Step |
| Muon | Momentum; Newton–Schulz orthogonalization | Gradient | Every step | Step |
| Dion | Momentum; power iteration with orthonormalization; column normalization; error feedback | Gradient | Every step | Step |
| Right-factor refresh in the lazy and CPU variants | Momentum | Periodic | Lagged | |
| Shampoo, SOAP | Gradient Gram matrices | Gradient | Every step | Step |
| Inverse roots (Shampoo) or eigenbases (SOAP) | Gram matrices | Every steps | Lagged |
| Optimizer call (ms) | Pooled | ||||||
|---|---|---|---|---|---|---|---|
| Model | GPUs | Method | Non-refresh | Refresh | Amortized | iteration | |
| GPT-2 Large | 20 | AdamW | – | – | 11.3 | 7764.5 | |
| Muon | – | – | 623.0 | 8376.2 | |||
| Dion | – | – | 1224.1 | 8977.3 | |||
| Dobb | 6.0 | 13.7 | 6.9 | 7760.1 | |||
| GPT-2 XL | 32 | AdamW | – | – | 14.5 | 8059.0 | |
| Optimizer call (ms) | Pooled | ||||||
|---|---|---|---|---|---|---|---|
| Model | GPUs | Method | Non-refresh | Refresh | Amortized | iteration | |
| GPT-2 XL | 16 | AdamW | – | – | 8.5 | 1154.3 | |
| Muon | – | – | 83.7 | 1229.5 | |||
| Dion | – | – | 204.6 | 1350.4 | |||
| Dion | – | – | 130.0 | 1275.8 | |||
| Dobb | 5.6 | 22.6 | 7.5 | 1153.3 | |||
| Optimizer call (ms) | |||||
|---|---|---|---|---|---|
| Method | Non-refresh | Refresh | Amortized | Pooled iteration | |
| 8 | Dion | – | – | 159.5 | 422.6 |
| Dobb | 75.7 | 170.0 | 86.2 | 349.3 | |
| Dobb-G- | 88.7 | 219.5 | 103.2 | 366.3 | |
| 16 | Dion | – | – | 146.1 | 5317.7 |
| Dobb | 26.1 | 331.7 | 60.1 | 5231.7 | |
| Optimizer call (ms) | ||||||
|---|---|---|---|---|---|---|
| Method | Non-refresh | Refresh | Amortized | Pooled iteration | ||
| 32 | 2 | Dion | – | – | 1307.7 | 17,664.1 |
| Dobb | 32.8 | 1249.2 | 168.0 | 16,524.4 | ||
| Dobb-G- | 53.0 | 1917.9 | 260.2 | 16,616.6 | ||
| 64 | 2 | Dion | – | – | 1287.5 | 18,423.8 |
| Dobb | 14.5 | 634.9 | 83.4 | 17,219.7 | ||
Distributed Optimization
Distributed optimization coordinates computation across multiple agents or machines while balancing convergence, communication, privacy, and reliability.
See all 93 papers