本文將簡介 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 中的目錄」。
事前準備
檔案快取需要目錄路徑,才能快取檔案。您可以在現有檔案系統上建立新目錄,或在佈建的儲存空間上建立新檔案系統。如要佈建新的儲存空間,請按照下列操作說明建立新的檔案系統:
如要瞭解 Google Cloud Hyperdisk,請參閱「建立新的 Google Cloud Hyperdisk 磁碟區」。
如要瞭解 Persistent Disk,請參閱「建立新的 Persistent Disk 磁碟區」。
如要瞭解本機 SSD,請參閱「將本機 SSD 新增至 VM」一文。
如要瞭解記憶體內 RAM 磁碟,請參閱「建立記憶體內 RAM 磁碟」。
啟用及設定檔案快取行為
請選取下列其中一種方法,啟用及設定檔案快取:
將其做為
gcsfuse選項的值提供
請使用下列其中一種方法,指定要使用的快取目錄。這樣一來,您就能為非 Google Kubernetes Engine 部署作業啟用檔案快取:
gcsfuse選項:--cache-dir- 設定檔欄位:
cache-dir
如果您使用 Google Kubernetes Engine 部署項目,並搭配 Google Kubernetes Engine 適用的 Cloud Storage FUSE CSI 驅動程式,請指定下列其中一種方法:
gcsfuse選項:--file-cache-max-size-mb- 設定檔欄位:
file-cache:max-size-mb
選用:如果系統未自動啟用平行下載功能,請使用下列其中一種方法將
true設為 true,啟用平行下載功能:調整下列其中一個選項,限制 Cloud Storage FUSE 快取在掛接目錄中可使用的總容量。指定快取目錄時,系統會自動將這些選項設為
-1值:gcsfuse選項:--file-cache-max-size-mb- 設定檔欄位:
file-cache:max-size-mb
您也可以指定 MiB 或 GiB 值,限制快取大小。
選用:略過快取項目的存留時間到期時間,並使用下列其中一種方法,將值設為
-1,從快取提供檔案中繼資料 (如有):gcsfuse選項:--metadata-cache-ttl-secs- 設定檔欄位:
metadata-cache:ttl-secs
預設值為 60 秒,如果設為
-1,則表示不限時間。您也可以根據需求指定較高的值。建議您將ttl-secs值設為工作負載允許的最高值。如要進一步瞭解快取項目的存留時間,請參閱「注意事項」。選用:啟用檔案快取功能,讓檔案的第一個讀取作業從
offset 0以外的位置開始時,也能將整個檔案非同步載入快取,這樣後續從同一檔案讀取不同位移時,也能從快取提供資料。請使用下列其中一種方法,並將選項設為true:選用:設定統計資料快取。如要進一步瞭解統計資料快取,請參閱「統計資料快取總覽」。
執行工作負載前,請先在掛接的值區上手動執行
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/.*" ..
後續步驟
瞭解如何提升 Cloud Storage FUSE 效能。