
Meta 最近开源了OpenZL,这是一个新的针对高度结构化数据的数据压缩框架,它通过显式建模模式来实现比通用工具(如 Zstandard,简称 Zstd)更好的压缩比和更快的速度。该框架通过一个通用解压缩器来保持操作的简单性,该解压缩器执行嵌入的计划,消除了对外部元数据的需求,并允许从单一二进制文件进行全盘更新。
当 Meta 近十年前引入 Zstd 时,由于其速度和效率,它成为了大规模数据基础设施的基石。然而,随着工作负载的演变,特别是涉及结构化格式(如 Protocol Buffers、数据库表和 ML 张量)的工作负载,Meta 工程师发现通用压缩方法未能充分利用现代数据集的固有结构和模式。
OpenZL 采取了不同的方法,其通过显式建模数据结构,如列式布局、枚举和重复模式,而不是将所有内容视为未分化的“字节汤”。这种结构化压缩使 OpenZL 能够在相关数据集上超越标准 Zstd 等通用工具,无论指标是压缩比还是速度。OpenZL 的做法不是猜测最佳技术,而是应用一系列可配置的可逆变换来暴露数据中的潜在顺序,然后再进行最终的熵编码阶段。
OpenZL 的一个关键操作优势是其通用解压缩器。压缩计划由一个称为训练器的组件离线生成,该组件分析提供的数据模式并产生优化的计划。在编码过程中,这个计划被转换为具体的解码配方,并直接嵌入到压缩框架中。
这种模型意味着:
每个 OpenZL 文件,无论其自定义变换序列如何,都可以使用相同的二进制文件进行解压缩。
解码器不需要外部元数据——它执行嵌入的配方。
重新训练或重新优化压缩计划可以提高性能,而无需更改通用解码器,确保向后兼容性。
Meta 工程师强调,这种操作的简单性对于数据中心部署至关重要:单一审核的解压缩表面,从单一二进制文件进行全盘更新,以及在大型基础设施中清晰的版本控制。
在内部基准测试中,针对结构化数据集(例如,Silesia压缩语料库的“sao star”记录),OpenZL 显示出了显著的增益。通过解析结构化记录,将它们分割成字段(数组的结构),并应用领域感知变换,如差分编码,它实现了:
关键在于,与 zstd -3 相比,OpenZL 在保持或提高压缩和解压缩速度的同时展示了更好的压缩比。
用户可以使用简单数据描述语言(SDDL)或自定义解析器函数来描述他们的数据结构。然后,离线训练器使用预算化的变换选择搜索来生成最优的压缩计划。
与一些嵌入通用代码的实验性格式不同,例如用于解压缩的 WebAssembly,OpenZL 的方法将执行限制在确定性图上。这确保了可重现的解码,这是长期数据存档的关键属性。正如一位 Hacker News 记者指出的,虽然对 WebAssembly 进行沙箱化很容易:
真正的问题是确定性——对这些 WebAssembly 模块进行的函数调用可能仍然是非确定性的!
相比之下,OpenZL 的固定执行图保证了确定性的解压缩行为。
OpenZL 在结构化数据上表现最佳,如时间序列数据集、ML 张量和数据库表。在结构最小(例如,纯文本)的地方,OpenZL 智能地回退到使用 Zstd。Quantls Infinity 的研究员 Abelardo Fukasawa 强调了这一点,他说:
它不是像 gzip 或标准压缩器那样对待每种格式都用一样的办法,而是使用 SDDL 适应数据的特定结构——通常在结构化负载上获得更好的比率和吞吐量。
该框架在GitHub上公开可用,供开发人员进行实验和贡献。
原文链接:
Meta Open Sources OpenZL: a Universal Compression Framework for Structured Data








评论