【问题标题】:tf.subtract cost too long time for large arraytf.subtract 对于大型数组来说花费了太长时间
【发布时间】:2017-09-04 20:22:31
【问题描述】:

Tensorflow tf.subtract 对于大型数组来说花费的时间太长。

我的工作站配置:

CPU:至强 E5 2699 v3
内存:384 GB
显卡:NVIDIA K80
CUDA:8.5
CUDNN:5.1
TensorFlow:1.1.0,GPU 版本

以下是测试代码和结果。

  import tensorflow as tf
  import numpy as np
  import time

  W=3000
  H=4000

  in_a = tf.placeholder(tf.float32,(W,H))
  in_b = tf.placeholder(tf.float32,(W,H))

  def test_sub(number):
      sess=tf.Session()
      out = tf.subtract(in_a,in_b)

      for i in range(number):          
          a=np.random.rand(W,H)
          b=np.random.rand(W,H)
          feed_dict = {in_a:a,
                       in_b:b}
          t0=time.time()
          out_ = sess.run(out,feed_dict=feed_dict)
          t_=(time.time()-t0) * 1000
          print "index:",str(i), " total time:",str(t_)," ms"  

  test_sub(20)

结果:
索引:0 总时间:338.145017624 毫秒
索引:1 总时间:137.024879456 毫秒
索引:2 总时间:132.538080215 毫秒
索引:3 总时间:133.152961731 毫秒
索引:4 总时间:132.885932922 毫秒
索引:5 总时间:135.06102562 毫秒
索引:6 总时间:136.723041534 毫秒
索引:7 总时间:137.926101685 毫秒
索引:8 总时间:133.605003357 毫秒
索引:9 总时间:133.143901825 毫秒
索引:10 总时间:136.317968369 毫秒
索引:11 总时间:137.830018997 毫秒
索引:12 总时间:135.458946228 毫秒
索引:13 总时间:132.793903351 毫秒
索引:14 总时间:144.603967667 毫秒
索引:15 总时间:134.593963623 毫秒
索引:16 总时间:135.535001755 毫秒
索引:17 总时间:133.697032928 毫秒
索引:18 总时间:136.134147644 毫秒
索引:19 总时间:133.810043335 毫秒

测试结果表明(即tf.subtract)处理一次3000x4000的减法耗时超过130毫秒,显然太长了,尤其是在NVIDIA k80 GPU平台上。

谁能提供一些优化 tf.subtract 的方法? 提前致谢。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    您不仅要测量tf.subtract 的执行时间,还要测量将输入数据从 CPU 内存传输到 GPU 内存所需的时间:这是您的瓶颈。

    为了避免这种情况,不要使用占位符来提供数据,而是使用 tensorflow 生成数据(如果必须随机生成),或者如果必须读取它们,请使用 tensorflow 输入管道。 (创建线程在开始之前为您读取输入,然后在不退出张量流图的情况下提供图)

    在张量流图中做更多可能的操作以消除数据传输瓶颈很重要。

    【讨论】:

      【解决方案2】:

      我测量的时间包含从 CPU 内存到 GPU 内存的数据传输时间,这听起来很合理。

      既然我要读取输入数据(比如输入数据是手机生成的图片,一张一张传到tensorflow中),是不是一定要用tensorflow占位符?

      对于上面提到的情况(输入数据是手机生成的图片,一张一张传到tensorflow中),如果不是同时生成两张图片(即第二张图片在第一个),输入管道线程如何在开始之前读取输入数据(即,当张量流处理第一张图像时,不会生成第二张图像)?那么,你能给我一个简单的例子来解释 tensorflow 输入管道吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 2019-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多