將 Cloud Storage 做為掛接的檔案系統使用

Cloud Storage FUSE 可讓您將訓練資料載入 Cloud Storage 值區,並透過自訂訓練工作存取該資料,就像掛載的檔案系統一樣。使用 Cloud Storage FUSE 可享有下列優點:

  • 訓練資料會串流至訓練工作,而非下載至副本,這樣一來,工作開始執行時,資料載入和設定工作就能更快完成。
  • 訓練工作可處理大量輸入和輸出,而不需要發出 API 呼叫、處理回應或與用戶端程式庫整合。
  • Cloud Storage FUSE 可在分散式訓練情境中,為大型檔案的順序讀取提供高處理量。

用途

在下列情況下,建議您使用 Cloud Storage 儲存訓練資料:

  • 訓練資料是圖片、文字和影片等非結構化資料。
  • 訓練資料是結構化資料,格式為 TFRecord 等。
  • 訓練資料包含大型檔案,例如原始影片。
  • 您使用分散式訓練。

運作方式

自訂訓練工作可透過根目錄 /gcs 的子目錄存取 Cloud Storage 值區。舉例來說,如果訓練資料位於 gs://example-bucket/data.csv,您可以透過 Python 訓練應用程式讀取及寫入儲存桶,如下所示:

讀取至儲存桶

with open('/gcs/example-bucket/data.csv', 'r') as f:
  lines = f.readlines()

寫入值區

with open('/gcs/example-bucket/epoch3.log', 'a') as f:
  f.write('success!\n')

值區存取權限

根據預設,自訂訓練工作可使用 Vertex AI 自訂程式碼服務代理,存取同一個 Google Cloud 專案中的任何 Cloud Storage 值區。如要控管存取資料夾的權限,您可以為工作指派自訂服務帳戶。在這種情況下,系統會根據與自訂服務帳戶 Cloud Storage 角色相關聯的權限,授予 Cloud Storage 值區的存取權。

舉例來說,如果您想讓自訂訓練工作擁有 Bucket-A 的讀取和寫入權限,但只擁有 Bucket-B 的讀取權限,您可以為工作指派具備下列角色的自訂服務帳戶:

  • roles/storage.objectAdmin (適用於值區 A)
  • roles/storage.objectViewer (值區 B)

如果訓練工作嘗試寫入 Bucket-B,系統會傳回「permission denied」(權限遭拒) 錯誤。

如要進一步瞭解 Cloud Storage 角色,請參閱「Cloud Storage 的 IAM 角色」。

最佳做法

  • 請勿重新命名目錄。在 Cloud Storage FUSE 中,重新命名作業並非不可分割的作業。如果作業中斷,部分檔案會保留在舊目錄中。
  • 請避免不必要地關閉 (close()) 或清除檔案 (flush())。關閉或清除檔案會將檔案推送至 Cloud Storage,因此會產生費用。

效能最佳化指南

如要使用 Cloud Storage 做為檔案系統,以便取得最佳讀取吞吐量,建議您實作下列規範:

  • 如要減少查詢及開啟桶中物件所造成的延遲時間,請將資料儲存在較大的檔案中,並減少檔案數量。
  • 使用分散式訓練,盡可能提高頻寬使用率。
  • 快取經常存取的檔案,以提高讀取效能。詳情請參閱「Cloud Storage FUSE 中的快取功能總覽」。
  • 使用本機儲存空間來進行檢查點和記錄,而不要使用 Cloud Storage。

限制

如要瞭解 Cloud Storage FUSE 的限制,包括 Cloud Storage FUSE 與 POSIX 檔案系統的差異,請參閱「限制和與 POSIX 檔案系統的差異」。

使用 Cloud Storage FUSE

如要使用 Cloud Storage FUSE 進行自訂訓練,請按照下列步驟操作:

  1. 建立 Cloud Storage 值區。請注意,自訂訓練不支援雙區域和多區域區塊。
  2. 將訓練資料上傳至值區。詳情請參閱「上傳」。

    如要瞭解將資料轉移至 Cloud Storage 的其他選項,請參閱「資料移轉選項」。

  3. 安裝 Cloud Storage FUSE

  4. 在訓練應用程式中掛接值區

後續步驟