以下是澄清我的意思的一个例子:
第一个session.run():
First run of a TensorFlow session
稍后session.run():
Later runs of a TensorFlow session
我知道TensorFlow正在做一些初始化,但是我想知道它在源中的位置。这发生在CPU和GPU上,但效果更加突出在GPU上。例如,在显式Conv2D操作的情况下,第一次运行在GPU流中具有更大量的Conv2D操作。事实上,如果我改变Conv2D的输入大小,它可以从几十到几百个流Conv2D操作。但是,在以后的运行中,GPU流中始终只有五个Conv2D操作(无论输入大小如何)。在CPU上运行时,与后续运行相比,我们在第一次运行中保留相同的操作列表,但我们确实看到了相同的时间差异。
TensorFlow源的哪个部分负责此行为? GPU操作"拆分在哪里?"
感谢您的帮助!
答案 0 :(得分:2)
tf.nn.conv_2d()
op需要更长时间才能在第一次tf.Session.run()
调用上运行,因为 - 默认情况下 - TensorFlow使用cuDNN的自动调谐工具来选择如何尽快运行后续卷积。您可以看到自动调谐调用here。
您可以使用undocumented environment variable来禁用自动调谐。当您启动运行TensorFlow(例如TF_CUDNN_USE_AUTOTUNE=0
解释程序)的进程时,请设置python
以禁用其使用。