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,平衡網路效能,管理隱私邊界,並將區塊劃分算法平行化。