首页 > 解决方案 > 如何在 Init TPU 系统上超过截止日期之前读取日志

问题描述

我正在尝试使用我自己的 .tfrecord 数据文件在 TPU 上运行带有 Python 2.7 的模型,并且我的所有代码都会编译,但是当 TPU 开始发挥它的魔力时,我不知道幕后发生了什么。

有没有办法使用 tf.debugger 或类似的东西来跟踪幕后发生的事情?

这是我收到的唯一错误消息:

tensorflow.python.framework.errors_impl.DeadlineExceededError: Deadline Exceeded on Init TPU system

谢谢!

标签: python-2.7debuggingtensorflowtfrecordgoogle-cloud-tpu

解决方案


常规调试

有几种方法可以获得有关 TPU 正在做什么的更多信息。

最直接的方法是添加tf.logging语句。如果您使用的是 TPUEstimator,您可能希望将此日志记录在您的 model_fn 中,因为这通常是核心 TPU 执行逻辑所在的位置。确保您将详细程度设置在正确的级别以捕获您正在记录的任何内容。但请注意,与在其他设备上运行时相比,日志记录对 TPU 性能的影响可能更大。

您还可以使用Cloud TPU 工具获取有关正在运行的操作以及在 TPU 上占用资源的详细信息。这些工具将为您的 TensorBoard 添加额外的选项卡。

这些工具更多的是用于性能调整而不是调试,但它们仍然可能对您在崩溃发生之前查看正在运行的操作有所帮助。

DeadlineExceededError 疑难解答

更多的日志记录或分析可能无助于您遇到的特定问题。超出期限错误可能是由连接到 TPU 的主机问题引起的。通常,当 TPU 出现错误时,将返回两条堆栈跟踪,一条来自主机,一条来自 TPU。如果您没有从 TPU 端获得任何跟踪,则主机可能永远无法连接。

作为快速故障排除步骤,您可以尝试停止并重新启动 TPU 服务器:

gcloud compute tpus stop $TPU_SERVER_NAME && gcloud compute tpus start $TPU_SERVER_NAME

这通常可以解决主机与 TPU 通信的任何问题。该命令是从非常有用的TPU 故障排除页面复制而来的。

该页面还给出了主机和 TPU 之间的连接无法首先建立的最常见原因:

如果 TensorFlow 在 TPU 执行期间遇到错误,脚本有时似乎挂起而不是退出到 shell。如果发生这种情况,请按键盘上的 CTRL+\ 以触发 SIGQUIT,这会导致 Python 立即退出。

类似地,在 TPU 执行期间按 CTRL+C 不会立即关闭 TensorFlow,而是等到当前迭代循环结束后干净退出。点击 CTRL+\ 会导致 Python 立即退出。

如果 TPU 仍在尝试完成上次运行的迭代循环,则主机将无法连接。使用建议的 CTRL+\ 可以防止将来发生这种情况。


推荐阅读