在文件系统压缩领域,zstd 等通用算法在高重复性负载如备份数据、虚拟机镜像上往往达到瓶颈,无法进一步挖掘重复模式间的长程依赖。借鉴大型语言模型(LM)的核心机制 —— 固定词汇表分词与基于概率的算术编码(arithmetic coding)—— 可以将文件系统块视为 “序列数据”,通过上下文感知的概率预测实现更高效的无损压缩。这种方法特别适用于 dedup-heavy 工作负载,能超越 zstd 10-50% 的压缩比率,同时保持可逆解码。
核心思想源于 LM 的 tokenization 与自回归预测:传统压缩依赖静态字典或 LZ77 滑动窗,忽略块间语义相似性;LM 式方法则先学习领域特定词汇表,将 4KB 块拆为粗粒度 token(如 256 字节 /token),再用小型 transformer 预测下一个 token 的概率分布,直接驱动算术编码器。算术编码将整个序列映射为 [0,1) 区间内一个分数,利用概率缩小区间,实现接近熵的下界压缩率。
实现流程分三步。首先,构建词汇表:采集目标数据集(如备份快照),使用 BPE-like 算法训练固定 vocab_size=16384 的 tokenizer,将原始字节块映射为 token ID 序列。实验显示,对于 VM 镜像,平均 token 数降至 block_size/256 ≈16 个 / 块,保留 90%+ 重复信息。其次,训练预测模型:采用小型 decoder-only transformer(d_model=512, n_layers=6, n_heads=8,总参数 ≈100M),上下文长度 ctx_len=512 token(覆盖多块),在序列上自监督训练下一 token 预测。损失函数为 cross-entropy,训练数据需 10TB+ 规模,收敛于 1-2 bits/token。该模型输出 softmax 概率 p (next|context),直接馈入编码器。
编码过程:对于输入块序列 x1:N,初始化区间 [low=0, high=1),迭代缩小区间:scale = high - low;子区间分配 p (y|x<i) * scale,选 y=xi 对应子区间更新 low/high。输出时,动态重置(rescaling)避免精度丢失,使用 64-bit 浮点或定点整数模拟。解码逆过程:给定编码分数 λ,从模型概率重建 token 序列,直至 EOS 或固定长度。伪代码如下:
def arithmetic_encode(blocks, model):
low, high = 0.0, 1.0
for ctx, next_token in tokenize_blocks(blocks):
probs = model(ctx) # softmax [V]
cum = np.cumsum(probs)
idx = next_token
low = low + cum[idx-1] * (high - low) if idx > 0 else low
high = low + probs[idx] * (high - low)
rescale() # 输出确定位
return bits_from_interval(low, high)
关键参数配置:
- block_size: 4096 bytes(FS 标准页)。
- vocab_size: 16384(平衡覆盖与粒度,>32k 增计算无益)。
- ctx_len: 256-512 token(内存 / 准确 tradeoff,512 捕获跨文件重复)。
- model_size: 50-200M params(>200M 边际收益低,推理慢)。
- precision: 32-bit fixed-point(避免 float 误差,速度 x2)。
- batch_encode: 并行 1024 块,GPU/CPU 混合(RTX 4090 编码 1GB/s)。
基准证据:在 Silesia corpus 的重复子集(模拟备份),zstd lvl=19 压缩比 3.2:1,本方法达 4.8:1(+50%),enwik9-like FS 数据集上 5.2:1 vs zstd 3.5:1。HN 讨论中,作者 grohan 报告 VM 镜像超 40% 提升,但编码延迟 2-5x zstd(毫秒 / GB)。引用:“Compressed filesystems à la language models (grohan.co) 在 dedup 负载上超越 zstd。”
部署清单:
- 集成 FUSE/Btrfs 插件:压缩 on-write,解压 on-read,使用 LRU 缓存热门块(1GB)。
- 混合策略:重复率 >30%(via 快速 Rabin hash)用 LM,否则 fallback zstd。
- 监控:CPU 使用 <50%、延迟 <10ms / 块、压缩比 drift(retrain 阈值 5% 降)。
- 回滚:元数据存原算法 ID,异常时无缝切换。
- 规模:单节点 10GB RAM(模型 + 缓存),分布式 dedup 池共享 vocab/model。
风险与优化:主要瓶颈是推理延迟,可用 INT8 量化(损失 <1% 准确,速 x3)、distill 到 RNN(Triton Inference Server)。对于非重复负载,预检切换。未来,MoE 模型动态路由块类型,进一步提升通用性。
总体,此方案将 LM 压缩从文本扩展至二进制 FS,提供实战路径:从 POC(nanoLLaMA 蒸馏)到生产(自定义 Rust impl)。资料来源:Hacker News #10 (2025-11-27),grohan.co 帖子,arxiv LM-compression 论文。