Hugging Face Xet支持的仓库:通过块级聚合加速Hub传输
Hugging Face 正在实施一个新的基于块的去重系统,由 xet-core 和 hf_xet 提供支持,在某些情况下可将 Hub 上的文件上传和下载速度提高 2-3 倍。该系统摆脱了传统的以文件为中心的传输方式,采用内容寻址存储(CAS)模型,优化数据的移动和存储方式,以支持 AI 构建者的快速迭代。
通过块级聚合扩展去重
纯粹基于块的去重在 Hugging Face Hub 的规模下不可行——该 Hub 在 200 万个仓库中托管了近 45PB 的数据——因为这会在 CAS 中创建数十亿个独立条目。仅使用块(平均每块约 64KB)的天真方法将导致大约 6900 亿个块,由此产生数百万个独立请求带来的不可持续的网络开销,以及在 S3 或 DynamoDB 等服务中进行元数据管理的高昂基础设施成本。
为了解决这个问题,Hugging Face 采用 aggregation,确保通信和存储策略不会随着块数量的增加而按 1:1 扩展:
- Blocks:去重后,数据被捆绑成大小不超过 64MB 的块。这些块保持内容寻址,使 CAS 条目的总数减少了 1,000 倍。
- Shards:Shards 将文件映射到块并引用包含它们的块。这使得系统能够识别文件中特定的已更改部分,并跳过 CAS 中已存在的块的传输。
通过关键块和空间局部性优化传输
为了避免在上传过程中对每个块都进行网络查询,Hugging Face 使用 key chunks。关键块是所有块的 0.1% 子集,通过基于块哈希的取模条件选择。
通过维护这些关键块及其所在的 shards 的全局索引,系统在查询关键块时可以检索到相关的 shard。这利用了 spatial locality,因为同一 shard 中引用的块很可能相似。此机制大幅减少了验证块是否已上传所需的网络和数据库请求数量。
对量化模型的性能影响
量化模型(例如 .gguf 文件)是该系统的主要受益者,这是因为量化的特性将权重矩阵值限制在较小的整数范围内,导致不同量化变体(例如 Q4_K、Q3_K、Q5_K)之间出现高度重复和重叠。
在使用 bartowski/gemma-2-9b-it-GGUF 仓库的实际测试中,该仓库包含总计 191GB 的 29 种量化,Xet支持的方法展示了显著的效率提升:
- Storage Reduction:通过仅存储 1,515 个唯一块,仓库从 191GB 减少到大约 97GB(节省约 94GB)。
- Upload Speed:在 50MB/s 的传输速率下,上传时间从 509 分钟降至 258 分钟,几乎实现了 2 倍的加速。
- Download Efficiency:本地块缓存确保在文件更新或添加新量化时仅下载未更改的块,而基于文件的方法则需要下载整个文件。
可用性
Hugging Face 正在未来几周和几个月内推出首批 Xet支持的仓库,目标是让 Hub 上所有构建者的文件传输变得“不可见”。