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

Dee*_*iac 6 python gpu tensorflow

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

我正在使用 Tensorflow。我有一个大数组(5000x5000 float32 元素)。我如何测量将这个数组从 RAM 移动到 GPU 内存实际需要多长时间?

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

Yar*_*tov 4

解决方案是制定一个简单的基准测试,其中内存传输占主导地位。要检查 TensorFlow 是否不会优化您的传输,您可以对结果添加一个微小的操作。像填充这样的微小操作的开销应该是几微秒,与将 100MB 加载到 GPU 相比(> 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})
Run Code Online (Sandbox Code Playgroud)

要运行此基准测试,您可以这样做

wget https://github.com/diux-dev/cluster/blob/master/yuxin_numpy/tf_numpy_benchmark.py
python tf_numpy_benchmark.py --benchmark=feed_gpu_tensor
Run Code Online (Sandbox Code Playgroud)

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

另外,作为健全性检查,您可以查看时间表。时间线将具有 MEMCPYH2D 操作,它是实际的 CPU->GPU 副本,您可以使用它来确认它主导您的微基准步骤运行时 在此输入图像描述

相关问题: