☰
parameter-golf 极致压缩技巧清单:zlib、brotli、lrzip-ZPAQ 与 Base-3 打包,谁最省空间?
2026/10/5 17:33:44 网站建设 项目流程

parameter-golf 极致压缩技巧清单:zlib、brotli、lrzip-ZPAQ 与 Base-3 打包,谁最省空间?

【免费下载链接】parameter-golfTrain the smallest LM you can that fits in 16MB. Best model wins!项目地址: https://gitcode.com/gh_mirrors/pa/parameter-golf

parameter-golf是 OpenAI 发起的模型压缩挑战:在 8×H100 上 10 分钟内训练一个语言模型,最终产物(代码 + 压缩后的模型权重)必须塞进16,000,000 字节(十进制 16MB),按 FineWeb 验证集的 bits-per-byte(bpb)计分。由于权重、代码、量化 scale 全部要挤进同一个字节预算,压缩算法的选择直接决定你能塞下多大的模型——这正是本清单的主题:zlib、brotli、lrzip-ZPAQ 和 Base-3 打包,到底谁最省空间。

先看懂规则:为什么"省空间"能换"好成绩" 🎯

比赛规则写得很清楚:artifact 大小 = 代码字节 + 压缩模型字节,上限是十进制 16,000,000 字节(不是 16MiB),任何一项超了都不合格(详见 README.md 的 FAQ 部分)。

这意味着压缩率就是隐形的"模型容量":

  • 同样 70M 参数,压缩后 15.5MB 的方案有 500KB 预算去做更大的 MLP;
  • 压缩后 15.95MB 的方案就只能反复做超参微调。

所以排行榜头部选手几乎都在"量化位宽 × 压缩器"这个二维空间里做极限搜索。

入门基线:int8 + zlib,一行代码就能上手

仓库默认的 train_gpt.py 给出了最朴素的方案:把模型量化到 int8,然后zlib.compress(quant_raw, level=9)直接压整个权重 blob,评测前再解压还原,并用final_int8_zlib_roundtrip日志验证解压后的权重与打分完全一致。

适合谁:第一次提交、想先跑通全流程的选手。zlib 优点是快、零依赖;缺点是它只看短程重复,对"分布相似但不完全相同"的权重块几乎无能为力,压缩率明显落后于后面的选手。

主流方案:brotli(zstd)与量化参数的化学反应 🧪

翻一遍records/track_10min_16mb/下的记录,brotli(多为 quality=11)是绝大多数 record 提交的首选压缩器,不少队伍还搭配了 zstd-22。两条来自真实提交的经验非常值钱:

1. 量化位宽 ≠ 压缩大小。在 2026-04-05_SP8192_GPTQ-Embeddings_SDClip_Loop45x2/README.md 里,作者指出:int5 网络完全可以比 int4 压得更小——因为 brotli 压缩效果取决于数据熵,放宽 clip range 能显著降低熵。位宽是"名义成本",熵才是"实际成本"。

2. 训练细节反哺压缩率。2026-04-03_MuonEqR_DepthRecurrence_WD090_AllInt6/README.md 的洞察是:weight decay 从 0.085 提到 0.090,权重幅度变小,brotli-11 压缩率直接提升约 5%,换来的 280KB 空间足以把全部 66 层都保持 int6 精度。训练目标里加一项"让权重更好压",是这类比赛特有的思路。

三值模型的杀手锏:Base-3 打包 + LZMA

当权重被约束到 {-1, 0, +1}(BitNet b1.58 三值量化)时,通用压缩器就浪费在"按字节思考"上了。74M 三值 U-Net 提交 的做法是:

  • Base-3 打包:每个权重只有 3 种取值(trit),5 个 trit 恰好塞进 1 字节,理论 1.6 bit/参数;
  • LZMA preset=9做二次压缩;
  • 自动与 bitmask 方案二选一:另设"是否为 0 + 非零时是否为 +1"两个位掩码的编码,每轮训练自动挑更小的(零占比 17–29% 时两者几乎打平)。

最终效果:比 int8+zlib 基线再省 39% 空间,73.7M 参数压进 15.99MB。打包/解包函数可以直接参考 train_gpt_cuda_ternary.py 中的pack_ternary与pack_ternary_bitmask(约 112–138 行)。

榜首配方:lrzip + ZPAQ 分组压缩流水线 🔬

当前排行榜第一(1.0611 bpb)的提交把压缩做成了流水线,其完整设计见 2026-04-27 提交的 README:

  1. 按角色分组:把 int6 权重按qo_bank、kv_bank、mlp_up_bank等分桶,让分布相似的权重挤在一起压;
  2. L1 相似度重排:对"热点" 2D 张量按行做最近邻排序,让序列化流中相邻行数值接近,熵编码器能吃到更长的"小差值"连续段(排列索引用 uint16 存储、随组一起压缩);
  3. lrzip -z -L 9(ZPAQ 后端):ZPAQ 的上下文混合 + 长程去重能抓住 brotli 24-bit 窗口之外的跨张量重复;
  4. brotli 兜底:state dict 骨架、scale、LQER 因子、gate 张量及代码壳继续用 brotli。

代价与收益都写得很直白:比纯 brotli 方案小约 280KB,但序列化多花约 75 秒(ZPAQ 很慢),解压速度仍在评测预算内。依赖只需系统装一个lrzip(见该目录 requirements.txt)。

终极对比:谁最省空间?

方案适用场景压缩效果主要代价
zlib (level 9)入门基线、快速验证基准线压缩率最低
brotli (q11) / zstd-22int6/int7 常规量化优于 zlib 一截中速;对"相似但不同"数据乏力
Base-3 打包 + LZMA三值(±1/0)模型比 int8+zlib再省 39%需要专门写打包/解包与自动择优逻辑
lrzip + ZPAQ 分组流水线冲榜头部方案比 brotli再省 ~280KB序列化慢 ~75s,需系统安装 lrzip

一句话结论:通用场景用 brotli,权重极端稀疏/低位用 Base-3 类专用打包,冲榜时用"分组 + 重排 + ZPAQ"流水线把每一 KB 都榨干。

实用检查清单 ✅

  • 压缩后必须做 roundtrip 校验(解压 → 打分 → 比对 loss),仓库脚本末尾的final_int8_zlib_roundtrip就是范例;
  • 把 clip range、weight decay 当"压缩超参"一起调,别只看量化误差;
  • 相似分布的权重分组再压,打散混压等于自废武功;
  • 准备 A/B 两套编码(如 Base-3 vs bitmask),每次运行自动选小的;
  • 算好账:慢压缩器的序列化时间不能挤占 600 秒训练/评测预算。

把压缩当模型架构的一部分来设计,是 parameter-golf 教给新手最反直觉、也最值钱的一课。

【免费下载链接】parameter-golfTrain the smallest LM you can that fits in 16MB. Best model wins!项目地址: https://gitcode.com/gh_mirrors/pa/parameter-golf

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询