Что отслеживается в отношении tf.function

Трассировка слов часто упоминается в руководстве TensorFlow, например Лучшая производительность с tf.function

  1. Что такое трассировка, относится ли она к генерации графа в результате вызова tf.function в первый раз (и впоследствии в зависимости от аргументов)?
  2. Что происходит, когда только часть вычислений аннотируется с помощью @tf.function, будет ли это смешивать нетерпеливое выполнение с выполнением графа?

person Jake Wu    schedule 02.07.2020    source источник


Ответы (1)


  1. Да, трассировка означает запуск функции Python и запись ее операций TensorFlow в графе. Обратите внимание, что трассируемый код может не совсем соответствовать написанному коду Python, если Autograph выполнил какое-либо преобразование. В идеале трассировка выполняется только один раз, при первом вызове функции, поэтому последующие вызовы могут напрямую использовать трассируемый граф и сохранить выполнение кода Python. Однако, как вы говорите, будущие вызовы могут потребовать повторного отслеживания функции в зависимости от заданных аргументов, как объяснено в опубликованной вами ссылке.

  2. Вы можете вызвать @tf.function из функции, которая работает в нетерпеливом режиме, и в этом случае, да, она будет как бы смешивать оба режима. Но если вы вызовете неаннотированную функцию из @tf.function, то ее код также будет отслежен, то есть вы не сможете временно вернуться в нетерпеливый/Python-режим из @tf.function. Вот почему в какой-то момент было предложение, что вам нужно аннотировать только функции более высокого уровня, потому что низкоуровневые тоже будут графически отображаться - хотя не так однозначно, когда нужно или не следует аннотировать функцию, см. Должен ли я использовать @tf.function для всех функций? и это обсуждение GitHub.

РЕДАКТИРОВАТЬ: Когда я говорю, что вы не можете временно вернуться в режим ожидания/Python из @tf.function, я имею в виду, что @tf.function не может выйти из режима трассировки. Конечно, используя tf.numpy_function или tf.py_function у вас может быть трассируемая функция, использующая нетерпеливый режим/режим Python, которая будет инкапсулирована в операцию как часть трассируемого график.

person jdehesa    schedule 03.07.2020