Cloud Storage 的 PyTorch 連接器是 Google 支援的開放原始碼產品,可直接將 Cloud Storage 與 PyTorch 整合。
總覽
Connector for PyTorch 在訓練時載入資料,以及檢查點和模型載入方面,都具有優勢:
在訓練中載入資料時,Connector for PyTorch 具有下列優點:
- PyTorch 連接器包含最佳化功能,可將訓練速度提升最多三倍,適用於主要由小於 1 MB 的檔案組成的資料集。
- PyTorch 連接器會實作 PyTorch 的資料集基本類型,可用於有效率地從 Cloud Storage 值區載入訓練資料。
- 支援隨機資料存取模式的地圖樣式資料集,以及串流資料存取模式的可疊代樣式資料集。
- 可將下載的原始位元組資料轉換為您選擇的格式,讓 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。
- 如需值區的其他建議設定,請參閱複合物件使用方式。
- 下列權限可處理儲存在值區中的資料:
storage.objects.create
storage.objects.list
storage.objects.get
storage.objects.delete
,如果你打算使用組合下載項目
您必須使用「儲存空間物件使用者」等 IAM 角色,將這些權限授予給 Connector for 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 找到下列項目的效能資料:
- Lightning 文字訓練
- Lightning 圖片訓練
- 單一節點檢查點
- 多節點檢查點
注意事項
請根據每個工作負載考量下列事項。
快速列出作業
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 錯誤和效能降低
使用 Connector for PyTorch 時,您可能會收到 429 錯誤,或執行時間比預期慢。以下是導致這種情況的幾個常見原因:
- 許多機器學習工作會選擇高度分散式訓練模型,並運用 PyTorch Lightning 和 Ray 等工具。這些模型與 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 專案的最大容量。如要解決這些問題,請按照下列步驟操作:
- 確認專案中的其他工作負載不會耗用過多頻寬。
- 申請提高配額。
- 在建構資料集的設定部分中,調整
list_retry_config
和download_retry_config
選項,即可調整重試退避,並盡量提升效能。
- 每秒查詢次數上限可能會觸發 429 錯誤,並顯示指出
TooManyRequests
的主體訊息,但更常見的情況是執行時間比預期慢。處理大量小型檔案時,QPS 瓶頸更為常見。儲存區的每秒查詢次數上限會隨時間自然擴展,因此允許暖機期通常可以加快效能。如要進一步瞭解目標值區的效能,請從 Google Cloud 控制台查看值區時,前往「可觀測性」分頁。 - 如果工作負載失敗並顯示
TooManyRequests
錯誤,且錯誤訊息中包含dataflux-composed-objects
關鍵字,建議您先停用組合物件,這是最佳的初步疑難排解步驟。大規模使用時,這樣做可以減少撰寫作業帶來的每秒查詢次數負載。
記憶體消耗量
檢查點的寫入和載入 (包括用於推論的最終模型) 會完全在記憶體中暫存,以提升上傳和下載效能。每部電腦都必須有足夠的可用 RAM,才能在記憶體中暫存檢查點,進而充分發揮這些效能提升的優勢。
取得支援
如要取得支援、提出一般問題及要求新功能,請使用其中一個官方Google Cloud 支援管道。你也可以在 GitHub 中回報問題,取得支援。