Cloud Storage 的 PyTorch 連接器是 Google 支援的開放原始碼產品,可讓 Cloud Storage 與 PyTorch 直接整合。
總覽
Connector for PyTorch 可同時提供訓練資料載入、檢查點和模型載入的優點:
在訓練期間載入資料時,Connector for PyTorch 可提供下列優勢:
- PyTorch 連接器包含最佳化功能,可在資料集 (主要由小於 1 MB 的檔案組成) 中,讓訓練速度加快至預設 PyTorch 的三倍。
- PyTorch 連接器會實作 PyTorch 的資料集原始碼,可用於有效率地從 Cloud Storage 值區載入訓練資料。
- 支援地圖樣式資料集,用於隨機資料存取模式,以及可重複執行樣式資料集,用於串流資料存取模式。
- 可將下載的未經處理的資料位元組轉換為您選擇的格式,讓 PyTorch DataLoader 能靈活地處理 NumPy 陣列或 PyTorch 張量。
在檢查點和模型載入方面,Connector for PyTorch 提供下列優勢:
- 查核點介面,可方便直接將模型查核點儲存至 Cloud Storage 值區,並從值區載入模型查核點。
- Connector for PyTorch 會使用 PyTorch Lightning 的
CheckpointIO
實作DatafluxLightningCheckpoint
,支援 PyTorch Lightning 檢查點。 - 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 值區。
- 如要瞭解值區的其他建議設定,請參閱複合物件用法。
- 下列權限可用於處理儲存在值區中的資料:
storage.objects.create
storage.objects.list
storage.objects.get
storage.objects.delete
,如果您想使用組合下載功能
您必須使用 IAM 角色 (例如 Storage 物件使用者),將這些權限授予 PyTorch 連接器用於驗證的帳戶。
安裝
如要安裝 PyTorch 的連接器,請使用下列指令:
pip install gcs-torch-dataflux
設定
如要透過下列任一方法使用 PyTorch 連接器的應用程式預設憑證,必須提供驗證資訊:
- 在 Compute Engine VM 上執行 PyTorch 連接器時,應用程式預設憑證預設會自動使用 VM 的已附加服務帳戶。詳情請參閱「選擇工作負載驗證方法」。
- 您也可以手動設定應用程式預設憑證。您可以直接使用 Google Cloud CLI 登入:
gcloud auth application-default login
範例
如需完整的 Connector for PyTorch 操作範例,請前往 Connector for PyTorch GitHub 存放區的 demo 目錄。相關例子包括:
成效
Connector for PyTorch 針對機器學習工作負載進行了特定最佳化,可提供比直接呼叫 Cloud Storage API 更出色的效能:
- 為提升列出效能,PyTorch 連接器會使用快速列出演算法,在平行化物件列出程序中平衡列出工作負載。
- 為提升小型檔案的下載效能,Connector for PyTorch 會使用組合運算將較小物件組合成單一大型物件。這些新的複合物件會儲存在與來源物件相同的值區中,名稱中會加上前置字串
dataflux-composed-objects/
。 - 相較於標準檢查點上傳作業,多部分上傳檢查點寫入作業可讓效能提升至 10 倍。
您可以在 GitHub 上查看下列項目的成效資料:
- 閃電文字訓練
- 快速圖片訓練
- 單一節點檢查點
- 多節點檢查點
注意事項
請根據每項工作負載考量下列事項。
快速列出作業
Connector for PyTorch 的快速列出演算法會導致 Connector for PyTorch 使用比一般順序列出更多清單作業。清單作業會以 A 級作業計費。
複合物件用法
如要避免在使用暫時性組合物件時產生過多儲存空間費用和提早刪除費用,請務必確保 bucket 使用下列設定:
Connector for PyTorch 建立的複合物件通常會在訓練迴圈結束時自動移除,但在少數情況下,可能不會移除。如要確保物件已從值區中移除,您可以執行下列指令:
gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive
您可以在建構的資料集設定部分中加入 disable_compose=True
或 max_composite_object_size=0
,藉此停用複合物件的使用。不過,關閉這項行為可能會導致訓練迴圈耗時更久,尤其是在處理小型檔案時。
使用複合物件會導致 Cloud Storage 在 QPS 和傳輸量方面,比直接下載檔案時的規模更低。在以高多節點規模執行時,即使不使用複合物件,也會達到專案 QPS 或吞吐量限制,因此應停用複合物件。
429 錯誤和效能降低
使用 PyTorch 的連接器時,您可能會收到 429 錯誤,或執行時間比預期的慢。導致這種情況發生的常見原因如下:
- 許多機器學習專案都會選擇採用 PyTorch Lightning 和 Ray 等工具,建立高度分散式訓練模型。這些模型與 PyTorch 連接器相容,但經常會觸發 Cloud Storage 的速率限制。
- 429 錯誤訊息中如果出現「此工作負載從 Cloud Storage 使用過多的外連頻寬」或「此工作負載觸發 Cloud Storage 外連頻寬上限」等訊息,表示工作負載的資料處理量率超過 Google Cloud 專案的最大容量。如要解決這些問題,請按照下列步驟操作:
- 確認專案中的其他工作負載不會消耗過多的頻寬。
- 申請提高配額。
- 調整您要建構的資料集設定部分中的
list_retry_config
和download_retry_config
選項,以調整重試退避並充分發揮效能。
- 每秒查詢次數上限可能會觸發 429 錯誤,並顯示指出
TooManyRequests
的內容訊息,但更常見的情況是執行時間比預期的慢。處理大量小型檔案時,QPS 瓶頸更為常見。桶 QPS 限制會隨著時間自然調整,因此設定暖機期通常可提升效能。如要進一步瞭解目標區塊的成效,請在 Google Cloud 控制台查看區塊時,查看「可觀察性」分頁。 - 如果工作負載失敗,且錯誤訊息中包含包含關鍵字
dataflux-composed-objects
的TooManyRequests
錯誤,建議您先停用組合物件的使用,這樣做可減少大規模使用時,由組合運算產生的 QPS 負載。
記憶體用量
為了提升上傳和下載效能,系統會在記憶體中完整排程檢查點寫入和載入作業,包括用於推論的最終模型。每部機器都必須有足夠的 RAM 可在記憶體中排程其檢查點,才能充分利用這些效能改善功能。
取得支援
您可以使用其中一個官方 Google Cloud 支援管道,取得支援服務、提交一般問題,以及要求新功能。您也可以在 GitHub 回報問題,以便取得支援。