選擇合適的儲存空間設定,對訓練叢集的效能和穩定性至關重要。這項服務整合了兩種不同的高效能儲存空間解決方案:
- Filestore:這項代管檔案服務是必要服務,可為叢集中的所有節點提供共用
/home目錄。 - Google Cloud Managed Lustre:選用的平行檔案系統,專為極致 I/O 效能而設計,非常適合用來訓練龐大資料集。請將其視為高效能的工作儲存空間,而非記錄系統,並將 Cloud Storage 做為可靠資料來源。詳情請參閱「將 Managed Lustre 資料備份至 Cloud Storage」。
本頁將概略說明這些功能的主要用途,並列出與叢集成功整合時的特定網路和部署需求。
訓練叢集的儲存空間整合
Gemini Enterprise Agent Platform 訓練叢集需要特定的網路儲存空間解決方案才能運作。Filestore 必須為叢集提供共用 /home 目錄,而 Managed Lustre 則是選用的高效能檔案系統,適用於嚴苛的工作負載。
部署叢集前,請務必正確設定這些儲存服務的網路。
主目錄的 Filestore
這項服務會使用 Filestore 執行個體,為叢集提供共用 /home 目錄。為確保連線正常運作,您必須依下列特定順序建立雲端資源:
- 建立虛擬私有雲網路:首先,部署設定建議 MTU (例如 8896) 的虛擬私有雲網路。
- 建立 Filestore 執行個體:接著,將 Filestore 執行個體部署到您剛建立的虛擬私有雲。
- 建立訓練叢集: 最後部署叢集,即可連線至同一網路中的 Filestore 執行個體。
Google Cloud Managed Lustre 適用於高效能工作負載
如要處理需要最高 I/O 效能的工作負載,可以附加代管 Lustre 檔案系統。這項服務會使用私人服務存取權連線至您的虛擬私有雲。
Managed Lustre 著重於處理量,而非耐久性。執行個體屬於可用區,且不具備快照、備份或還原功能。將無法重新產生的內容備份至 Cloud Storage。詳情請參閱「將 Managed Lustre 資料備份至 Cloud Storage」。
將 Managed Lustre 資料備份到 Cloud Storage
將 Cloud Storage 設為 Managed Lustre 背後的事實來源。這樣做可保護檢查點,並在執行個體故障或遭刪除時快速復原。
Managed Lustre 內建高處理量傳輸功能,可直接匯出至 Cloud Storage。轉移作業是增量作業:每次執行時,只會複製目的地中沒有的檔案,或是上次轉移後變更的檔案。
您需要為兩個身分授予權限。啟動匯出作業的使用者或服務帳戶需要 lustre.instances.exportData,這項權限包含在 roles/lustre.admin 角色中,您也可以透過自訂角色授予這項權限。Managed Lustre 服務代理需要另外取得目的地 bucket 的寫入權。
授予 Managed Lustre 服務代理目的地 bucket 的寫入權限。每個 bucket 只需執行一次這項操作:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com \ --role=roles/storage.objectUser其中:
- BUCKET_NAME 是目的地 bucket。
- PROJECT_NUMBER 是包含 Managed Lustre 執行個體的專案編號。詳情請參閱「Managed Lustre 服務代理的權限」。
將檔案系統匯出至 bucket:
gcloud lustre instances export-data INSTANCE_ID \ --location=ZONE \ --lustre-path="/" \ --gcs-path-uri="gs://BUCKET_NAME/INSTANCE_ID/"其中:
- INSTANCE_ID 是要備份的 Managed Lustre 執行個體名稱。
- ZONE 是執行個體的區域,例如
us-central1-a。
--gcs-path-uri值可以是獨立的 bucket,也可以是 bucket 內的路徑。如果加入路徑,結尾必須為正斜線。將每個執行個體匯出至以其命名的路徑,可確保執行個體彼此獨立。如果將多個 Managed Lustre 執行個體附加至叢集,請為每個執行個體提供專屬路徑,因為匯出至相同路徑的兩個執行個體會覆寫彼此的檔案。
如要確保備份資料為最新狀態,請排定匯出作業。舉例來說,您可以在登入節點上執行每日 Cron 工作,而不只是在訓練執行結束時執行。由於轉移作業是累加制,因此第一次執行後,每次只會複製變更的內容。
規劃備份時,請注意下列事項:
- 每個執行個體一次只能啟用一項轉移作業。如果正在執行移轉作業,而您又發起另一項移轉作業,則後者會失敗並顯示
ABORTED: unable to queue the operation。 - 匯出作業絕不會刪除目的地中的物件,因此您在 Managed Lustre 上刪除的檔案仍會保留在 bucket 中。在目的地值區啟用物件版本管理功能,這樣一來,即使檔案遭到不當內容覆寫,您也能復原。
- 系統不會保留符號連結、空白目錄和以
lfs setstripe設定的條紋版面配置,且會將硬連結匯出為個別物件,因此硬連結檔案在 bucket 中每個連結都會消耗空間。POSIX UID、GID、模式和 mtime 會保留為自訂物件中繼資料。 - 以不可分割的形式寫入檢查點,也就是先寫入暫存路徑,然後將檔案重新命名到適當位置,這樣在寫入期間執行的匯出作業就會擷取先前的檔案或完整的新檔案,絕不會擷取部分檔案。
如要還原,請建立新的 Managed Lustre 執行個體,並使用 gcloud lustre instances import-data 重新載入資料。詳情請參閱「將資料傳輸至 Cloud Storage 或從 Cloud Storage 傳輸資料」。
重要的網路限制:不具備遞移性
Filestore 和 Google Cloud Managed Lustre 的重大限制是,兩者都不支援遞移對等互連。也就是說,只有直接連線的虛擬私有雲中的資源,才能存取儲存空間服務。舉例來說,如果叢集的虛擬私有雲 (N1) 與儲存空間服務對等互連,則與 N1 對等互連的另一個虛擬私有雲 (N2) 就無法存取。
訓練叢集的儲存空間整合
Gemini Enterprise Agent Platform 訓練叢集需要特定的網路儲存解決方案才能運作。您必須使用 Filestore 為叢集提供共用 /home 目錄,而 Google Cloud Managed Lustre 則是選用的高效能檔案系統,適用於嚴苛的工作負載。部署叢集前,請務必正確設定這些儲存服務的網路。
Filestore
搭配使用 Filestore 與訓練叢集的主要用途
除了做為必要的主目錄,Filestore 還提供彈性的方式,可與叢集共用資料。
額外共用儲存空間:您可以將一或多個額外的 Filestore 執行個體附加至任何節點集區。這項功能可為訓練工作提供共用資料集、應用程式二進位檔或其他常見檔案。在節點集區設定中指定這些執行個體後,訓練叢集就會自動將這些執行個體掛接至每個節點的 /mnt/filestore 目錄。
Filestore 需求
如要成功將 Filestore 與訓練叢集整合,必須進行下列設定:
- 啟用 API:您必須先在 Google Cloud 雲端專案中啟用 Filestore API,才能建立叢集。
- 必要
/home目錄:每個訓練叢集都需要專屬的 Filestore 執行個體,做為共用的/home目錄。這個執行個體有特定的設定需求:- 網路:必須與叢集的運算和登入節點位於相同的虛擬私有雲網路。
- 位置:必須與叢集位於相同區域或可用區。
- 設定:透過 API 建立叢集時,您必須在
欄位中指定這個執行個體的完整資源名稱。orchestrator_spec.slurm_spec.home_directory_storage
設定 Filestore 儲存空間
在要建立叢集的區域中,建立區域或地區 Filestore 執行個體。Agent Platform API 需要將 Filestore 連接至叢集,做為 /home 目錄。這個 Filestore 必須與所有運算節點和登入節點位於同一個可用區或區域,且位於同一個網路。在下列範例中,172.16.10.0/24 用於 Filestore 部署作業。
SERVICE_TIER=ZONAL # Can use BASIC_SSD # Create reserved IP address range gcloud compute addresses create CLUSTER_IDfs-ip-range \ --project=PROJECT_ID \ --global \ --purpose=VPC_PEERING \ --addresses=172.16.10.0 \ --prefix-length=24 \ --description="Filestore instance reserved IP range" \ --network=NETWORK # Get the CIDR range FS_IP_RANGE=$( gcloud compute addresses describe CLUSTER_IDfs-ip-range \ --global \ --format="value[separator=/](address, prefixLength)" ) # Create the Filestore instance gcloud filestore instances create FS_INSTANCE_ID \ --project=PROJECT_ID \ --location=ZONE \ --tier=ZONAL \ --file-share=name="nfsshare",capacity=1024 \ --network=name=NETWORK,connect-mode=DIRECT_PEERING,reserved-ip-range="${FS_IP_RANGE}"
Lustre
Google Cloud Managed Lustre 提供高效能全代管平行檔案系統,專為 AI 和 HPC 應用程式最佳化。Managed Lustre 的容量可達數 PB,處理量最高可達 1 TBps,有助於將需要大量資源的工作負載遷移至雲端。
Managed Lustre 執行個體位於區域內的可用區。地區是您可以執行資源的所在特定地理位置。每個地區都會分成數個區域。舉例來說,美國中部的 us-central1 區域有 us-central1-a、us-central1-b、us-central1-c 和 us-central1-f 等多個可用區。詳情請參閱「地理位置與區域」一文。
如要降低網路延遲時間,建議在距離您打算使用 Managed Lustre 執行個體的位置較近的地區與區域建立執行個體。
建立 Managed Lustre 執行個體時,您必須定義下列屬性:
- Google Cloud 使用的執行個體名稱。
- 用戶端工具使用的檔案系統名稱,例如
lfs。 - 儲存空間容量 (GiB)。容量範圍為 9,000 GiB 至約 8 PiB (7,632,000 GiB)。執行個體大小上限取決於效能層級。
- Managed Lustre 提供多種效能等級,從每 TiB 125 MB/秒到每 TiB 1000 MB/秒不等。
- 如要獲得最佳效能,請在與訓練叢集相同的區域中建立執行個體。
- 這個執行個體的虛擬私有雲網路必須與訓練叢集使用的網路相同。
Managed Lustre 提供 4 個效能層級,每個層級的每 TiB 最大處理量速度都不同。效能層級也會影響執行個體大小下限和上限,以及可接受容量值之間的步距。執行個體建立後,就無法變更效能層級。
部署 Managed Lustre 需要私人服務存取權,這會在訓練叢集的虛擬私有雲端與 Managed Lustre 的虛擬私有雲端之間,使用專屬的 /20 子網路建立虛擬私有雲端對等互連。
設定 Managed Lustre 執行個體 (選用)
只有在想於模型開發服務中使用 Managed Lustre 時,才需要使用 Google Cloud Managed Lustre。
Google Cloud Managed Lustre 是 Google Cloud 的全代管高效能平行檔案系統服務。專為加速 AI/機器學習和高效能運算 (HPC) 中要求嚴苛的工作負載而設計。
如要在使用訓練叢集時達到最佳效能,請使用虛擬私有雲對等互連服務網路,從與訓練叢集相同的虛擬私有雲和可用區部署 Google Cloud Managed Lustre。
建立 Lustre 執行個體
gcloud lustre instances create LUSTRE_INSTANCE_ID \
--project=PROJECT_ID \
--location=ZONE \
--filesystem=lustrefs \
--per-unit-storage-throughput=500 \
--capacity-gib=36000 \
--network=NETWORK_NAME
掛接 Cloud Storage
請先確認 VM 服務帳戶具備 Storage 物件使用者角色。
預設掛接
Gemini Enterprise Agent Platform 訓練叢集會使用 Cloud Storage FUSE,在所有登入和運算節點上動態掛接 Cloud Storage 值區,讓這些值區可透過 /gcs 目錄存取。無法從根掛接點 /gcs 列出動態掛接的值區。您可以將動態掛接的值區當做子目錄存取:
user@testcluster:$ ls /gcs/your-bucket-name
user@testcluster:$ cd /gcs/your-bucket-name
客製標本支架
如要使用自訂選項將特定 Cloud Storage bucket 掛接至本機目錄,請使用下列指令結構,方法是在建立叢集時將指令當做開機指令碼的一部分傳遞,或在叢集建立後直接在節點上執行。
sudo mkdir -p $MOUNT_DIR
echo "$GCS_BUCKET $MOUNT_DIR gcsfuse $OPTION_1,$OPTION_2,..." | sudo tee -a /etc/fstab
sudo mount -a
舉例來說,如要將 bucket mtdata 掛接到 /data 目錄,請使用下列指令:
sudo mkdir -p /data
echo "mtdata /data gcsfuse defaults,_netdev,implicit_dirs,allow_other,dir_mode=777,file-mode=777,metadata_cache_negative_ttl_secs=0,metadata_cache_ttl_secs=-1,stat_cache_max_size_mb=-1,type_cache_max_size_mb=-1,enable_streaming_writes=true" | sudo tee -a /etc/fstab
sudo mount -a
如要完全自動化且一致地設定,請在叢集的開機指令碼中加入自訂掛接指令碼。這樣做可確保 Cloud Storage bucket 在啟動時自動掛接至所有節點,不必手動設定。
如需針對 AI/機器學習工作負載量身打造的額外設定建議,請參閱效能調整最佳做法指南。並提供具體指引,說明如何針對訓練、推論和檢查點作業最佳化 Cloud Storage FUSE。
後續步驟
接下來的步驟著重於如何有效運用叢集進行大規模訓練。
- 調整程式碼以進行分散式訓練:如要充分運用多節點叢集和高效能儲存空間,請調整訓練程式碼,使其適用於分散式環境。
- 使用 Gemini Enterprise Agent Platform Pipelines 協調工作:針對實際工作環境工作流程,使用 Agent Platform Pipelines 自動執行資料準備、工作提交和模型註冊程序。
- 監控及偵錯訓練工作:追蹤分散式訓練工作的進度和資源用量,找出並解決問題。