将无损张量压缩建模为程序合成 Lossless Tensor Compression as Program Synthesis
Brevis把无损张量压缩建模为程序合成,逐位还原且全面超越通用与专用基线。
前置知识
无损压缩与逐位还原 (bit-exact reconstruction)
无损压缩要求解压后 $\text{Decompress}(c) =_{\text{bit}} X$,即每个源字节都恢复。归档指标 $\text{Reduction}(X,c)=1-|c|/|X|$,其中 $|c|$ 含全部重建所需数据与元数据。与之相对的有损压缩(量化、剪枝)会修改或丢弃权重,无法恢复原始比特,因此不适合归档或精确 checkpoint 传输。
本文的核心目标是逐位无损,必须区分它与推理效率导向的有损方法(如 GGUF、LLM.265),否则会误读 Brevis 的适用边界与评价标准。
程序合成 (program synthesis / syntax-guided synthesis)
程序合成是在程序空间 $\mathcal{P}$ 中搜索满足规范 $\phi$ 且最小化代价的程序 $P^*=\arg\min_{P\in\mathcal{P}}\text{Cost}(P)\ \text{s.t.}\ \phi(P,X)$。语法引导合成 (SyGuS) 用文法限制搜索空间,概率引导方法(PHOG、Euphony、TF-Coder)学习产生式概率或算子先验来加速搜索。
Brevis 把压缩本身重新表述为程序合成:DSL 定义搜索空间、逐位重建定义正确性、序列化程序大小定义目标。理解这点才能抓住它与固定编解码器或预定义流水线方法的本质差异。
A* 搜索与可采纳启发式
A* 按代价 $g(s)+h(s)$ 排序扩展状态,其中 $g(s)$ 是已累积代价、$h(s)$ 是到完成的估计代价。当 $h(s)$ 是可采纳的(乐观下界,绝不高估)时,A* 能保证找到最优解。配合字节数下界可剪掉不可能改进当前最优的状态。
Brevis 用有界 A* 在大程序空间中导航,状态代价 $w(r,\kappa)=-\log_2 b_q(r|\kappa)$,并配合字节下界 $LB_L(s)$ 剪枝。不懂 A* 就无法理解其搜索效率来源和剪枝正确性。
IEEE 754 浮点字段布局
IEEE 754 把一个浮点数拆成符号位、指数域、尾数域。例如 FP32 是 1+8+23 位,BF16 是 1+8+7 位。同一批权重里,符号、指数、尾数各自呈现不同规律(如指数常为常数 127),把它们拆开分别压缩比整体压缩更有效。
Brevis 的 Merge 算子正是把每个字按 FP32 字段或比特/字节平面拆成多个子流,论文的运行示例(+1.0,−1.0 序列)完全依赖读者理解这三个字段才能看懂合成的程序。
领域特定语言 (DSL) 与可逆算子
DSL 是为某一领域设计的受限语言,这里用 7 个带类型规则的可逆算子(Lit、Const、Concat、Repeat、Map、Scan、Merge)描述张量结构。每个算子有 $G_{r,\theta}$(子流合成)与 $D_{r,\theta}$(目标流分解)两个方向,且所有内部算子对存储参数是可逆的。
DSL 是 Brevis 的搜索语法与正确性载体,理解这 7 个算子的类型规则(如 Repeat 要求目标由 $k$ 份完全相同的拷贝组成)是阅读方法章节和 Figure 3 的前提。
研究动机
公开模型仓库正爆炸式增长:Hugging Face 从 2020 年 4 月的 425 个仓库增长到今天的 295 万个,托管超 15 PB 数据。每个仓库可能含多个大型张量 checkpoint 并被复制到不同的模型中心、存储系统和部署集群,归档、传输、部署成本随之飙升。有损方法(量化、剪枝、LLM.265、NeuZip)会修改或丢弃权重、依赖特定数值格式或执行环境,无法逐位还原原始权重,不适合归档或精确 checkpoint 传输。而无损压缩中,gzip、zstd 等通用压缩器把张量当成普通字节流,忽略 dtype、shape、浮点布局与元素间关系;ZipNN、DFloat11、Huff-LLM、ZipMoE 等模型专用压缩器虽利用浮点统计特性,但依赖固定压缩方案或预定义流水线,难以捕获重复值、循环子序列、元素间简单关系等张量特有模式,从而留下压缩空间。
本文的目标是作者提出一个根本性问题:与其为每个张量选择固定的压缩方案或预定义流水线,能否为它合成一个紧凑、自包含的程序,使该程序直接表示这个张量,并且执行后能逐位重建原始张量?这样的程序既是压缩表示也是解码器,且由于每个张量可用不同的程序,理论上能捕获张量特有的结构。为此 Brevis 需同时解决三个挑战:(1) 设计一门语言,既能表达多样的张量结构、又能保证逐位重建;(2) 在巨大的程序空间内高效搜索出紧凑程序,且搜索预算实用;(3) 自包含程序在存储指令、参数、字面量后仍需保持紧凑。最终目标是把 2.13 TB 的 checkpoint 压到最小且逐位可还原。
与已有工作不同的是,以往工作的共同盲区是\"选定一个编解码器或预定义流水线\",再用它套用到所有张量。ZipNN 把浮点字段重排后再无损编码、DFloat11/ECF8/ZipMoE 针对指数分布或模型布局、Huff-LLM 与 tile-aligned ANS 把熵编码与推理结合、OpenZL 用图框架搜索变换流水线。它们要么固定、要么在变换层之上仍依赖固定编解码族。Brevis 的独特切入角度是把\"压缩过程本身\"建模为程序合成:DSL 定义搜索空间、逐位重建定义正确性、完整序列化大小 $L(P)$ 定义目标、checkpoint 级产生式先验引导有界 A* 搜索。这与所有基线在哲学上不同——压缩器不再是\"挑选\"出来的,而是\"合成\"出来的。
核心方法
直觉上,张量在磁盘上是一串比特,把它按 IEEE 754 字段读出时往往暴露多种规律,且没有任何单一编解码器能同时捕获全部规律。Brevis 的工作流是:压缩时先把张量 $X$ 拍平为 $x=\text{Bits}(X)\in W_b^n(d)$;从少量代表性张量学一个 checkpoint 级产生式先验;用有界 A* 在张量文法上做目标导向合成,把 $x$ 分解给子程序;每个完整候选用其完整序列化字节数 $L(P)$ 评估,选最小者存储。解压时直接验证并执行合成出的程序,无需搜索也无需先验,字面量兜底保证任意支持张量都可表示。形式化目标为 $P_x=\arg\min_{P\in C_B(x)}L(P)\ \text{s.t.}\ \text{Exec}(P)=x$,其中 $C_B(x)$ 含初始字面量程序与预算 $B$ 内找到的全部完整候选,字面量兜底使 $C_B(x)$ 非空、等式约束排除非精确程序。
核心创新有四点。第一是目标导向合成:不是枚举程序再去逐个执行验证,而是从目标流 $x$ 反向搜索——每个\"洞\"都附带其完成子程序必须生成的精确流 $v$,应用算子 $r$ 时用其分解 $D_{r,\theta}(x)=(x_1,\ldots,x_k)$,仅当 $G_{r,\theta}(x_1,\ldots,x_k)=x$ 时才接受。这样正确性由构造保证,无需反复执行完整候选验证。第二是用完整序列化大小 $L(P)$(含字面量载荷、编解码器表、长度、参数)而非程序结构本身来排序候选,避免\"结构漂亮但实际更大\"的陷阱。第三是 checkpoint 级产生式先验 $b_q(r|\kappa)=\frac{N(r,\kappa)+\beta}{\sum_{r'}N(r',\kappa)+\beta|R(\kappa)|}$ 只改变探索顺序、永不使有效程序不可达。第四是解码端零搜索、零先验,仅验证类型规则后执行,Lit 兜底保证可表示性。
方法步骤详情
完整流程分六步。(1) 拍平:把张量 $X$ 按 dtype 宽度 $b(d)$ 转成字序列 $x$,类型记为 $b[n]$。(2) 学先验:分层抽样至多 4 张量,各做至多 6 次扩展、至多 1048576 元素,统计最小程序用到的产生式,按上下文 $\kappa$(dtype、大小桶、零值与 distinct 比例、相邻差熵)平滑得到 $b_q$。(3) 有界 A*:以整张量字面量程序为初始 $P_{\text{best}}$,按 $g(s)+h(s)$ 出队,字节下界 $LB_L(s)\geq L(P_{\text{best}})$ 则剪枝,预算用尽后用字面量补全做 rollout。(4) 字面量编码:Lit 尝试原始字、定宽比特打包、规范 Huffman、rANS,选含表/长度/载荷后最小者。(5) 归档:保留 safetensors 头,每张量记录 dtype、shape、合成程序。(6) 解码:验证类型规则后执行 $G_{r,\theta}$ 写回原始偏移。主配置为每张量 1 次扩展、32 worker、程序限 64 节点深度 4。
技术新颖性
技术新颖性体现在五处。一是 7 个带类型规则的可逆算子(Lit/Const/Concat/Repeat/Map/Scan/Merge)首次把浮点字段、比特/字节平面、元素关系(XOR、模加、ZigZag、Gray、位反转、旋转)都纳入一个统一类型系统 $b[n]$,且合成器与解码器都能独立拒绝不兼容的宽度/长度/参数。二是 checkpoint 级产生式先验借鉴 PHOG/Euphony 的产生式概率思想,但首次把它用于压缩程序合成,并证明先验只影响探索顺序、不影响候选质量。三是字节下界 $LB_L(s)$ 与松弛文法启发式 $h(s)$ 联合剪枝,使有界搜索仍能在配置的有限空间内接近最优。四是目标导向扩展与正确性构造式证明(Proposition 1 的归纳证明),把\"验证\"从代价高昂的执行变成免费的类型/分解检查。五是与 OpenZL 图框架、ZipNN 固定重排的本质区别:Brevis 把压缩本身合成出来,而非在固定编解码族上选优,每张量可用不同程序,从而能捕获重复值、循环子序列等基线漏掉的模式。
实验结果
实验覆盖 10 个公开 checkpoint(8 语言+1 音频+1 图像,8 BF16、1 FP32、1 FP8,420 shard,2.13 TB)。Brevis 把 2.130 TB 压到 1.407 TB,压缩比 1.5135,存储减少 33.93%、节省 722.79 GB,且 10/10 checkpoint 对所有可比基线都最小。相对四个通用压缩器,平均每 checkpoint 节省从超 zstd 的 12.94% 到超 Snappy 的 30.87%,五项完整语料对比经 Holm 校正均显著($r_{rb}=1.0$)。对最强张量专用基线 ZipNN,Brevis 10/10 更小、共省 10.21 GB,pooled 节省 0.72% [0.70%,0.81%],各 dtype 一致领先;对 DFloat11(仅 Llama-3.1-8B 可验证)省 2.90%。吞吐在 Llama-3.1-70B 上达 3.60 GB/s 压缩、6.61 GB/s 解压,处于两条 Pareto 前沿。消融中 A* 贡献主要压缩增益(去掉多 2873336 字节),先验进一步加速搜索。
查看结构化数据
| 任务 | 指标 | 本文 | 基线 | 提升 |
|---|---|---|---|---|
| 10 checkpoint 全语料归档大小 | 归档大小 (GB) / 存储减少率 | 整体 1.407 TB / 33.93%,每个 checkpoint 均为所有基线中最小(如 GLM-5.2 991.73GB/34.18%,Llama-3.1-70B 92.73GB/34.28%) | ZipNN 998.71GB/93.50GB,zstd 1159.70GB/108.58GB,gzip 1171.85GB/109.67GB,LZ4 1494.27GB/140.00GB,Snappy 1506.85GB/141.12GB | 对四个通用压缩器平均每 checkpoint 省 12.94%-30.87%;对 ZipNN 聚合省 10.21GB,pooled 0.72% [0.70%,0.81%];全部 10/10 checkpoint 最小 |
| Llama-3.1-8B 对比 DFloat11 | 归档大小 (GB) | 10.579 GB | DFloat11 10.896 GB | Brevis 小 316.27 MB,即 2.90%;DFloat11 其余 checkpoint 无可验证原生结果故不外推 |
| 统计显著性检验 | Holm 校正 p 值 / 秩双列相关 r_rb | p_H=0.0098, r_rb=1.0(五个完整语料对比) | n/a(双侧精确 Wilcoxon 符号秩检验,10000 次 bootstrap,种子 20260729) | 所有配对比较经 Holm 校正后仍显著,r_rb=1.0 表示完全一致的秩方向优势 |
| Llama-3.1-70B 吞吐 | 压缩/解压吞吐 (GB/s) 与压缩比 | 压缩 3.60 GB/s,解压 6.61 GB/s,压缩比 1.522 | ZipNN 压缩更慢 7.2%;zstd/LZ4 解压更快、Snappy 压缩更快但存储减少更低 | 比 ZipNN 压缩快 +7.2%、归档小 0.82%,同时处于压缩与解压两条 Pareto 前沿 |
| 搜索引导消融 (Llama-3.1-8B 首 shard) | 相对完整配置的额外字节数 / 耗时 | 完整 A*+先验 0 字节 / 140.24s | 无 A* +2873336B/118.09s;无先验 +389B/88.82s;都去掉 +3123197B/70.69s | A* 贡献主要压缩增益(约 2.87MB),先验贡献小但显著(389B)且加速搜索;预算 1 已捕获大部分压缩(9.04s),预算 32/256 仅多省 3.13/5.48MB 但耗时 135.04/1399.89s |
局限与改进
作者明确承认三点。其一,评测只覆盖公开模型 checkpoint,而非所有张量工作负载,且领域与格式多样性有限且部分混淆——例如 BF16 占 8 个、FP32 与 FP8 各仅 1 个,难严格分离"格式"与"领域"的贡献。其二,当前实现对每个张量独立合成,没有跨张量合成,因此跨 checkpoint 的共享结构(如相同架构不同实例的重复权重块)未被利用。其三,加速器感知解码、更广语料留作未来工作。我的额外观察是:(a) DFloat11 只在 Llama-3.1-8B 一个模型上可比,2.90% 的优势是否在其他 BF16 模型上保持未知;(b) 虽然逐张量并行达 3.60 GB/s,但单张量串行时大模型(GLM-5.2 达 1.5 TB)的端到端墙钟时间未报告;(c) 先验标定需要先压缩采样张量,存在冷启动成本。
独立分析的弱点
独立审视后有以下弱点及改进方向。第一,每张量独立合成错失跨张量冗余:同一 checkpoint 内不同张量(或同一架构不同 checkpoint)可能含相同的权重模式或重复块,可引入跨张量的程序共享或字典机制来进一步减小归档。第二,DSL 算子虽覆盖字段/平面/关系,但缺少对稀疏结构(如 MoE 专家激活模式、量化残差块)的专门算子,改进方向是新增稀疏/分块算子并在 MoE 模型上单独评测。第三,搜索预算为每张量固定 1 次扩展,对高度结构化的小张量可能浪费、对极复杂的大张量可能不足,可设计自适应预算(按张量熵或首扩展收益动态分配)。第四,先验标定只采样至多 4 个张量,对异构 checkpoint(混合 BF16/FP8)可能欠拟合,改进是分层标定或在线更新先验。第五,解压虽达 6.61 GB/s 但仍依赖 CPU 有界线程池,在 GPU/加速器上能否高效执行未验证,改进是实现加速器原生解码器(类似 ZipServ/ENEC 的硬件协同)。第六,所有 60 个归档虽逐位验证,但缺少对极端值(NaN 载荷、带符号零)的专门压力测试报告,可补充此类张量的正确性证据。
未来方向
作者提出的方向是跨张量合成、更广语料、加速器感知解码。基于成果我认为可延伸五条。其一,跨 checkpoint 程序复用:把同架构模型(如 Qwen3 系列不同 size)的相似张量程序做成共享模板库,使新模型只需增量合成差异部分。其二,与有损方法协同:先用 Brevis 无损归档,再在其程序之上叠加量化/剪枝做推理优化,形成"归档-部署"分离的两阶段管线。其三,把 DSL 扩展到非浮点张量(如 INT4/INT8 权重、激活值、KV-cache),并在推理时按需解压,研究吞吐-延迟权衡。其四,把 KoLMogorov 式的"序列即程序"思想推广到梯度/优化器状态压缩,覆盖训练 checkpoint 而不仅是权重。其五,研究合成程序的可解释性——程序结构天然揭示张量规律,可作为模型权重"体检"工具(如发现异常重复块提示潜在冗余或后门),这是固定编解码器无法提供的副产品。
复现评估
复现评估总体较好。作者在 GitHub 公开实现、数据与脚本(github.com/jiekeshi/Brevis),10 个 checkpoint 均为 Hugging Face 公开模型,基线 zstd 1.5.7、ZipNN 0.5.4、LZ4 1.9.4、gzip(libdeflate 1.19)、Snappy 0.7.3、DFloat11 均确定版本可重复。配置披露充分:每张量 1 次 A* 扩展、32 worker、程序限 64 节点深度 4、开放分解至多 512 MiB;先验标定至多 4 张量各 6 扩展、至多 1048576 元素;硬件为 AMD EPYC 9654(192 核)配 724 GiB RAM。统计严谨:报告 10000 次 bootstrap 95% 区间、双侧 Wilcoxon 加 Holm 校正。挑战在于完整语料 2.13 TB 对存储与时间要求高(预算 256 单 shard 需 1399.89s),普通实验室难跑全;DFloat11 仅一个模型可验证限制部分对比。算法实现(DSL、可逆算子、A*、rANS)工程量大,但开源代码显著降低门槛。
论文图表
双子图。(a) Hugging Face 仓库数对数纵轴:从 2020 年的 425 增长到 2022、2024、2026 年(2026 年达 2.95M),直观显示指数级膨胀。(b) 横轴存储减少率、纵轴压缩吞吐(GB/s),比较 gzip/LZ4/zstd/Snappy/ZipNN/Brevis 在吞吐-压缩率的权衡位置,Brevis 位于右上 Pareto 前沿。
这张图同时给出了"为什么要做这件事"(仓库爆炸到 295 万、15 PB)和"Brevis 大致处在什么位置"(吞吐-压缩率前沿)的双重动机,是理解整篇论文出发点与定位的关键。
双子图。(a) 压缩、(b) 解压:横轴存储减少率、纵轴吞吐(GB/s),比较 Snappy/LZ4/zstd/gzip/ZipNN/Brevis,标注 Pareto 前沿。Brevis 在两张图都位于 Pareto 前沿:压缩 3.60 GB/s、解压 6.61 GB/s、压缩比 1.522,比 ZipNN 压缩快 7.2% 且归档更小。
这张图回答了"压缩率提升是否以吞吐为代价"这个关键质疑,证明 Brevis 并非单纯靠慢换取压缩率,而是同时处于吞吐-压缩率两维 Pareto 前沿,对实用性判断至关重要。