使用 XPK 在 GKE 上佈建 Managed Lustre

本文說明如何整合 Managed Lustre 與 GKE,為要求嚴苛的資料密集型工作負載 (例如人工智慧 (AI)、機器學習 (ML) 和高效能運算 (HPC)) 建立最佳化環境。

本文將說明如何使用 XPK 佈建 GKE 叢集、建立 Managed Lustre 執行個體,並將其附加至叢集。如要測試這項設定,請在彈性啟動佈建的節點上執行工作負載。

本文適用於機器學習 (ML) 工程師,以及對 Kubernetes 容器協調功能感興趣的資料和 AI 專家,這些功能由 Managed Lustre 執行個體提供支援。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。 Google Cloud

背景

本節說明本文使用的重要技術:

XPK

XPK 是一種工具,可簡化 GKE 叢集和工作負載的佈建與管理作業,特別是 AI/機器學習工作。XPK 可協助生成預先設定且經過訓練最佳化的基礎架構,因此非常適合概念驗證和測試環境。

您可以使用 Google Cloud CLI 或加速處理套件 (XPK),建立使用 TPU 的叢集。

  • 使用 gcloud CLI 手動建立 GKE 叢集執行個體,精確自訂或擴充現有的正式環境 GKE 環境。
  • 使用 XPK 快速建立 GKE 叢集,並執行概念驗證和測試工作負載。詳情請參閱 XPK README

本文件僅使用 XPK 佈建及管理資源。

詳情請參閱「加速處理套件 (XPK)」說明文件。

彈性啟動

彈性啟動功能可讓您只為需要的資源付費,進而最佳化 TPU 佈建作業。如果工作負載需要動態佈建資源 (最多七天),且需要經濟實惠的存取權,建議使用彈性啟動。

本文以彈性啟動為例,說明可用的消耗選項,但您也可以使用其他選項,例如預留項目或 Spot。詳情請參閱「關於 GKE 中 AI/機器學習工作負載的加速器消耗選項」。

Managed Lustre

Managed Lustre 是高效能的平行檔案系統服務,專為要求嚴苛的工作負載而設計。有了 Managed Lustre CSI 驅動程式,您就能使用標準 Kubernetes 永久磁碟區要求 (PVC) 和永久磁碟區 (PV),將 Managed Lustre 執行個體與 GKE 整合。這項驅動程式特別適合需要持續性、可擴充且高處理量儲存空間的 AI、機器學習和 HPC 工作負載。

詳情請參閱「關於 Managed Lustre CSI 驅動程式」。

事前準備

開始之前,請確認您已完成下列工作:

  • 啟用 Google Cloud Managed Lustre API 和 Google Kubernetes Engine API。
  • 啟用 API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

準備環境

本節說明如何準備叢集環境。

  1. 在新終端機視窗中建立虛擬環境:

    VENV_DIR=~/venvp4;python3 -m venv $VENV_DIR;source $VENV_DIR/bin/activate
    
  2. 按照「XPK 安裝」檔案中的步驟安裝 XPK。請使用 pip install,不要從來源複製。

  3. 設定預設環境變數:

    gcloud config set project PROJECT_ID
    gcloud config set billing/quota_project PROJECT_ID
    export PROJECT_ID=$(gcloud config get project)
    export LOCATION=LOCATION
    export CLUSTER_NAME=CLUSTER_NAME
    export GKE_VERSION=VERSION
    export NETWORK_NAME=NETWORK_NAME
    export IP_RANGE_NAME=IP_RANGE_NAME
    export FIREWALL_RULE_NAME=FIREWALL_RULE_NAME
    export ACCELERATOR_TYPE=v6e-16
    export NUM_SLICES=1
    

    替換下列值:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:GKE 叢集的可用區。選取彈性啟動和 Managed Lustre 執行個體的可用區。例如,us-west4-a。如需有效輸送量值,請參閱「關於使用彈性啟動佈建模式佈建 GPU 和 TPU」。
    • CLUSTER_NAME:GKE 叢集的名稱。
    • VERSION:GKE 版本。請確保這是支援 Managed Lustre 的最低版本。例如 1.33.2-gke.1111000。
    • NETWORK_NAME:您建立的網路名稱。
    • IP_RANGE_NAME:IP 位址範圍的名稱。
    • FIREWALL_RULE_NAME:防火牆規則的名稱。

    上述指令會設定 v6e-16 加速器類型。這項設定包含下列變數:

    • ACCELERATOR_TYPE=v6e-16:對應於具有 4x4 拓撲的 TPU Trillium。 這個 TPU 版本會指示 GKE 佈建多主機節點集區。v6e-16 會對應至 GKE 中的 ct6e-standard-4t 機器類型。
    • NUM_SLICES=1:XPK 為您選取的 ACCELERATOR_TYPE 建立的 TPU 配量節點集區數量。

    如要自訂 ACCELERATOR_TYPENUM_SLICES 變數,請參閱下列文件,瞭解可用的組合:

