Cloud Storage FUSE 中的檔案快取

本文將簡介 Cloud Storage FUSE 檔案快取,並說明如何設定及使用檔案快取。

Cloud Storage FUSE 檔案快取是用戶端讀取快取,可從您選擇的較快快取儲存空間提供重複的檔案讀取作業,提升讀取作業的效能。啟用檔案快取功能後,Cloud Storage FUSE 會在本機儲存經常存取的檔案副本,後續讀取時可直接從快取提供,進而縮短延遲時間並提高處理量。

檔案快取的優點

檔案快取具有下列優點:

  • 提升小型和隨機 I/O 的效能:檔案快取會直接從快取媒體提供讀取作業,進而改善延遲時間和處理量。從快取提供服務時,小型隨機 I/O 作業的速度會大幅提升。

  • 自動啟用平行下載:在 Cloud Storage FUSE 2.12 以上版本中,啟用檔案快取時,系統會自動啟用平行下載。平行下載功能會使用多個 worker,並以檔案快取目錄做為預先擷取緩衝區,平行下載檔案,最多可將模型載入速度提升九倍。建議您在單一執行緒讀取情境中使用平行下載,載入大型檔案,例如提供模型和查核點還原。

  • 使用現有容量:檔案快取可使用現有佈建的機器容量做為快取目錄,不會產生額外的儲存空間費用。這包括與 Cloud GPU 機型 (例如 a2-ultragpu、a3-highgpu) 搭配使用的本機 SSD、Persistent Disk (每個 VM 使用的開機磁碟) 或記憶體內 /tmpfs。

  • 降低費用:快取命中時,系統會在本機提供服務,不會產生 Cloud Storage 作業或網路費用。

  • 降低 AI 和機器學習訓練的總持有成本:檔案快取功能可加快資料載入速度,進而提高 Cloud GPU 和 Cloud TPU 的使用率,縮短訓練時間,並為人工智慧和機器學習 (AI/ML) 訓練工作負載提供更高的價格效能比。

平行下載

平行下載功能可使用多個 worker,以檔案快取目錄做為預先擷取緩衝區,平行下載檔案的多個部分,進而提升讀取效能。建議您在讀取情境中使用平行下載,載入大型檔案,例如提供模型、檢查點還原,以及大型物件的訓練。

啟用檔案快取和並行下載的用途包括:

用途類型 說明
訓練 如果要存取的資料會讀取多次 (無論是多次讀取相同檔案,還是讀取相同檔案的不同位移),請啟用檔案快取。如果資料集大於檔案快取,檔案快取應維持停用狀態,並改用下列其中一種方法:
提供模型權重和查核點讀取 啟用檔案快取和平行下載功能,即可使用平行下載功能,載入大型檔案的速度會比不使用檔案快取和平行下載功能時快得多。

