使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

使用 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

处理维护事件

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

  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 虚拟机时,启动脚本都会运行。如需了解详情,请参阅运行标准安装脚本