為維護事件做好準備

TPU VM 是附加 TPU 硬體的 Compute Engine VM 例項。Compute Engine VM 會受到 Compute Engine VM 維護事件的影響。每個 TPU 都會連線至 Compute Engine VM,因此使用更多 TPU (例如在 TPU 切片中),會提高其中一個 VM 發生維護事件的可能性。

本文將說明如何處理 Cloud TPU 上長時間執行的訓練工作維護事件。如要瞭解如何處理 Google Kubernetes Engine (GKE) 中 TPU 的維護作業事件,請參閱「管理 GPU 和 TPU 的 GKE 節點中斷情形」。

查看即將進行的維護作業通知

您可以查看即將進行的主機維護作業通知。監控執行個體的近期維護期間,您就能主動準備工作負載,以便在維護期間盡量減少中斷情形。詳情請參閱「查看維護通知」。

使用檢查點,快速復原維護事件

檢查點是從維護事件中快速復原的關鍵,因此應經常儲存。經驗法則是每隔約一小時儲存一次查核點。如果未經常建立檢查點,可能會因為維護事件或其他訓練中斷而失去大量訓練進度。

查核點通常是指訓練過程中儲存的所有參數,例如模型權重。儲存檢查點所需的時間可能從幾秒到幾分鐘不等。

雖然 TPU 可從大多數維護事件自動復原,訓練作業也會繼續進行,無須人工介入,但仍可能出現作業不會重新啟動且自動繼續的極端情況。發生這種情況時,您必須刪除並重新建立 TPU 資源,然後從已儲存的檢查點重新啟動訓練工作。如要瞭解如何偵測自動復原失敗情況並復原,請參閱「偵測 TPU 失敗情況並復原」一文。

每個 ML 架構都有不同的機制,用於儲存及載入檢查點。支援的 Cloud TPU 模型通常內建檢查點。如要進一步瞭解檢查點,請參閱 TensorFlow 2.xPyTorchJAX/flax

使用自動查核點

您可以使用「自動查核點」功能,在發生維護事件時儲存未排程的查核點,藉此保留訓練進度。如要進一步瞭解 Autocheckpoint,請參閱 Cloud TPU Autocheckpoint

重新執行訓練指令碼

訓練指令碼可能會因中斷事件而停止。您可以使用 bash 指令碼,持續重試訓練指令碼,直到訓練完成為止。例如:

while ! gcloud compute tpus tpu-vm ssh ${TPU_NAME} --command "python3 TRAINING_COMMAND"; do sleep 1; done

每次重試都應從最新的檢查點繼續,因此請務必搭配使用重試指令碼和檢查點。

可用於實際工作的訓練管道應使用資源管理系統,例如 Google Kubernetes Engine (GKE)。如要進一步瞭解如何搭配 TPU VM 使用 Google Kubernetes Engine,請參閱「部署 TPU 工作負載」。

偵測並復原 TPU 故障

如果 TPU 無法從維護事件中復原,您可以使用復原指令碼來偵測 TPU 狀態,並刪除及重新建立 TPU。如需復原指令碼範例,請參閱 retry.sh。如果執行訓練指令碼的程序異常終止,您可以修改復原指令碼,重新嘗試執行訓練指令碼。

如要瞭解如何手動刪除及重新建立 TPU,請參閱「管理 TPU 資源」。

使用集合排程

Cloud TPU 採用集合排程的概念,提供兩種集合,可供客戶用於支援訓練或服務與推斷工作負載。當您使用這項功能部署 Cloud TPU 執行個體時, Google Cloud 會套用最符合應用程式的獨特維護時程。每個收集類型都會顯示下列行為:

  • 訓練 (預設):此收集類型適用於一般訓練工作負載,因為您需要在所有執行個體中盡可能減少停機時間,並減少意外中斷時間,以便在維護事件期間快速還原服務。訓練集合類型可為一組執行個體並行安排及執行維護事件。

  • 提供服務 (可使用 --workload-type=AVAILABILITY_OPTIMIZED):此收集類型適用於大多數提供服務或推論工作負載,因為您需要在少數執行個體 (複本) 上盡可能減少停機時間,以確保服務持續運作,即使在維護作業期間也一樣。服務收集類型可為一組執行個體提供分階段的排程和維護事件執行作業。只有 TPU v6e 支援指定服務集合。

如要進一步瞭解收集排程,請參閱推論工作負載的 TPU 收集排程

偵測維護事件

您可以使用下列 gcloud compute tpus tpu-vm describe 指令,偵測 TPU 是否發生維護事件,以及發生的時間:

$ gcloud compute tpus tpu-vm describe tpu-name --zone=zone  | grep 'health'

這項指令的輸出內容會顯示 TPU 的目前狀態,以及最近一次維護事件的說明。輸出內容應類似以下內容:

health: HEALTHY
healthDescription: The TPU had a maintenance event at 2022-01-26T03:44:36.265703305Z

查看維護事件記錄

您可以在系統事件稽核記錄中查看 TPU 維護事件的歷來記錄。

  1. 在 Google Cloud 控制台導覽選單中,前往「Logs Explorer」頁面:

    前往「Logs Explorer」

  2. 使用下列搜尋查詢,查看已終止或重新啟動的任何 TPU:

    "tpu.nodes.terminate" OR "tpu.nodes.restart"

    結果會顯示搜尋期間 TPU worker 的任何中斷和修復記錄。記錄檔包括:

    • 事件的日期和時間
    • 事件類型
    • 對於「終止」事件,protoPayload.metadata.terminateReason 欄位會顯示終止原因

後續步驟