ULPack: Reference-Conditioned Lossless Compression of Checkpoint Trajectories
Organizations: University of Waterloo
Abstract
Studying model training requires checkpoint trajectories, whose storage cost limits temporal resolution. Although adjacent checkpoints are numerically close, existing lossless codecs either operate on XOR bit patterns or ignore trajectory-specific conditional structure. We show that a reference weight's exponent predicts the bit length of its displacement in ordered floating-point space without side information. We introduce ULPack, a lossless codec which exploits this dependence by conditioning entropy models of ordered-integer residuals on the reference exponent. Across bfloat16, float16, and float32 trajectories, ULPack reduces storage by up to 27% against ZipNN, 21% against zstd-19, and 11.5% against FM-Delta. Across two dense trajectories, compression improves as updates shrink and reference conditioning strengthens, while near uniform low-order bits set the remaining compression floor and earlier checkpoints add little information.
Figures & tables
| Sequence | Dtype | Checkpoints | Evaluated unit | Payload |
|---|---|---|---|---|
| BLOOM (10k) | bfloat16 | 10k–90k | shard 36, eight deltas | 4.93 GB |
| BLOOM (5k) | bfloat16 | 15k–90k | shard 36, eight matched deltas | 4.93 GB |
| BLOOM (1k) | bfloat16 | 90k–93k | shard 36, three adjacent deltas | 4.93 GB |
| Amber-7B | bfloat16 | 100–101 | shard 2, 82 float tensors | 3.50 GB |
| Pythia-70m | float16 | 100k–101k | complete model, 88 tensors | 140.9 MB |
| MultiBERTs | float32 | 0k–100k | complete model, five 20k deltas | 534.3 MB |
| BLOOM 1k | BLOOM 5k | BLOOM 10k | Amber | Pythia | MultiBERTs | |
|---|---|---|---|---|---|---|
| ULPack | 0.3255 | 0.5267 | 0.5705 | 0.4167 | 0.6012 | 0.7920 |
| FM-Delta | 0.3677 | 0.5679 | 0.6130 | 0.4660 | 0.6412 | 0.8116 |
| ZipNN | 0.4483 | 0.5880 | 0.6197 | 0.5152 | 0.6791 | 0.8099 |
| XOR + zstd-19 | 0.4134 | 0.5912 | 0.6209 | 0.5053 | 0.6861 | 0.8172 |
| margin over best baseline | 11.5% | 7.3% | 6.9% | 10.6% | 6.2% | 2.2% |
| Sequence | Conditioning gain | Raw tail |
|---|---|---|
| BLOOM (1k) | 11.1% | 24.4% |
| Amber | 9.7% | 36.0% |
| Pythia-70m | 6.1% | 52.8% |
| MultiBERTs | 1.6% | 82.2% |
Appendix figures & tables16 assets
Supplementary material from the paper’s appendix.
Appendix
| Sequence | Checkpoints | Evaluated unit | Payload |
|---|---|---|---|
| BLOOM (10k) | 10k–90k | shard 36, eight deltas | 4.93 GB |
| BLOOM (5k) | 15k–90k | shard 36, eight matched deltas | 4.93 GB |
| BLOOM (1k) | 90k–93k | shard 36, three adjacent deltas | 4.93 GB |
| Amber-7B | 100–101 | shard 2, all 82 float tensors | 3.50 GB |
| Pythia-70m | 100k–101k | complete model, 88 fp16 tensors | 140.9 MB |
| MultiBERTs | 0k–100k | complete model, five adjacent deltas | 534.3 MB |
| Method | Residual | Preprocessing |
|---|---|---|
| zstd-3, zstd-19 | XOR | bytes grouped by significance |
| gzip-6, bzip2-9 | XOR | bytes grouped by significance |
| ZipNN | XOR | native dtype hint; internal byte grouping |
| FM-Delta | ordered integer | sign/MSB-position coding; low bits raw |
| ULP+zstd-19 ablation | ULP | bytes grouped by significance |
| ULPack | ULP | exponent-conditioned two-part code |
| Method | Compression ratio | Encode (MB/s) | Decode (MB/s) |
|---|---|---|---|
| ULPack | 0.5705 | 43.2 | 38.9 |
| FM-Delta | 0.6130 | 45.9 | 50.2 |
| ZipNN | 0.6197 | 432.4 | 876.7 |
| XOR + zstd-19 | 0.6209 | 1.89 | 952.2 |
| Sequence | ULPack | ULP+zstd-19 | XOR+zstd-19 | ZipNN | FM-Delta |
|---|---|---|---|---|---|
| BLOOM (10k) | 111.8–116.7 / 125.8–129.6 | — | 2269.4–2887.7 / 4.1–6.3 | 10.1–12.1 / 3.7–6.5 | 105.4–108.5 / 96.1–101.1 |
| BLOOM (5k) | 112.9–121.8 / 128.4–137.8 | — | 1848.3–2500.5 / 3.4–6.2 | 11.1–12.1 / 4.7–6.5 | 103.7–108.6 / 95.4–101.1 |
| BLOOM (1k) | 108.6–112.8 / 127.8–130.4 | 1835.8–2024.9 / 4.0–4.1 | 1823.2–2028.8 / 4.4–4.5 | 11.6–11.7 / 5.7 | 97.3–98.3 / 89.3–91.0 |
| Amber-7B | 77.1 / 89.9 | 1187.4 / 3.6 | 1283.4 / 3.8 | 8.3 / 4.3 | 73.2 / 67.6 |
| Pythia-70m | 3.61 / 3.52 | — | — | — | 3.01 / 2.77 |
| MultiBERTs | 6.72 / 6.28 | — | — | — | 7.52 / 7.20 |
| Method | Compressed bytes | Ratio | Relative margin |
|---|---|---|---|
| ULPack | 226,919,912 | 0.6609 | 2.9% |
| FM-Delta | 233,805,514 | 0.6809 | — |
| Method | BLOOM | Amber | Pythia | MultiBERTs |
|---|---|---|---|---|
| XOR + zstd-3 | 0.4333 | 0.5376 | 0.7139 | 0.8328 |
| XOR + gzip-6 | 0.4436 | 0.5315 | 0.7102 | 0.8298 |
| XOR + bzip2-9 | 0.4588 | 0.5504 | 0.7206 | 0.8315 |
| Sequence | Without | ULPack | Reduction |
|---|---|---|---|
| BLOOM (1k) | 0.3662 | 0.3255 | 11.1% |
| Amber | 0.4616 | 0.4167 | 9.7% |
| Pythia-70m | 0.6402 | 0.6012 | 6.1% |
| MultiBERTs | 0.8051 | 0.7920 | 1.6% |
| Sequence | XOR byte bound | ULPack | Below bound |
|---|---|---|---|
| BLOOM-176B | 0.4091 | 0.3294 | 19.5% |
| Amber | 0.4941 | 0.4185 | 15.3% |
| Pythia-70m | 0.6679 | 0.6012 | 10.0% |
| MultiBERTs | 0.8084 | 0.7920 | 2.0% |
| Target | ULPack | FM-Delta | XOR+zstd-19 | ZipNN |
|---|---|---|---|---|
| 20k | 0.6156 / 0.6682 | 0.6592 / 0.7168 | 0.6420 / 0.6761 | 0.6589 / 0.6912 |
| 30k | 0.5913 / 0.6348 | 0.6335 / 0.6798 | 0.6375 / 0.6569 | 0.6279 / 0.6778 |
| 40k | 0.5702 / 0.6114 | 0.6115 / 0.6545 | 0.6282 / 0.6473 | 0.6120 / 0.6517 |
| 50k | 0.5481 / 0.5890 | 0.5888 / 0.6307 | 0.6128 / 0.6386 | 0.5978 / 0.6248 |
| 60k | 0.5229 / 0.5642 | 0.5633 / 0.6050 | 0.5945 / 0.6224 | 0.5830 / 0.6077 |
| 70k | 0.4928 / 0.5352 | 0.5332 / 0.5754 | 0.5712 / 0.6041 | 0.5648 / 0.5900 |
| Pair | ULPack | FM-Delta | XOR+zstd-19 | ZipNN |
|---|---|---|---|---|
| 90k–91k | 0.3294 | 0.3716 (11.4%) | 0.4170 (21.0%) | 0.4515 (27.0%) |
| 91k–92k | 0.3255 | 0.3677 (11.5%) | 0.4135 (21.3%) | 0.4482 (27.4%) |
| 92k–93k | 0.3216 | 0.3639 (11.6%) | 0.4097 (21.5%) | 0.4451 (27.7%) |
| Mean | 0.3255 | 0.3677 (11.5%) | 0.4134 (21.3%) | 0.4483 (27.4%) |
| Sequence | ||||
|---|---|---|---|---|
| BLOOM-176B | 3.0598 | 0.2979 | 0.6240 | 0.0006 |
| MultiBERTs | 3.1302 | 0.1594 | 0.4389 | 0.0020 |
| Sequence | Shipped chain | Anchor+bridge | Change | |
|---|---|---|---|---|
| BLOOM QKV, 5k gaps | 17.273 | 17.411 | ||
| MultiBERTs, 20k gaps | 51.479 | 51.824 |
| bfloat16 | float32 | |||
|---|---|---|---|---|
| Level | Saving | Saving | ||
| 1 | 0.9170 | 0.47% | 0.8543 | 0.46% |
| 2 | 0.9468 | 0.28% | 0.8864 | 0.36% |
| 3 | 0.9515 | 0.22% | 0.9366 | 0.20% |
| 4 | 0.9548 | 0.16% | 0.9095 | 0.28% |
| 5 | 0.9797 | 0.05% | 0.9497 | 0.16% |