注意事項

  • 檔案快取存留時間 (TTL):如果檔案快取項目尚未根據其存留時間過期,且檔案位於快取中,則對該檔案的讀取作業會從本機用戶端快取提供服務,而不會向 Cloud Storage 發出任何要求。

  • 檔案快取項目到期:如果檔案快取項目已到期,系統會先對 Cloud Storage 進行 GET 檔案屬性呼叫。如果檔案遺失,或是屬性或內容有所變更,系統會擷取新內容。如果屬性只是失效,但內容仍有效 (表示物件產生作業未變更),系統只會在屬性呼叫確認內容有效後,才從快取提供內容。這兩項作業都會造成網路延遲。

  • 檔案快取失效:當 Cloud Storage FUSE 用戶端修改快取檔案或其屬性時,該用戶端的快取項目會立即失效,以確保一致性。不過,存取同一檔案的其他用戶端會繼續讀取快取版本,直到個別存留時間設定導致失效為止。

  • 檔案大小和可用容量:讀取的檔案必須符合檔案快取目錄的可用容量,您可以使用 --file-cache-max-size-mb 選項或 file-cache:max-size-mb 欄位控制這項設定。請注意,您無法設定個別檔案的大小上限。

  • 快取淘汰:系統會根據最近最少使用 (LRU) 演算法,淘汰快取的中繼資料和資料。一旦達到每個 --file-cache-max-size-mb 限制設定的空間門檻,就會開始淘汰。如果項目根據 TTL 到期,系統會先對 Cloud Storage 進行 GET 中繼資料呼叫,並受網路延遲影響。由於資料和中繼資料是分開管理,因此可能發生其中一個實體遭到逐出或失效,另一個則否。

  • 快取持續性:Cloud Storage FUSE 快取不會在卸載和重新啟動時保留。檔案快取方面,雖然卸載和重新啟動時,系統會撤除從快取提供檔案所需的中繼資料項目,但檔案快取中的資料可能仍會存在於檔案目錄中。建議您在卸載或重新啟動後,刪除檔案快取目錄中的資料。

  • 隨機和部分讀取管理:當第一個檔案讀取作業從檔案開頭 (偏移量 0) 開始時,Cloud Storage FUSE 檔案快取會擷取整個檔案並載入快取,即使您只讀取一小部分範圍也一樣。這樣一來,後續從相同物件隨機或部分讀取時,就能直接從快取提供。

    根據預設,從任何其他位移讀取資料都不會觸發非同步完整檔案擷取作業。如要變更這項行為,讓 Cloud Storage FUSE 在初始隨機讀取時將檔案擷取至快取,請將 --file-cache-cache-file-for-range-read 選項或 file-cache:cache-file-for-range-read 欄位設為 true。

    如果對同一個物件執行許多不同的隨機或部分讀取作業,建議啟用這項屬性。

  • 資料安全性:啟用快取時,Cloud Storage FUSE 會使用您透過 --cache-dir 選項或 cache-dir 欄位指定的快取目錄,做為快取的基礎目錄,以加密格式保存 Cloud Storage bucket 中的檔案。任何有權存取這個快取目錄的使用者或程序,都能存取這些檔案。建議您限制存取這個目錄。

  • 直接或多次存取檔案快取:使用 Cloud Storage FUSE 以外的程序存取或修改快取目錄中的檔案,可能會導致資料損毀。Cloud Storage FUSE 快取是每個 Cloud Storage FUSE 執行程序的專屬快取,在相同或不同機器上執行的不同 Cloud Storage FUSE 程序之間,不會共用快取。因此,我們不建議不同 Cloud Storage FUSE 程序使用相同的快取目錄。

  • 在同一部機器上執行多個 Cloud Storage FUSE 程序:如果多個 Cloud Storage FUSE 程序需要在同一部機器上執行,每個 Cloud Storage FUSE 程序都應取得專屬的快取目錄,或使用下列其中一種方法,確保資料不會損毀:

    • 使用共用快取掛接所有 bucket:使用動態掛接,在單一程序中以共用快取掛接您有權存取的所有 bucket。詳情請參閱「Cloud Storage FUSE 動態掛接」。

    • 啟用特定 bucket 的快取功能:使用靜態掛接,僅啟用指定 bucket 的快取功能。詳情請參閱「Cloud Storage FUSE 靜態掛接」。

    • 僅快取特定資料夾或目錄:掛接並快取特定 bucket 層級的資料夾,而非掛接整個 bucket。詳情請參閱「掛接 bucket 中的目錄」。

事前準備

檔案快取需要目錄路徑,才能快取檔案。您可以在現有檔案系統上建立新目錄,或在佈建的儲存空間上建立新檔案系統。如要佈建新的儲存空間,請按照下列操作說明建立新的檔案系統:

  1. 如要瞭解 Google Cloud Hyperdisk,請參閱「建立新的 Google Cloud Hyperdisk 磁碟區」。

  2. 如要瞭解 Persistent Disk,請參閱「建立新的 Persistent Disk 磁碟區」。

  3. 如要瞭解本機 SSD,請參閱「將本機 SSD 新增至 VM」一文。

  4. 如要瞭解記憶體內 RAM 磁碟,請參閱「建立記憶體內 RAM 磁碟」。

