Dee*_*iac 6 python gpu tensorflow
我想进行以下简单的实验。
我正在使用 Tensorflow。我有一个大数组(5000x5000 float32 元素)。我如何测量将这个数组从 RAM 移动到 GPU 内存实际需要多长时间?
我知道我可以创建一些非常简单的计算图,运行它并测量它花费了多长时间。但这有两个问题。首先,我担心测量的时间将由计算所花费的时间决定,而不是通过从 RAM 移动数据到 GPU。其次,如果计算不涉及我提到的大数组,Tensorflow 将简化计算图,这样大数组就不会在其中,并且根本不会从 RAM 移动到 GPU。
解决方案是制定一个简单的基准测试,其中内存传输占主导地位。要检查 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 副本,您可以使用它来确认它主导您的微基准步骤运行时

相关问题:
对 D2H 和 H2D 进行基准测试:https://github.com/tensorflow/tensorflow/issues/17204
64字节对齐输入数据:https ://github.com/tensorflow/tensorflow/issues/17233
| 归档时间: |
|
| 查看次数: |
892 次 |
| 最近记录: |