在 GKE 中以「所有容量」模式部署 TPU

本文說明如何使用 GKE 的 TPU All Capacity 模式功能,部署及管理工作負載。所有容量模式預訂都會提供 TPU 資源的進階控制功能,讓您在預訂的容量中精細控管工作負載的放置位置。

本文適用於機器學習 (ML) 工程師、平台管理員和營運人員,他們希望使用 Kubernetes 容器自動化調度管理功能,精細控管 TPU 部署作業。

閱讀本文前,請先熟悉下列項目:

什麼是 TPU 全容量模式?

透過 TPU 叢集導向器啟用的 TPU All Capacity 模式,可讓您完全掌控預留的 TPU 容量。TPU 叢集導向器是一項管理服務,可讓您根據預訂控管 TPU。

與先前的代管模式不同, Google Cloud 會預留部分運算資源來處理硬體故障問題,而「所有運算資源」模式則會將所有預留的 TPU 資源提供給您使用。這個模式可讓您全面掌握硬體狀態,但節點故障和排定維護作業的管理責任也會轉移給您。

如要進一步瞭解「全容量模式」的主要功能,請參閱 TPU 叢集導向器總覽中的「全容量模式」。

GKE 全容量模式相關術語

下表列出 Ironwood (TPU7x) 版本中,區塊、子區塊和立方體大小定義的字詞和對等項目。立方體是互連 TPU 晶片的 4x4x4 拓撲,僅適用於 3 元組 ({A}x{B}x{C}) 中的拓撲。

TPU 資源 核心 晶片 主機 方塊
1 個晶片 2 1 - -
1 位主持人 8 4 1 -
1 個子模塊 128 64 16 1
一個區塊包含 144 個子區塊 18432 9216 2304 144

如要進一步瞭解區塊中允許的拓撲,請參閱「選擇拓撲」。

事前準備

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

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
  • 請確認您有 1.34.0-gke.2201000 以上版本的現有標準叢集。如要建立新叢集,請參閱「建立區域叢集」。
  • 確認您在要使用的區域中,有足夠的 TPU 配額。
  • 安裝 JobSet 0.2.3 以上版本。

限制

GKE 中的 TPU All Capacity 模式僅支援 Ironwood (TPU7x) 版本。

在 GKE 中使用 TPU All Capacity 模式

本節說明如何在 GKE 中使用 TPU All Capacity 模式的工作流程。

  1. 熟悉 TPU 叢集導向器
  2. 在「所有容量」模式下要求 TPU 容量
  3. 查看所有容量模式預訂的拓撲和健康狀態
  4. 完成這份文件中的步驟:
    1. 建立 GKE 節點集區
    2. 排定工作負載
    3. 使用「所有容量」模式預留項目管理節點故障
  5. 在「所有容量」模式下管理 TPU 維護事件
  6. 在「所有容量」模式下,回報並修復有 TPU 的故障主機

在「所有容量」模式預留項目中建立節點集區

GKE 的所有容量模式都可讓您透過下列方式建立節點集區:

  • 節點集區,GKE 會在您的 TPU All Capacity 預留項目中選取區塊或子區塊。
  • 節點集區會以 TPU All Capacity 模式預留項目中的特定區塊或子區塊為目標。

GKE 會在您的 TPU All Capacity 預留項目中選取區塊或子區塊

在這個模式中,GKE 會在您的 TPU All Capacity 預留項目中選取節點集區的放置位置。這個程序與使用其他 TPU 佈建選項 (例如隨選或 Spot VM) 建立節點集區類似。

如要建立節點集區,請使用 gcloud container node-pools create 指令搭配 --reservation 旗標。將 TPU 預留項目的完整資源名稱指定為 --reservation 標記的值。

如需節點集區建立指令的範例,請參閱「手動建立節點集區」。

指定預留項目中的區塊或子區塊