準備虛擬私有雲網路

為 Managed Lustre 執行個體和 GKE 叢集準備虛擬私有雲網路。

  1. 啟用 Service Networking API:

    gcloud services enable servicenetworking.googleapis.com \
            --project=${PROJECT_ID}
    
  2. 建立虛擬私人雲端網路:

    gcloud compute networks create ${NETWORK_NAME} \
            --subnet-mode=auto --project=${PROJECT_ID} \
            --mtu=8896
    
  3. 建立虛擬私有雲對等互連的 IP 位址範圍:

    gcloud compute addresses create ${IP_RANGE_NAME} \
            --global \
            --purpose=VPC_PEERING \
            --prefix-length=20 \
            --description="Managed Lustre VPC Peering" \
            --network=${NETWORK_NAME} \
            --project=${PROJECT_ID}
    
  4. 取得 IP 位址範圍的 CIDR 範圍:

    CIDR_RANGE=$(
        gcloud compute addresses describe ${IP_RANGE_NAME} \
                --global  \
                --format="value[separator=/](address, prefixLength)" \
                --project=${PROJECT_ID}
    )
    
  5. 建立防火牆規則,允許來自 IP 位址範圍的 TCP 流量:

    gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \
            --allow=tcp:988,tcp:6988 \
            --network=${NETWORK_NAME} \
            --source-ranges=${CIDR_RANGE} \
            --project=${PROJECT_ID}
    
  6. 連結虛擬私有雲對等互連。

    gcloud services vpc-peerings connect \
            --network=${NETWORK_NAME} \
            --project=${PROJECT_ID} \
            --ranges=${IP_RANGE_NAME} \
            --service=servicenetworking.googleapis.com
    

建立 Managed Lustre 儲存空間執行個體

建立 Managed Lustre 儲存空間執行個體。

  1. 設定儲存空間執行個體變數:

    export STORAGE_NAME=STORAGE_NAME
    export STORAGE_THROUGHPUT=STORAGE_THROUGHPUT
    export STORAGE_CAPACITY=STORAGE_CAPACITY_GIB
    export STORAGE_FS=lfs
    

    替換下列值:

    • STORAGE_NAME:Managed Lustre 執行個體的名稱。
    • STORAGE_THROUGHPUT:Managed Lustre 執行個體的處理量,以每 TiB 的 MiB/秒為單位。如要瞭解有效的輸送量值,請參閱「計算新容量」。
    • STORAGE_CAPACITY_GIB:Managed Lustre 執行個體的容量 (以 GiB 為單位)。如要瞭解有效的容量值,請參閱「允許的容量和處理量值」。
  2. 建立 Managed Lustre 執行個體:

    gcloud lustre instances create ${STORAGE_NAME} \
            --per-unit-storage-throughput=${STORAGE_THROUGHPUT} \
            --capacity-gib=${STORAGE_CAPACITY} \
            --filesystem=${STORAGE_FS} \
            --location=${LOCATION} \
            --network=projects/${PROJECT_ID}/global/networks/${NETWORK_NAME} \
            --project=${PROJECT_ID} \
            --async # Creates the instance asynchronously
    

    --async 標記會非同步建立執行個體,並提供作業 ID 來追蹤狀態。

  3. 檢查作業狀態:

    gcloud lustre operations describe OPERATION_ID  \
            --location=${LOCATION} \
            --project=${PROJECT_ID}
    

    OPERATION_ID 取代為上一個非同步指令輸出內容中的 ID。如果沒有 ID,可以列出所有作業:

    gcloud lustre operations list \
            --location=${LOCATION} \
            --project=${PROJECT_ID}
    

    當指令輸出內容顯示 done: true,表示執行個體已準備就緒。

