ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

DeepSeek总结的OpenZL压缩变换器

DeepSeek总结的OpenZL压缩变换器 来源https://openzl.org/blog/2026-09-24-compression-transformer/压缩变换器Yann ColletOpenZL 团队元数据2026年9月24日新闻10 分钟阅读压缩变换器让神经网络构建压缩图OpenZL 通过以任意顺序链接处理层来压缩数据。这很强大但需要仔细配置为给定输入选择合适的编解码器组合一直是其最大的挑战。压缩变换器现在可以自动做出这一选择在压缩过程中逐个决策地动态构建压缩图。它无需针对数据源进行训练无需手动调优解压端也无需任何改动。它可从 API 和 CLI 中使用。图压缩的强大之处——以及复杂性OpenZL 使用一组可以自由组合成图的编解码器来无损压缩数据。一个图可以将一个输入流推过多个阶段将其拆分为子流并为每个子流选择不同的编解码器。这种灵活性很强大理论上搜索所有可能的图空间可以为每个输入找到最佳压缩策略。但在实践中这种搜索在数据压缩过程中执行的成本太高因此生产系统只能满足于更简单、广泛有效的策略。可以手动调优图但这很耗时且难以扩展。这就是 OpenZL 附带训练器zli train的原因它分析数据源的代表性样本并为该流量生成优化的图。ACE 会生成多个图涵盖不同的压缩率和速度权衡让用户选择最符合其约束的那个。这种方法依赖于两个假设样本能代表未来的流量并且流量相当同质。这些假设通常成立。当它们不成立时训练器不得不折中——一个在样本中不同形态上都能勉强工作的图但对任何一种形态都不是最优的。自然的下一步是实时地让图适应每个单独的输入。为每个输入选择图可以处理异构流量、响应异常值并吸收数据中未宣告的变化所有这些都无需人工干预或针对数据源的训练。这就是压缩变换器为 OpenZL 带来的能力。压缩变换器如何工作压缩变换器从数据流中生成压缩图一次做一个决策。这里有一个有用的类比大型语言模型生成文本因此得名在每一步模型根据其当前上下文发出一个标记。在 OpenZL 中该标记决定一个编解码器及其参数集即图中的下一个节点。然而产生的输出并非线性序列。多阶段编解码器会产生子流模型为每个子流生成决策递归地构建一个图。对于每个新流一个专门评分器——一个小型多层感知机MLP每个上下文一个目前每个数值元素宽度一个——评估每个候选编解码器。选择器选出得分最高的有效编解码器并应用它。如果该编解码器产生子流它们会被反馈给选择器。这样压缩图就一个节点一个节点地自我组装。决策循环一些设计选择使其切实可行且稳健跳过阶段平凡输入例如空流或常量流直接处理不调用神经网络。评分守卫确定性规则在评分器对候选排序后拒绝不可能或无意义的操作。它们还会丢弃请求的格式版本中不可用的编解码器因此生成的图对目标解压器有效。深度守卫与静态回退递归有界低置信度的决策回退到确定性决策树。标准集成变换器作为常规选择器插入 OpenZL。它不需要特殊的执行框架。推理流水线模型仅在压缩时运行。产生的结果是普通的 OpenZL 帧由通常的通用解压器读回。在其第一个实现中变换器专注于数值类型并附带四个评分器每个数值元素宽度1、2、4 和 8 字节一个。结果概览我们针对 868 个数值流族总计 34,737 个文件、17.9 GB每个族代表不同的数据形态评估了数值变换器。在下面呈现的结果中变换器与 OpenZL未训练和已训练以及两个广泛使用的通用压缩器的最强设置zstd -19和xz -9进行比较。这些是压缩率参考不是速度参考变换器的压缩速度远快于zstd -19速度与zstd -8到-12相当具体取决于数据宽度。数字是压缩率的加权几何平均值。“OpenZL 未训练”是 OpenZL 的默认数值路径在默认压缩级别6下的表现使用 Field LZ 压缩“OpenZL 已训练”使用由 ACE 为每个族单独训练的图。数值宽度zstd -19xz -9OpenZL 未训练OpenZL 已训练变换器对比 zstd -19num812.26x10.19x9.867x12.23x12.42x1.3%num166.772x6.467x6.515x8.415x8.429x24.5%num323.056x3.483x3.516x4.390x4.255x39.2%num644.578x5.586x6.114x8.723x8.477x85.2%全部5.752x5.920x6.036x7.846x7.760x34.9%变换器总体与 OpenZL 已训练版本相差在 1.1% 以内且无需任何按族训练。有关每种数据类型的详细信息请参阅以下表格num8 — 151 个族中的最佳、中位数和最差num16 — 226 个族中的最佳、中位数和最差num32 — 249 个族中的最佳、中位数和最差num64 — 242 个族中的最佳、中位数和最差在撰写本文时变换器在广泛的数值数据形态上表现良好但其增益并不均匀而且仍会犯错在 868 个族中有 95 个落后于zstd -19最差情况下落后达 2 倍。这仍处于早期阶段我们预计随着模型改进这些差距会缩小。试用变换器随 OpenZL v0.3.0 发布目前为可选启用。从 CLI 中你可以通过请求压缩级别 7 或更高来查看变换器的运行情况。它适用于直接数值流或数值子流例如从解析操作如 SDDL中提取的子流。./zli compress--profilele-i32--level7examples/getting_started/sample_inputs/era5_ints.bin--outputera5_ints.zl在此样本上压缩率从默认级别的 18.95x 提升到级别 7 的 29.41x。从 C API 中选择ZL_GRAPH_TRANSFORMER_NUMERIC作为起始图或使用压缩级别 7 或以上的ZL_GRAPH_NUMERIC#includeopenzl/codecs/zl_transformer.hZL_Report rZL_Compressor_selectStartingGraphID(compressor,ZL_GRAPH_TRANSFORMER_NUMERIC);从 C 中同一图可作为openzl::graphs::TransformerNumeric使用#includeopenzl/cpp/codecs/Transformer.hppcompressor.selectStartingGraph(openzl::graphs::TransformerNumeric::graph);它接受一个或多个宽度为 1、2、4 或 8 字节的数值流。如果你想查看模型决定了什么请在上面的命令中添加--trace era5_ints.cbor并在图可视化器中打开该文件——变换器的选择会显示为普通的图节点因为它们本来就是。下一步两个方向已经明确。首先我们希望将变换器扩展到数值流之外。其他流类型如字符串将在未来的扩展中涵盖。其次我们希望将速度作为明确目标以便选择器能够在规定的性能预算内找到最佳压缩率而不仅仅是瞄准最强选项。这些是未来文章的主题。更大的要点已经在这里压缩图不再需要提前设计或训练。它可以由模型在读取数据的过程中为每个输入动态构建因此当数据变化时图也随之变化。而且由于结果是普通的 OpenZL 帧该模型可以随时间不断变得更智能而解压器无需更改或重新部署。
返回列表