python-2.7 - 如何在 Init TPU 系统上超过截止日期之前读取日志
问题描述
我正在尝试使用我自己的 .tfrecord 数据文件在 TPU 上运行带有 Python 2.7 的模型,并且我的所有代码都会编译,但是当 TPU 开始发挥它的魔力时,我不知道幕后发生了什么。
有没有办法使用 tf.debugger 或类似的东西来跟踪幕后发生的事情?
这是我收到的唯一错误消息:
tensorflow.python.framework.errors_impl.DeadlineExceededError: Deadline Exceeded on Init TPU system
谢谢!
解决方案
常规调试
有几种方法可以获得有关 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+\ 可以防止将来发生这种情况。
推荐阅读
- sql - 如何在对角线上对表进行 SQL 求和?
- c++ - 在 Visual Studio Code 中包含自定义 C++ 库的问题
- visual-studio-2017 - VB6通过Visual Studio Attached Process VS2017及以上调试
- ios - 带有波浪线(波浪)顶部的 CustomView。(Swift)
- android - 我们正在尝试调用 api,我们得到了所有响应,但它们没有显示在文本视图上
- javascript - 为什么返回按钮不会触发 Next.js 应用程序中的客户端导航?
- c# - Azure 移动服务中的日期时间同步问题
- python - Django:将外键上的两个表连接到第三个表?
- delphi - 我可以在不重新编译的情况下从 IDE 内部运行 Delphi EXE 吗?
- forms - 关于洋红色 1.9。- “无效的表单密钥。请刷新页面“