この例では、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上でこれを実行したいと思い
ああ、それが理由です、ありがとうございます!私は 'dtype = tf.float16'を使うこともGPU上で使うことができることを知っています。そうすれば、行列のスペースが少なくなり、より大きな行列を作ることができます。 – user1506145
これは間違いありません - 一部のGPUでは 'tf.float16'(GTX 1080についてはわかりません)を使って行列乗算を2倍高速にする必要があります。 – mrry