Connector for PyTorch

Cloud Storage Connector for PyTorch 是一項開放原始碼工具,可直接整合 Cloud Storage 和 PyTorch。這個連接器可協助您載入訓練資料,並管理人工智慧 (AI) 和機器學習 (ML) 工作負載的模型檢查點。

本頁面說明如何安裝及開始使用 Cloud Storage Connector for PyTorch。

總覽

Connector for PyTorch 在訓練期間載入資料,以及設定查核點和載入模型時,具有以下優勢:

在訓練期間載入資料時,Connector for PyTorch 具有下列優點:

  • Connector for PyTorch 包含最佳化功能,如果資料集主要由小於 1 MB 的檔案組成,訓練速度最多可比預設 PyTorch 快三倍。
  • Connector for PyTorch 會實作 PyTorch 的資料集原始物件,可用於從 Cloud Storage bucket 有效率地載入訓練資料。
  • 支援對應式資料集,適用於隨機資料存取模式;支援可疊代式資料集,適用於串流資料存取模式。
  • 可將下載的原始位元組資料轉換為所需格式,讓 PyTorch DataLoader 靈活處理 NumPy 陣列或 PyTorch 張量。

在檢查點和模型載入方面,Connector for PyTorch 具有下列優勢:

  • 查核點介面,可直接將模型查核點儲存至 Cloud Storage bucket,並從 bucket 載入模型查核點,方便您操作。
  • Connector for PyTorch 支援 PyTorch Lightning 查核點,方法是使用 PyTorch Lightning CheckpointIO 的 DatafluxLightningCheckpoint 實作。
  • Connector for PyTorch 提供 StorageWriter 和 StorageReader 實作,可用於 PyTorch 分散式檢查點。Connector for PyTorch 示範程式庫包含範例程式碼,說明如何在 PyTorch Lightning FSDP 工作負載中使用這項功能。
  • 連接器查核點支援 Lightning 和基本 PyTorch 的非同步查核點儲存功能。

詳情請參閱 PyTorch 連接器的 GitHub 登陸頁面。

架構

Connector for PyTorch 支援下列架構版本:

  • Python 3.8 以上版本
  • PyTorch Lightning 2.0 以上版本
  • PyTorch 2.3.1 以上版本

開始使用

如要使用 Connector for PyTorch,您必須具備下列條件:

  • 包含要處理資料的 Cloud Storage bucket。
  • 下列權限,用於處理 bucket 中儲存的資料:
    • storage.objects.create
    • storage.objects.list
    • storage.objects.get
    • storage.objects.delete,如果您打算使用組合下載

您必須使用 Storage 物件使用者等 IAM 角色,將這些權限授予 Connector for PyTorch 用於驗證的帳戶。

安裝

如要安裝 Connector for PyTorch,請使用下列指令:

pip install gcs-torch-dataflux

設定

您必須透過下列其中一種方法,提供應用程式預設憑證,才能使用 Connector for PyTorch:

  • 在 Compute Engine VM 上執行 Connector for PyTorch 時,應用程式預設憑證預設會自動使用 VM 附加的服務帳戶。詳情請參閱「選擇工作負載驗證方式」。
  • 您也可以手動設定應用程式預設憑證。您可以直接使用 Google Cloud CLI 登入:
gcloud auth application-default login

範例

如要查看使用 Connector for PyTorch 的完整範例集,請前往 Connector for PyTorch GitHub 存放區的 demo 目錄。例如:

效能

Connector for PyTorch 針對機器學習工作負載進行特定最佳化,效能明顯優於直接對 Cloud Storage 發出 API 呼叫:

  • 為提升清單效能,Connector for PyTorch 採用快速列出演算法,在平行物件列出程序之間平衡列出工作負載。
  • 為提升小型檔案的下載效能,Connector for PyTorch 會使用組合操作,將多個小型物件串連成單一大型物件。這些複合式物件會儲存在與來源物件相同的值區中,且名稱會加上前置字串 dataflux-composed-objects/。
  • 多部分上傳功能可讓檢查點寫入作業的效能提升 10 倍,優於標準檢查點上傳作業。

您可以在 GitHub 上找到下列項目的成效資料:

  • Lightning 文字型訓練
  • Lightning 圖片訓練
  • 單一節點檢查點
  • 多節點查核點

注意事項

請根據每個工作負載考量下列事項。

快速列出作業

Connector for PyTorch 的快速列出演算法會導致 Connector for PyTorch 使用比一般循序列出更多的列出作業。清單作業會以 A 類作業計費。

複合式物件用量

使用暫時性複合物件時,為避免產生過多的儲存費用和提早刪除費用,請確保 bucket 使用下列設定:

Connector for PyTorch 建立的複合式物件通常會在訓練迴圈結束時自動移除,但少數情況下可能不會。如要確保物件已從 bucket 中移除,可以執行下列指令:

gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive

如要停用複合式物件,請在建構的資料集設定部分加入 disable_compose=True 或 max_composite_object_size=0。不過,關閉這項行為可能會導致訓練迴圈耗費的時間大幅增加,尤其是處理小型檔案時。

使用複合物件時,Cloud Storage 達到 QPS 和輸送量限制的規模,會比直接下載檔案時更小。在高多節點規模下執行時,即使不使用複合物件,您也會達到專案 QPS 或輸送量限制,因此應停用複合物件的使用。

429 錯誤和效能降低

使用 Connector for PyTorch 時,您可能會收到 429 錯誤,或執行時間比預期慢。以下是發生這種情況的幾個常見原因:

  • 許多機器學習工作會選擇高度分散式訓練模型,並運用 PyTorch Lightning 和 Ray 等工具。這些模型與 Connector for PyTorch 相容,但通常會觸發 Cloud Storage 的頻率限制。
  • 如果出現 429 錯誤,並伴隨「This workload is drawing too much egress bandwidth from Cloud Storage」(這項工作負載從 Cloud Storage 提取的輸出頻寬過多) 或「This workload triggered the Cloud Storage Egress Bandwidth Cap」(這項工作負載觸發 Cloud Storage 輸出頻寬上限) 等訊息,表示工作負載的資料輸送量超出專案的 Google Cloud 容量上限。如要解決這些問題,請按照下列步驟操作:
  • QPS 限制可能會觸發 429 錯誤,並顯示 TooManyRequests 訊息,但更常見的情況是執行時間比預期慢。處理大量小型檔案時,較常發生 QPS 瓶頸。Bucket QPS 限制會隨著時間自然調整,因此預留暖機時間通常能加快效能。如要進一步瞭解目標值區的效能,請從 Google Cloud 控制台查看值區,並前往「可觀測能力」分頁。
  • 如果工作負載失敗並傳回 TooManyRequests 錯誤,且錯誤訊息中包含 dataflux-composed-objects 關鍵字,建議先停用組合物件,這是最佳的初步疑難排解步驟。這樣做可以減少大規模使用時,撰寫作業帶來的 QPS 負載。

記憶體消耗量

查核點寫入和載入作業 (包括用於推論的最終模型) 會完全暫存在記憶體中,以最佳化上傳和下載效能。每部機器都必須有足夠的可用 RAM,才能在記憶體中暫存檢查點,進而充分發揮這些效能提升的優勢。

取得支援

如要取得支援、提出一般問題及要求新功能,請使用其中一個官方Google Cloud 支援管道。您也可以在 GitHub 回報問題,取得支援。

PyTorch、PyTorch 標誌和任何相關標誌均為 The Linux Foundation 的商標。