使用 Cloud TPU Pod 管理维护事件

概览

TPU 节点和 TPU 虚拟机是挂接了 TPU 硬件的 Compute Engine 虚拟机实例。Compute Engine 虚拟机受 Compute Engine 虚拟机维护事件影响。每个 TPU 都连接到 Compute Engine 虚拟机,因此使用更多 TPU(例如在 TPU Pod 中)可提高某个虚拟机遇到维护事件的可能性。

本文档介绍了在 Cloud TPU 上处理长时间运行训练作业所需的维护事件方法。

使用检查点从维护事件中快速恢复

检查点是维护事件短时间恢复的关键,应经常保存:最好是大约每小时保存一次检查点。检查点通常不足以由于维护事件或其他训练中断而丢失大量训练进度。

检查点通常是指训练中使用的所有已保存的参数(例如模型权重)。保存检查点所需的时间介于数秒到分钟之间。

虽然大多数维护事件会自动恢复,但训练作业会继续进行,无需人工干预,但可能存在边缘情况,即作业不会重启并自动继续。发生这种情况时,您需要删除并重新创建 TPU 资源,然后从已保存的检查点重启训练作业。如需了解如何在自动恢复故障中检测和恢复,请参阅下面的检测和恢复 TPU 故障

保存和加载检查点的机制因机器学习框架而异。受支持的 Cloud TPU 模型通常内置了检查点。如需详细了解检查点,请参阅 TensorFlow 2.xPyTorchJAX/flax

检测维护事件

近期维护事件

您可以使用以下 gcloud describe 命令检测 TPU 上是否发生维护事件以及何时发生:

TPU 虚拟机

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

TPU 节点

$ gcloud compute tpus 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 上的维护事件历史日志。

在 Google Cloud 控制台导航菜单中,依次点击 Compute Engine > 虚拟机实例并进行搜索,例如:

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

在您的搜索时间范围内,系统会显示所有 TPU 工作器中断和修复事件。日志会显示事件的日期和时间、事件类型,以及“终止”事件(protoPayload.metadata.terminateReason 中)终止原因。

处理维护事件

您可以使用多种方法来减轻维护事件中断。

  1. 定期保存检查点

    理想情况下,当发生“中断事件”时,训练只会从最新的检查点恢复。

  2. 训练脚本重试

    训练脚本可能会因“中断事件”而停止。您可以使用 bash 脚本不断重试训练脚本,直到训练完成。每次重试都应从最新的检查点继续执行,因此重试脚本应始终与检查点结合使用。

    可用于生产环境的训练流水线应使用 Google Kubernetes Engine (GKE) 等资源管理系统。TPU 节点目前支持 GKE,但 TPU 虚拟机不支持。否则,您可以实现 bash 脚本以持续重试训练脚本,直到完成为止。例如:

    使用 TPU 节点:

    (从您的虚拟机)while ! python3 [training command]; do sleep 1; done

    对于 TPU 虚拟机:

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

    (请注意,您需要通过 Google Cloud shell 或终端(而不是 TPU 虚拟机)运行 TPU 虚拟机命令)。

  3. 检测 TPU 故障并从中恢复

    如果 TPU 没有从维护事件中恢复,则您可以使用恢复脚本检测 TPU 状态并删除和重新创建 TPU。您可以在此处找到此脚本的示例。如需详细了解如何手动删除和重新创建 TPU,请参阅管理 TPU

    创建或重新创建 TPU 虚拟机时,您可以使用 --metadata startup-script 参数指定启动脚本。每当创建 TPU 虚拟机时,启动脚本都会运行。如需了解详情,请参阅运行标准安装脚本