2017-01-23 12 views
2

多くの機械学習アルゴリズムは、行列乗算(または少なくとも行列乗算を使用して実装できます)を使用してGPUをテストするので、行列a、bを作成して乗算し、計算が完了するために。ここでテンソルフロー行列乗算によるGPUのテスト

は寸法300000,20000の二つの行列を生成し、それらを乗算するコードです:

import tensorflow as tf 
import numpy as np 

init = tf.global_variables_initializer() 
sess = tf.Session() 
sess.run(init) 


#a = np.array([[1, 2, 3], [4, 5, 6]]) 
#b = np.array([1, 2, 3]) 

a = np.random.rand(300000,20000) 
b = np.random.rand(300000,20000) 

println("Init complete"); 

result = tf.mul(a , b) 
v = sess.run(result) 

print(v) 

が、これはGPUの性能を比較するために十分なテストですか?他にどんな要素を考慮する必要がありますか?

答えて

7

一般的な落とし穴を避け、Titan X Pascalの正式な11 TFLOPマークにマッチしたmatmulベンチマークのexampleです。

import os 
import sys 
os.environ["CUDA_VISIBLE_DEVICES"]="1" 
import tensorflow as tf 
import time 

n = 8192 
dtype = tf.float32 
with tf.device("/gpu:0"): 
    matrix1 = tf.Variable(tf.ones((n, n), dtype=dtype)) 
    matrix2 = tf.Variable(tf.ones((n, n), dtype=dtype)) 
    product = tf.matmul(matrix1, matrix2) 


# avoid optimizing away redundant nodes 
config = tf.ConfigProto(graph_options=tf.GraphOptions(optimizer_options=tf.OptimizerOptions(opt_level=tf.OptimizerOptions.L0))) 
sess = tf.Session(config=config) 

sess.run(tf.global_variables_initializer()) 
iters = 10 

# pre-warming 
sess.run(product.op) 

start = time.time() 
for i in range(iters): 
    sess.run(product.op) 
end = time.time() 
ops = n**3 + (n-1)*n**2 # n^2*(n-1) additions, n^3 multiplications 
elapsed = (end - start) 
rate = iters*ops/elapsed/10**9 
print('\n %d x %d matmul took: %.2f sec, %.2f G ops/sec' % (n, n, 
                  elapsed/iters, 
                  rate,)) 
+0

クールで、コードをオフサイトで参照するだけでなく、回答内にコードを投稿する必要があります。 –

+0

'os.environ [" CUDA_VISIBLE_DEVICES "] =" 1 "'がコメントアウトされていないと、GPUが検出されませんでした。 Windows 10、tensorflow-gpu(1.4)、cuda_8.0.61_win10、cudnn-8.0-windows10-x64-v6.0で動作します。 – BSalita

+0

「Variable_1」操作にデバイスを割り当てることができませんでした:操作は/ device:GPU:0に明示的に割り当てられましたが、利用可能なデバイスは[/ job:localhost/replica:0/task:0/device:CPU:0]です。デバイス仕様が有効なデバイスを参照していることを確認してください。 ' – BSalita