Общая отладка
Есть несколько способов получить больше информации о том, что делает TPU.
Наиболее простым является добавление tf.logging операторов. Если вы используете TPUEstimator, вы, вероятно, захотите, чтобы эта запись происходила внутри вашего model_fn, так как это обычно там, где находится основная логика TPU. Удостоверьтесь, что у вас настроен уровень детализации на правильном уровне, чтобы фиксировать все, что вы записываете. Однако обратите внимание, что регистрация может повлиять на производительность вашего TPU более значительно, чем при работе на других устройствах.
Вы также можете получить подробную информацию о том, какие операции выполняются и занимают ресурсы на 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, иногда кажется, что сценарий зависает, а не выходит из оболочки. Если это произойдет, нажмите CTRL + \ на клавиатуре, чтобы вызвать SIGQUIT, что приведет к немедленному выходу Python.
Аналогичным образом, нажатие CTRL + C во время выполнения TPU не приводит к немедленному завершению работы TensorFlow, а вместо этого ожидает до конца текущего цикла итерации, чтобы завершиться корректно. Нажатие CTRL + \ приводит к немедленному завершению работы Python.
Если TPU все еще пытается завершить цикл итерации с последнего запуска, хост не сможет подключиться. Использование предложенного сочетания клавиш CTRL + \ может предотвратить это в будущем.