啟用及設定檔案快取行為

  1. 請選取下列其中一種方法,啟用及設定檔案快取:

  2. 請使用下列其中一種方法,指定要使用的快取目錄。這樣一來,您就能為非 Google Kubernetes Engine 部署作業啟用檔案快取:

    如果您使用 Google Kubernetes Engine 部署項目,並搭配 Google Kubernetes Engine 適用的 Cloud Storage FUSE CSI 驅動程式,請指定下列其中一種方法:

  3. 選用:如果系統未自動啟用平行下載功能,請使用下列其中一種方法將 true 設為 true,啟用平行下載功能:

  4. 調整下列其中一個選項,限制 Cloud Storage FUSE 快取在掛接目錄中可使用的總容量。指定快取目錄時,系統會自動將這些選項設為 -1 值:

    您也可以指定 MiB 或 GiB 值,限制快取大小。

  5. 選用:略過快取項目的存留時間到期時間,並使用下列其中一種方法,將值設為 -1,從快取提供檔案中繼資料 (如有):

    預設值為 60 秒,如果設為 -1,則表示不限時間。您也可以根據需求指定較高的值。建議您將 ttl-secs 值設為工作負載允許的最高值。如要進一步瞭解快取項目的存留時間,請參閱「注意事項」。

  6. 選用:啟用檔案快取功能,讓檔案的第一個讀取作業從 offset 0 以外的位置開始時,也能將整個檔案非同步載入快取,這樣後續從同一檔案讀取不同位移時,也能從快取提供資料。請使用下列其中一種方法,並將選項設為 true:

  7. 選用:設定統計資料快取。如要進一步瞭解統計資料快取,請參閱「統計資料快取總覽」。

  8. 執行工作負載前,請先在掛接的值區上手動執行 ls -R 指令,預先填入中繼資料,確保統計資料快取在首次讀取前,以更快的批次方式填入。如要進一步瞭解如何改善首次讀取效能,請參閱「改善首次讀取」。

啟用檔案快取後,系統會自動在 Cloud Storage FUSE 2.12 以上版本啟用平行下載功能。如果使用舊版 Cloud Storage FUSE,請將 enable-parallel-downloads 選項設為 true,啟用平行下載功能。

設定平行下載的支援屬性

您可以選擇使用 Cloud Storage FUSE CLI 或 Cloud Storage FUSE 設定檔,為平行下載設定下列支援屬性:

房源說明 gcsfuse選項 設定檔欄位
每個檔案可產生的 worker 數量上限,用於將物件從 Cloud Storage 下載至檔案快取。 --file-cache-parallel-downloads-per-file file-cache:parallel-downloads-per-file
所有檔案下載工作中,任何時間可產生的 worker 數量上限。預設值為機器 CPU 核心數的兩倍。如要指定不設限,請輸入 `-1`。 --file-cache-max-parallel-downloads file-cache:max-parallel-downloads
每個 worker 將物件下載至檔案快取時,向 Cloud Storage 提出的讀取要求大小 (以 MiB 為單位)。請注意,只有在讀取的檔案達到指定大小時,才會觸發平行下載。 --file-cache-download-chunk-size-mb file-cache:download-chunk-size-mb

停用平行下載功能

如要停用平行下載,請將下列其中一個項目設為 false:

  • gcsfuse 選項:--file-cache-enable-parallel-downloads
  • 設定檔欄位:file-cache:enable-parallel-downloads

使用規則運算式,以檔案精細程度控管可快取性

根據預設,系統會快取所有讀取的檔案。您可以使用 file-cache 設定中的選用 include-regex 和 exclude-regex 欄位,控制要快取的檔案。您可以在這些欄位中指定規則運算式,與 bucket_name/object_key 格式的檔案路徑進行比對。

納入要快取的特定檔案

如要只快取符合特定模式的檔案,請使用 include-regex 選項。不符合這個規則運算式的檔案都不會快取。舉例來說,如要只快取訓練資料集中的 .tfrecord 檔案,請在設定檔中指定下列項目:

file-cache:
  include-regex: ".*\\.tfrecord$"

或使用 --file-cache-include-regex 旗標:

gcsfuse --file-cache-include-regex ".*\\.(tfrecord)$" ..

不快取特定檔案

如要避免快取特定檔案,請使用 exclude-regex 選項。符合這項規則運算式的檔案都不會快取。舉例來說,如要排除名為 logs/ 的目錄中的所有檔案,請在設定檔中指定下列內容:

file-cache:
  exclude-regex: ".*/logs/.*"

或者,使用 --file-cache-exclude-regex 旗標:

gcsfuse --file-cache-exclude-regex ".*/logs/.*" ..

同時使用納入和排除規則

您可以同時使用 include-regex 和 exclude-regex。系統一律會先評估 exclude-regex 規則。如果檔案符合 exclude-regex,即使也符合 include-regex,系統也不會快取該檔案。舉例來說,如要快取所有 .tfrecord 檔案,但不包括 output/ 目錄中的檔案,請在設定檔中指定下列內容:

file-cache:
  include-regex: ".*\\.tfrecord$"
  exclude-regex: ".*/output/.*"

或者,同時使用這兩個旗標:

gcsfuse --file-cache-include-regex ".*\\.tfrecord$" --file-cache-exclude-regex ".*/output/.*" ..

後續步驟