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.createstorage.objects.liststorage.objects.getstorage.objects.delete,如果你打算使用組合下載項目
您必須使用 IAM 角色 (例如「Storage 物件使用者」),將這些權限授予給 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 等工具。這些模型與 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 如要解決這些問題,請按照下列步驟操作:
- 確認專案中的其他工作負載不會耗用過多頻寬。
- 申請提高配額。
- 在建構資料集的設定部分中,調整
list_retry_config和download_retry_config選項,即可調整重試退避,並盡量提升效能。
- 每秒查詢次數上限可能會觸發 429 錯誤,並顯示指出
TooManyRequests的主體訊息,但更常見的情況是執行時間比預期慢。處理大量小型檔案時,QPS 瓶頸更為常見。Bucket QPS 限制會隨著時間自然擴展,因此允許暖機期通常可以加快效能。如要進一步瞭解目標值區的成效,請從 Google Cloud 控制台查看值區時,前往「可觀測性」分頁。 - 如果工作負載失敗並顯示
TooManyRequests錯誤,且錯誤訊息中包含dataflux-composed-objects關鍵字,建議先停用組合物件,這是最佳的初步疑難排解步驟。大規模使用時,這樣做可以減少撰寫作業帶來的 QPS 負載。
記憶體消耗量
查核點寫入和載入作業 (包括用於推論的最終模型) 會完全在記憶體中暫存,以提升上傳和下載效能。每部電腦都必須有足夠的可用 RAM,才能在記憶體中暫存檢查點,進而充分發揮這些效能提升的優勢。
取得支援
如要取得支援、提出一般問題及要求新功能,請使用其中一個官方Google Cloud 支援管道。您也可以在 GitHub 回報問題,取得支援。