Hugging Face 引入内容定义分块以提升存储效率

内容定义分块基础

内容定义分块 (CDC) 根据数据本身将文件划分为可变大小的块,从而实现去重和细粒度更新。滚动哈希算法扫描字节序列;当哈希满足预定义条件时,放置一个块边界。相同的块产生相同的哈希,因此仅在内容寻址存储中存储一份副本,提供内置去重。

处理插入和删除

当文件发生变化时,CDC 仅允许上传和存储已修改的块,因为未修改的块已经存在于存储中。例如,将字符串 "super" 插入到重复的 "transformers" 序列中,只需保存一个新块,而两个现有的 "transformers" 块将被重复使用。

实际基准测试 (CORD-19 数据集)

使用基于 CDC 的存储 (Xet) 相比 Git LFS,在具有 50 次增量更新的 CORD-19 数据集上降低了存储和传输成本。平均下载时间从 51 分钟降至 19 分钟,平均上传时间从 47 分钟降至 24 分钟,使用的存储空间从 8.9 GB 降至 3.52 GB,在各项指标上表现出约 50% 的持续改进。

对 Hugging Face Hub 的影响

将 CDC 应用于 Hub 文件可显著节省存储。在 openai-community/gpt2 仓库中 model.safetensors 文件的两个版本,Git LFS 总共需要 1.2 GB,而基于 Xet 的存储仅需 645 MB,降低 53%,并预估通过压缩再额外节省 10%。在 Hub 中,微调模型和模型检查点的去重比率在 30% 到 85% 之间;仅 PyTorch 模型检查点约占 200 TB,因此 50% 的去重可立即节省高达 100 TB,此后每月大约节省 7-8 TB。块级去重还能提升上传/下载速度,因为仅传输已修改的块,减少用户和机器的等待时间。

未来工作

Xet 团队正在完成 Hub 的 Xet 支持存储的概念验证,并计划在 2025 年初推出一些 Xet 支持的仓库。未来工作将重点放在全球分布式仓库中扩展 CDC,平衡网络性能,管理隐私边界,并并行化分块算法。

Sources