newsence
Hugging Face Hub 推出儲存桶功能

Hugging Face Hub 推出儲存桶功能

Huggingface·27 天前

Hugging Face 推出了儲存桶功能,這是一種基於 Xet 技術的 S3 式可變物件儲存空間,為機器學習產出提供高效的去重技術與預熱功能。

在 Hugging Face Hub 上推出儲存桶(Storage Buckets)

儲存桶(Storage Buckets)正是為此而生:可變動的、類 S3 的物件儲存空間,您可以在 Hub 上瀏覽、使用 Python 進行腳本編寫,或透過 hf CLI 進行管理。由於它們底層由 Xet 支援,對於在檔案之間共享內容的機器學習(ML)產出物(artifacts)而言,效率特別高。

圖片

為什麼我們開發儲存桶

當您處理以下情況時,Git 很快就會讓人覺得不是正確的抽象方式:

在所有這些情況下,儲存需求都是相同的:快速寫入、需要時覆寫、同步目錄、移除過期檔案,並保持流程順暢。

儲存桶(Bucket)是 Hub 上的一種無版本控制儲存容器。它存在於使用者或組織命名空間下,擁有標準的 Hugging Face 權限,可以是私有或公開的,擁有可以在瀏覽器中開啟的頁面,並可以透過類似 hf://buckets/username/my-training-bucket 的控制代碼進行程式化存取。

為什麼 Xet 很重要

儲存桶建立在 Xet 之上,這是 Hugging Face 的基於分塊(chunk-based)的儲存後端,這比看起來更重要。

Xet 不將檔案視為單一的大型二進位物件(blobs),而是將內容拆分為分塊並進行跨檔案去重。上傳一個與原始數據大部分相似的已處理數據集?許多分塊已經存在。儲存模型大部分被凍結的連續檢查點(checkpoints)?同樣的情況。儲存桶會跳過已經存在的位元組,這意味著更少的頻寬、更快的傳輸和更高效的儲存。

這非常適合機器學習工作負載。訓練流水線會不斷產生一系列相關的產出物——原始和處理過的數據、連續的檢查點、智能體(Agent)追蹤和衍生的摘要——而 Xet 的設計正是為了利用這種重疊性。

對於企業客戶,計費是基於去重後的儲存量,因此共享分塊直接減少了計費佔用空間。去重同時有助於提高速度並降低成本。

圖片

預熱(Pre-warming):讓數據靠近運算端

儲存桶位於 Hub 上,這意味著預設是全球儲存。但並非每個工作負載都能負擔從數據所在地擷取數據的成本,對於分散式訓練和大規模流水線,儲存位置直接影響吞吐量。

預熱功能讓您可以將熱數據(hot data)移動到靠近運算運行的雲端供應商和區域。數據不再需要在每次讀取時跨區域傳輸,您只需聲明需要數據的位置,儲存桶會確保在作業開始時數據已在那裡。這對於需要快速存取大型數據集或檢查點的訓練集群,以及流水線不同部分在不同雲端運行的多區域設置特別有用。

我們首先與 AWS 和 GCP 合作,未來將支援更多雲端供應商。

圖片

開始使用

您可以使用 hf CLI 在 2 分鐘內啟動並運行儲存桶。第一步是安裝並登入:

為您的專案建立一個儲存桶:

假設您的訓練作業正在將檢查點本地寫入 ./checkpoints。將該目錄同步到儲存桶中:

對於大型傳輸,您可能希望在移動任何內容之前查看會發生什麼。--dry-run 會列印計畫而不執行任何操作:

您也可以將計畫儲存到檔案中進行審查,稍後再套用:

完成後,從 CLI 檢查儲存桶:

或直接在 Hub 上瀏覽:https://huggingface.co/buckets/username/my-training-bucket

這就是整個循環。建立儲存桶,將工作數據同步進去,需要時進行檢查,並在有值得發布的內容時儲存為有版本的儲存庫。對於一次性操作,hf buckets cp 可複製單個檔案,而 hf buckets remove 則清理過期的物件。

從 Python 使用儲存桶

上述所有功能也可以透過 huggingface_hub(自 v1.5.0 起可用)從 Python 運作。API 遵循相同的模式:建立、同步、檢查。

這使得將儲存桶整合到訓練腳本、數據流水線或任何以程式化方式管理產出物的服務中變得非常簡單。Python 客戶端還支援批量上傳、選擇性下載、刪除以及在需要更精細控制時移動儲存桶。

JavaScript 也透過 @huggingface/hub(自 v2.10.5 起)支援儲存桶,因此您也可以將儲存桶整合到 Node.js 服務和 Web 應用程式中。

檔案系統整合

儲存桶還可透過 HfFileSystem 運作,這是 huggingface_hub 中與 fsspec 相容的檔案系統。這意味著您可以使用標準檔案系統操作來列出、讀取、寫入和使用 glob 匹配儲存桶內容——任何支援 fsspec 的函式庫都可以直接存取儲存桶。

由於 fsspec 是遠端檔案系統的標準 Python 介面,pandas、Polars 和 Dask 等函式庫可以使用 hf:// 路徑讀取和寫入儲存桶,無需額外設置:

這使得將儲存桶插入現有的數據工作流變得容易,而無需更改程式碼讀取或寫入檔案的方式。

從儲存桶到有版本的儲存庫

儲存桶是產出物在仍處於變動狀態時存放的快速、可變動場所。一旦某樣東西成為穩定的交付成果,它通常屬於一個有版本的模型或數據集儲存庫。

在路線圖中,我們計劃支援儲存桶與儲存庫之間的雙向直接傳輸:將最終檢查點權重提升到模型儲存庫中,或在流水線完成後將處理過的分片提交到數據集儲存庫中。工作層和發布層保持分離,但融入一個連續的 Hub 原生工作流中。

獲得發布夥伴的信任

在向所有人開放儲存桶之前,我們與一小群發布夥伴進行了私人測試。

圖片

非常感謝 Jasper、Arcee、IBM 和 PixAI 測試早期版本、發現錯誤並分享直接塑造此功能的反饋。

結論與資源

儲存桶為 Hub 帶來了缺失的儲存層。它們為機器學習中可變動、高吞吐量的一面提供了一個 Hub 原生的場所:檢查點、處理過的數據、智能體追蹤、日誌,以及在最終確定之前有用的所有其他內容。

由於建立在 Xet 之上,儲存桶不僅比強行透過 Git 處理所有事情更容易使用,而且對於 AI 系統不斷產生的各類相關產出物也更有效率。這意味著更快的傳輸、更好的去重,以及在企業方案中,受益於去重後佔用空間的計費方式。

如果您已經在使用 Hub,儲存桶讓您可以將更多工作流程保留在同一個地方。如果您來自 S3 類型的儲存,它們為您提供了一個熟悉的模型,且與 AI 產出物有更好的契合度,並提供了通往 Hub 最終發布的清晰路徑。

儲存桶包含在現有的 Hub 儲存方案中。免費帳戶配有初始儲存空間,而 PRO 和企業方案提供更高的限制。詳情請參閱儲存頁面。

閱讀更多並親自嘗試:

來自我們部落格的更多文章

圖片

串流數據集:效率提升 100 倍

圖片

Parquet 內容定義分塊(Content-Defined Chunking)

社群

· 註冊或登入以發表評論

https://huggingface.co/blog/storage-buckets