2016-08-29 16 views
0

この例では、GPUを使用して複数の2つのtf.int32行列を試しています。TensorflowはGPUで整数行列乗算を実行できません

import tensorflow as tf 
matrix1 = tf.constant([[3,3]]) 
matrix2 = tf.constant([[2],[2]]) 

with tf.device("/gpu:0"): 
    product = tf.matmul(matrix1,matrix2) 

with tf.Session() as sess: 
    result = sess.run(product) 
    print(result) 

私が出力を得るhttps://www.tensorflow.org/versions/r0.10/get_started/basic_usage.html

で見つかった例のようになります。

... 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 0 with properties: 
name: GeForce GTX 1080 
major: 6 minor: 1 memoryClockRate (GHz) 1.7715 
pciBusID 0000:03:00.0 
Total memory: 7.92GiB 
Free memory: 213.62MiB 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0: Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:839] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:03:00.0) 
E tensorflow/core/client/tensor_c_api.cc:485] Cannot assign a device to node 'MatMul': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available. 
    [[Node: MatMul = MatMul[T=DT_INT32, transpose_a=false, transpose_b=false, _device="/device:GPU:0"](Const, Const_1)]] 

私はGPU上で行列の乗算を行うことができないのはなぜ? ..私はallow_soft_placement = Trueを使用してこの問題を解決することができますが、私は、GPU上でこれを実行したいと思い

答えて

2

整数乗算は、現在TensorFlowにGPUのために実装されていない、とあなたの行列matrix1matrix2はタイプtf.int32を持っています。 (これはthis answerで説明様々な理由のために、TensorFlowは、GPUデバイス上tf.int32用オペアンプ登録が含まれていない、実装が容易であることが判明したが。)

をあなたが実際に(はるかに大きい)を乗じに興味があると仮定すると、浮動

import tensorflow as tf 
matrix1 = tf.constant([[3., 3.]]) 
matrix2 = tf.constant([[2.], [2.]]) 

with tf.device("/gpu:0"): 
    product = tf.matmul(matrix1,matrix2) 

with tf.Session() as sess: 
    result = sess.run(product) 
    print(result) 

...あなたのプログラムを変更することができ、乗算はあなたのGPU上で実行されます。

+0

ああ、それが理由です、ありがとうございます!私は 'dtype = tf.float16'を使うこともGPU上で使うことができることを知っています。そうすれば、行列のスペースが少なくなり、より大きな行列を作ることができます。 – user1506145

+2

これは間違いありません - 一部のGPUでは 'tf.float16'(GTX 1080についてはわかりません)を使って行列乗算を2倍高速にする必要があります。 – mrry