2016-11-22 26 views
2

私はGPUの計算を初めて実験しており、大きなスピードアップを望んでいました。GPUのTensorflowマットム計算はCPUより遅い

cpu:0では、10回の実行のそれぞれで平均2秒、gpu:0は2.7秒、gpu:1はCPUより50%悪い: 0で3秒。ここで

はコードです:

import tensorflow as tf 
import numpy as np 
import time 
import random 

for _ in range(10): 
    with tf.Session() as sess: 
     start = time.time() 
     with tf.device('/gpu:0'): # swap for 'cpu:0' or whatever 
      a = tf.constant([random.random() for _ in xrange(1000 *1000)], shape=[1000, 1000], name='a') 
      b = tf.constant([random.random() for _ in xrange(1000 *1000)], shape=[1000, 1000], name='b') 
      c = tf.matmul(a, b) 
      d = tf.matmul(a, c) 
      e = tf.matmul(a, d) 
      f = tf.matmul(a, e) 
      for _ in range(1000): 
       sess.run(f) 
     end = time.time() 
     print(end - start) 

私はここで何を観察するのですか?実行時間は、主にRAMとGPU間でデータをコピーすることによって支配されるのでしょうか?

+0

行列を増やして、 'nvidia-smi'と' top'のCPU使用量のgpu使用法を見てください。 – sygi

+0

@sygi感謝して、私は 'nvidia-smi'について知りませんでした。これは、GPU-Utilが2%を超えないことを示しています。 pythonはメモリの大半を占めるようです。電力使用量は40W/180Wでかなり安定しています – stefan

+1

だから、あなたが書いたコードはgpu-boundではないようです。 'a'と' b'を 'tf.random_uniform([1000、1000])'に変更できますか? メモリに関する限り、TFはデフォルトですべてのGPUメモリを使用しますが、動的割り当てを強制するオプションがあります。 – sygi

答えて

3

データを生成するために使用する方法は、CPU(random.random()はTF-1ではなく通常のPython関数)で実行されます。また、10^6回実行すると、1回の実行で乱数10^6を要求するよりも遅くなります。データを並列にGPU上で生成され、何時間がGPUにRAMからそれを転送するために無駄にしないであろうように

a = tf.random_uniform([1000, 1000], name='a') 
b = tf.random_uniform([1000, 1000], name='b') 

:にコードを変更し 。

関連する問題