Arm*_*nez 7 cublas tensorflow cudnn tensorflow-gpu tensorflow-xla
下面是一个示例来阐明我的意思:
First session.run():
TensorFlow会话的首次运行
稍后session.run():
稍后运行TensorFlow会话
我了解TensorFlow在这里进行一些初始化,但是我想知道这在源代码中体现了什么。这在CPU和GPU上都发生,但是在GPU上的影响更为明显。例如,在显式Conv2D操作的情况下,第一次运行在GPU流中具有大量Conv2D操作。实际上,如果我更改Conv2D的输入大小,则它可以从数十个流转换为Conv2D操作。但是,在以后的运行中,GPU流中始终只有五个Conv2D操作(与输入大小无关)。在CPU上运行时,与以后的运行相比,我们在第一次运行中保留了相同的操作列表,但是确实看到了相同的时间差异。
TensorFlow源的哪一部分负责此行为?GPU操作在哪里“分裂”?
谢谢您的帮助!
由于在默认情况下,TensorFlow使用cuDNN的自动调整功能来选择如何尽快运行后续卷积,因此该tf.nn.conv_2d()操作在第一次tf.Session.run()调用时需要花费更长的时间。您可以在此处看到自动调谐调用。
有一个未记录的环境变量,可用于禁用自动调整。设置TF_CUDNN_USE_AUTOTUNE=0当你开始运行TensorFlow(例如过程python解释器)来禁用它的使用。
| 归档时间: |
|
| 查看次数: |
2347 次 |
| 最近记录: |