当@tf.功能decorator将函数编译成图形?为什么它在急切模式下比那个快?

2024-10-04 11:34:08 发布

您现在位置:Python中文网/ 问答频道 /正文

根据TensorFlowdocument@tf.function将函数编译成图形,并“使您获得更快的执行、在GPU或TPU上运行或导出到SavedModel的好处。”

文档中的示例说明了这样一个好处:

lstm_cell = tf.keras.layers.LSTMCell(10)

@tf.function
def lstm_fn(input, state):
  return lstm_cell(input, state)

input = tf.zeros([10, 10])
state = [tf.zeros([10, 10])] * 2
# warm up
lstm_cell(input, state); lstm_fn(input, state)
print("eager lstm:", timeit.timeit(lambda: lstm_cell(input, state), number=10))
print("function lstm:", timeit.timeit(lambda: lstm_fn(input, state), number=10))

输出:

^{pr2}$

“编译图”和“急切模式下的函数”有什么区别?为什么前者执行起来更快?在


Tags: lambda函数numberinputtfzeroscellfunction
2条回答

在构建图时立即计算TF,默认情况下使用。另一方面,图形具有一定的advantages。但是,执行时间将取决于特定的代码。使用c++后端的代码越多,差异就越小。所有的开销都来自使用python解释器的eager模式下的程序。例如,基本的矩阵乘法运算不会得到比更复杂的DNN应用程序更多的好处。在

在图形模式下,TysFooFor构建一个表示您的模型的计算图,并通过会话将其转发到C++运行时。这提供了分布式训练的好处,并在过程中优化了计算图(通过不断的折叠等)。它还简化了部署到独立于平台的服务器的过程。在

在@tf.功能decorator允许用户在eager模式下获得图形执行的好处,但是要注意一些注意事项(例如,tf.功能首选TF ops而不是Python原语)。在

来源:https://www.tensorflow.org/guide/eagerhttps://www.tensorflow.org/alpha/tutorials/eager/tf_function

相关问题 更多 >