调用tf.Session.run时,最小化所提取的内容对性能很重要吗?

时间:2016-12-31 18:40:37

标签: tensorflow

在Tensorflow中,fetches的{​​{1}}参数有两个目的:它确保运行某些操作,并将值返回给python。我的问题是我需要多么关注,以避免返回我真正不需要的价值观。例如,假设操作tf.Session.run取决于操作a,以便在评估ba也是如此。可以更快地完成

b

而非

a = sess.run([a])

因为后者会将a, _ = sess.run([a,b]) 的输出从GPU复制到CPU只是为了丢弃它?如果python端只需要b中的一小部分信息,那么根据a制作张量通常是一个很好的做法,它仅具有所需要的并且取而代之而不是a?或者我误解了这些GPU-CPU传输是如何工作的?我认为有可能分析在这些转移中花费了多少时间(例如,请参见此处的图表:https://github.com/tensorflow/tensorflow/issues/4526),但我还不了解该怎么做,我想知道如果我至少在正确地概念化事物,无论我的特定应用程序是否恰好在这里出现瓶颈。

1 个答案:

答案 0 :(得分:0)

相对重要,因为python包装器必须从C ++张量内存转换为python numpy数组,从而进行复制操作。如果您正在获取大变量,那么时间可能并非微不足道,请考虑每次都必须转换1GB。