使用 Cloud TPU Pod 管理维护事件

概览

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 上是否发生了维护事件以及发生的时间:

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

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

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

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

处理维护事件

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

  1. 定期保存检查点

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

  2. 训练脚本重试

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

    生产环境级训练流水线应使用 Google Kubernetes Engine (GKE) 等资源管理系统。如需详细了解如何将 Google Kubernetes Engine 与 TPU 虚拟机搭配使用,请参阅部署 TPU 工作负载。您可以实现 bash 脚本以持续重试训练脚本,直到完成为止。例如:

    while ! gcloud compute tpus tpu-vm ssh ${TPU_NAME} --command "python3 [training command]"; do sleep 1; done
    
  3. 检测 TPU 故障并从中恢复

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

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