TPU All Capacity 模式可讓您在 TPU 預留項目中,指定特定區塊或子區塊,用於平行工作負載。這項功能適用於需要 TPU 晶片彼此靠近,以盡量縮短延遲時間的工作負載。

  1. 查看可用的區塊、子區塊和主機設定。完成「查看所有容量模式預留資源的拓撲和健康狀態」文件中的步驟。

  2. 建立工作負載政策:

    gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
        --type=HIGH_THROUGHPUT \
        --accelerator-topology=TPU_TOPOLOGY \
        --project=PROJECT_ID \
        --region=REGION
    

    更改下列內容:

    • WORKLOAD_POLICY_NAME:工作負載政策的名稱。
    • TPU_TOPOLOGY:TPU Ironwood (TPU7x) 拓撲。 例如,2x2x2。如要查看所有支援的 Ironwood (TPU7x) 拓撲,請參閱「在 GKE 中規劃 TPU」。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • REGION:工作負載政策的區域。工作負載政策是區域資源,可重複用於共用相同拓撲的節點集區。
  3. 如要建立節點集區並指定預留項目的特定區塊或子區塊,請使用 --reservation 標記,在預留項目中指定目標區塊或子區塊的完整資源名稱。

    如要指定預留項目中的特定區塊,請使用下列指令:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --machine-type=tpu7x-standard-4t \
        --placement-policy=WORKLOAD_POLICY_NAME \
        --zone=ZONE \
        --reservation=project/PROJECT/reservation/RESERVATION_NAME/reservationBlocks/BLOCK_NAME
    

    如要指定區塊內的特定子區塊,請使用下列指令:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --machine-type=tpu7x-standard-4t \
        --placement-policy=WORKLOAD_POLICY_NAME \
        --zone=ZONE \
        --reservation=project/PROJECT/reservation/RESERVATION_NAME/reservationBlocks/BLOCK_NAME/reservationSubBlocks/SUB_BLOCK_NAME
    

    更改下列內容:

    • NODE_POOL_NAME:新節點集區的名稱。
    • CLUSTER_NAME:GKE 叢集的名稱。
    • WORKLOAD_POLICY_NAME:您建立的工作負載政策名稱。
    • ZONE:節點集區的區域,例如 us-central1-a
    • PROJECT:您的 Google Cloud 專案 ID。
    • RESERVATION_NAME:TPU 預留項目的名稱。
    • BLOCK_NAME:預訂時段內的特定時間區塊。
    • SUB_BLOCK_NAME:預訂中的特定子區塊。

    在上述指令中,您

排定工作負載

在「所有容量」模式下建立含 TPU VM 的節點集區後,您就能像其他 TPU 節點集區一樣部署工作負載。如果是 TPU All Capacity 模式,與使用標準 SLO 支援預留項目的節點集區相比,排定工作負載時沒有其他差異。

如要進一步瞭解使用 TPU 的工作負載,請參閱「在 TPU 配量節點上執行工作負載」和「執行 Multislice 工作負載」。

管理節點故障

TPU All Capacity 模式預留項目為無保留預留項目。無保留 表示您會收到完整的 TPU 容量,包括Google Cloud 通常在代管容量模式中保留用於容錯移轉的部分。

在 TPU All Capacity 模式中,如果 VM 因硬體故障等問題而失敗,系統會嘗試在同一主機上復原 VM (就地修復)。 Google Cloud 因此,建議您保留備用容量,以便在基礎架構發生故障時重新安排工作負載。

節點故障和復原

如果以 TPU All Capacity 模式預留節點,當節點發生故障時,會發生下列事件:

  • Google Cloud 為失敗的 Compute Engine VM 執行個體啟動修復事件。這個程序會嘗試將 VM 還原為 RUNNING 狀態,並將 GKE 節點狀態還原為 READY
  • TPU VM 會進入修復狀態,且該節點上執行的任何工作負載可能會失敗 (視容錯移轉政策而定)。即使節點集區中有一或多個 VM 發生故障,節點集區的狀態也不會變更為 ERROR

如要監控節點的健康狀態,請按照下列步驟操作:

  1. 列出節點集區中的節點:

    kubectl get nodes
    

    失敗的節點狀態為 NotReady

  2. 監控 Compute Engine 節點的狀態:

    如要使用「所有容量」模式的 TPU VM,請使用 gcloud compute instances describe。這項指令也會提供拓撲的實體狀態,以找出主機、子區塊和區塊詳細資料。

    gcloud compute instances describe VM_NAME \
            --format="table[box,title=VM-Position](resourceStatus.physical_host_topology:label=location)" \
            --zone=ZONE
    

    更改下列內容:

    • VM_NAME:TPU VM 執行個體的名稱。
    • ZONE:VM 的可用區,例如 us-central1-a

    如要進一步瞭解如何擷取「所有容量」模式容量的拓撲和健康資訊,請參閱「查看『所有容量』模式預訂的拓撲和健康狀態」。

管理維護作業

如要處理潛在的中斷問題,並確保工作負載保持彈性,您可以使用 GKE 維護政策管理個別節點的維護作業。詳情請參閱「維護期間和維護排除時段」。

在「所有容量」模式預留項目中,GKE 不支援 TPU VM 的群組維護作業。如要在子區塊、區塊或預訂層級執行群組維護作業,請使用 Compute Engine API。詳情請參閱「在 All Capacity 模式下管理 TPU 維護事件」。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取不必要的費用,請刪除不再排定工作負載的 TPU 節點集區。如果執行中的工作負載必須安全終止,請先使用 kubectl drain 指令清除工作負載,再刪除節點集區。

  1. 刪除 TPU 節點集區:

    gcloud container node-pools delete NODE_POOL_NAME \
        --location=LOCATION \
        --cluster=CLUSTER_NAME
    

    更改下列內容:

    • NODE_POOL_NAME:節點集區的名稱。
    • CLUSTER_NAME:叢集名稱。
    • LOCATION:叢集的運算位置。

後續步驟