簡體   English   中英

測量在Tensorflow中將數據從RAM移動到GPU內存所需的時間

[英]Measuring time it takes to move data from RAM to GPU memory in Tensorflow

我想進行以下簡單的實驗。

我正在使用Tensorflow。 我有一個大型數組(5000x5000 float32元素)。 如何測量將此陣列從RAM移動到GPU內存實際需要多長時間?

我知道我可以創建一些非常簡單的計算圖,運行它並測量它花了多長時間。 但是有兩個問題。 首先,我擔心測量的時間將由計算所花費的時間占主導地位,而不是通過從RAM移動數據來實現GPU。 其次,如果計算不涉及我提到的大數組,Tensorflow將簡化計算圖,使得大數組不會在其中,並且它根本不會從RAM移動到GPU。

解決方案是制作一個簡單的基准測試,其中內存傳輸占主導地位。 要檢查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 op,它是實際的CPU-> GPU副本,您可以使用它來確認它在您的microbenchmark步驟運行時間中占主導地位 在此輸入圖像描述

相關問題:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM