[英]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步驟運行時間中占主導地位
相關問題:
對D2H和H2D進行基准測試: https : //github.com/tensorflow/tensorflow/issues/17204
64字節對齊輸入數據: https : //github.com/tensorflow/tensorflow/issues/17233
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.