测量在Tensorflow中将数据从RAM移动到GPU内存所需的时间

时间:2018-04-04 15:40:51

标签: python tensorflow gpu

我想进行以下简单的实验。

我正在使用Tensorflow。我有一个大型数组(5000x5000 float32元素)。如何测量将此阵列从RAM移动到GPU内存所需的实际时间?

我知道我可以创建一些非常简单的计算图,运行它并测量它花了多长时间。但是有两个问题。首先,我担心测量的时间将由计算所花费的时间占主导地位,而不是通过从RAM移动数据来实现GPU。其次,如果计算不涉及我提到的大数组,Tensorflow将简化计算图,使得大数组不会在其中,并且它根本不会从RAM移动到GPU。

1 个答案:

答案 0 :(得分:2)

解决方案是制作一个简单的基准测试,其中存储器的传输占主导地位。要检查TensorFlow是否不优化转移,可以在结果上添加一个小操作。填充等微小操作的开销应该是几微秒,与向GPU加载100MB(> 5毫秒)相比,这是微不足道的。

def feed_gpu_tensor():
  params0 = create_array()
  with tf.device('/gpu:0'):
    params = tf.placeholder(tf.float32)
    result = tf.concat([params, tf.fill([1],1.0)], axis=0)
  for i in range(args.num_iters):
    with timeit('feed_gpu_tensor'):
      sess.run(result.op, feed_dict = {params: params0})

要运行此基准测试,您可以执行此操作

wget https://github.com/diux-dev/cluster/blob/master/yuxin_numpy/tf_numpy_benchmark.py
python tf_numpy_benchmark.py --benchmark=feed_gpu_tensor

我发现在p3.16xlarge上,使用tcmalloc(通过LD_PRELOAD),此副本(100MB)将花费8毫秒。

此外,作为完整性检查,您可以查看时间表。时间线将有MEMCPYH2D操作,这是实际的CPU-> GPU拷贝,您可以使用它来确认它支配您的微基准步骤运行时 enter image description here

相关问题: