关于 tf.function 的跟踪是什么
What is tracing with regard to tf.function
在 TensorFlow 的指南中经常提到“跟踪”这个词 Better performance with tf.function
- 究竟什么是“追踪”,是否指生成图形作为结果
第一次调用 tf.function (随后
取决于参数)?
- 当只有部分计算被注释时会发生什么
@tf.function
,它会混合 eager execution 和 graph execution 吗?
是的,“追踪”意味着 运行 一个 Python 函数并在图表中“记录”它的 TensorFlow 操作。请注意,如果 Autograph 进行了一些转换,跟踪代码可能与书面 Python 代码不完全对应。 Tracing 理想情况下只做一次,第一次调用函数,所以后续调用可以直接使用 traced graph 并节省 Python 代码执行。不过,正如您所说,未来的调用可能需要根据给定的参数回溯函数,如您发布的 link 中所述。
您可以从在急切模式下工作的函数调用 @tf.function
,在这种情况下,是的,它会“混合”两种模式。但是如果你从 @tf.function
中调用一个未注释的函数,那么它的代码也会被跟踪——也就是说,你不能暂时从 @tf.function
中返回到 eager/Python 模式。这就是为什么在某些时候,有人建议您只需要注释更高级别的功能,因为无论如何低级别的功能也会被“图形化”——尽管在什么时候应该或什么时候不是很明确不应注释函数,请参阅 Should I use @tf.function for all functions? and this GitHub discussion.
编辑:当我说“你不能暂时从 @tf.function
返回到 eager/Python 模式”时,我的意思是 @tf.function
不能退出“跟踪”模式。当然,使用tf.numpy_function
or tf.py_function
你可以有一个使用eager/Python模式的跟踪函数,它会被封装在一个操作中作为跟踪图的一部分。
在 TensorFlow 的指南中经常提到“跟踪”这个词 Better performance with tf.function
- 究竟什么是“追踪”,是否指生成图形作为结果 第一次调用 tf.function (随后 取决于参数)?
- 当只有部分计算被注释时会发生什么
@tf.function
,它会混合 eager execution 和 graph execution 吗?
是的,“追踪”意味着 运行 一个 Python 函数并在图表中“记录”它的 TensorFlow 操作。请注意,如果 Autograph 进行了一些转换,跟踪代码可能与书面 Python 代码不完全对应。 Tracing 理想情况下只做一次,第一次调用函数,所以后续调用可以直接使用 traced graph 并节省 Python 代码执行。不过,正如您所说,未来的调用可能需要根据给定的参数回溯函数,如您发布的 link 中所述。
您可以从在急切模式下工作的函数调用
@tf.function
,在这种情况下,是的,它会“混合”两种模式。但是如果你从@tf.function
中调用一个未注释的函数,那么它的代码也会被跟踪——也就是说,你不能暂时从@tf.function
中返回到 eager/Python 模式。这就是为什么在某些时候,有人建议您只需要注释更高级别的功能,因为无论如何低级别的功能也会被“图形化”——尽管在什么时候应该或什么时候不是很明确不应注释函数,请参阅 Should I use @tf.function for all functions? and this GitHub discussion.
编辑:当我说“你不能暂时从 @tf.function
返回到 eager/Python 模式”时,我的意思是 @tf.function
不能退出“跟踪”模式。当然,使用tf.numpy_function
or tf.py_function
你可以有一个使用eager/Python模式的跟踪函数,它会被封装在一个操作中作为跟踪图的一部分。