使用 XPK 建立 GKE 叢集

使用 XPK 建立含有節點集區的 GKE 叢集。

建立 GKE 叢集:

xpk cluster create --cluster ${CLUSTER_NAME} \
        --num-slices=${NUM_SLICES} \
        --tpu-type=${ACCELERATOR_TYPE} \
        --zone=${LOCATION} \
        --project=${PROJECT_ID} \
        --gke-version=${GKE_VERSION} \
        --custom-cluster-arguments="--network=${NETWORK_NAME}" \
        --enable-lustre-csi-driver \
        --flex

這個指令會使用 XPK 建立 GKE 叢集。叢集已設定為使用彈性啟動進行節點佈建,並已啟用 Managed Lustre CSI 驅動程式。

將儲存空間執行個體連結至叢集

如要設定 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC),本節會搭配資訊清單檔案使用 XPK 儲存空間連結指令 (xpk storage attach)。本節會使用 XPK 原始碼中的範例資訊清單

完成下列步驟,將 Managed Lustre 儲存空間執行個體附加至 GKE 叢集:

  1. 資訊清單範例檔案下載至目前的工作目錄,並儲存為 lustre-manifest-attach.yaml

  2. 使用 Managed Lustre 執行個體的資訊更新資訊清單檔案:

    1. PersistentVolume 區段中,替換下列值:

      • STORAGE_SIZE:Managed Lustre 執行個體的大小,以 GiB 為單位。
      • PROJECT_ID/ZONE/INSTANCE_NAME:Managed Lustre 執行個體的完整資源路徑。
      • IP_ADDRESS:Managed Lustre 執行個體的 IP 位址。
      • FILE_SYSTEM:檔案系統類型,即 lfs
    2. PersistentVolumeClaim 區段中,替換下列值:

      • STORAGE_SIZE:PersistentVolumeClaim 的大小 (以 GiB 為單位)。
  3. 將儲存空間執行個體附加至叢集:

    xpk storage attach ${STORAGE_NAME} \
            --cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION} \
            --type=lustre \
            --mount-point='/lustre-data' \
            --readonly=false \
            --auto-mount=true \
            --manifest='./lustre-manifest-attach.yaml'
    
  4. 確認您已附加叢集的儲存空間:

    xpk storage list \
            --cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION}
    

執行工作負載

使用已附加的 Managed Lustre 執行個體執行工作負載。下列範例指令會列出可用磁碟,並在 Managed Lustre 執行個體的目錄中建立「hello」檔案。

建立並執行工作負載:

xpk workload create --workload test-lustre \
--cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION} \
--command="df -h && echo 'hello' > /lustre-data/hello.txt && cat /lustre-data/hello.txt" \
--tpu-type=${ACCELERATOR_TYPE} \
--num-slices=1 \
--flex

清除所用資源

完成本文的步驟後,為避免帳戶產生不必要的費用,請刪除叢集:

  xpk cluster delete --cluster ${CLUSTER_NAME} \
        --zone ${LOCATION} \
        --project ${PROJECT_ID}

後續步驟