我正在尝试使用我自己的.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 tools获取有关正在运行的操作的详细信息以及在TPU上占用资源。这些工具将为您的TensorBoard添加额外的标签。
这些工具更适用于性能调优而不是调试,但它们在发生崩溃之前看到正在运行的操作仍然有些用处。
对DeadlineExceededError进行故障排除
更多日志记录或分析可能无法帮助您遇到的具体问题。连接到TPU的主机出现问题可能导致超出错误的最后期限。通常,当TPU出现错误时,将返回两个堆栈跟踪,一个来自主机,另一个来自TPU。如果您没有从TPU端获得任何跟踪,则主机可能从未能够连接。
作为快速故障排除步骤,您可以尝试停止并重新启动TPU服务器:
gcloud compute tpus stop $TPU_SERVER_NAME && gcloud compute tpus start $TPU_SERVER_NAME
这通常可以解决主机与TPU通信的任何问题。该命令是从非常有用的TPU troubleshooting page复制的。
该页面还提供了最常见的原因,即首先无法建立主机和TPU之间的连接:
如果TensorFlow在TPU执行期间遇到错误,则脚本有时似乎挂起而不是退出到shell。如果发生这种情况,请按键盘上的CTRL + \以触发SIGQUIT,这会导致Python立即退出。
类似地,在TPU执行期间按CTRL + C不会立即关闭TensorFlow,而是等待直到当前迭代循环结束才能完全退出。按CTRL + \会导致Python立即退出。
如果TPU仍在尝试完成上次运行的迭代循环,则主机将无法连接。使用建议的CTRL + \可以防止将来出现这种情况。