我正在Tensorflow上进行一些卷积计算,并且在使用Double Precision数字时遇到了一些奇怪的错误。
由于精度问题,我需要在float64中计算那些张量。
conv3d在float32上可以很好地工作,但是在Double precision上,它只能在CPU上使用,而对于GPU,错误提示
InvalidArgumentError (see above for traceback): Cannot assign a device for operation 'Conv3D': Could not satisfy explicit device specification '/device:GPU:0' because no supported kernel for GPU devices is available.
Registered kernels:
device='CPU'; T in [DT_HALF]
device='CPU'; T in [DT_FLOAT]
device='CPU'; T in [DT_DOUBLE]
device='GPU'; T in [DT_HALF]
device='GPU'; T in [DT_FLOAT]
[[Node: Conv3D = Conv3D[T=DT_DOUBLE, data_format="NDHWC", dilations=[1, 1, 1, 1, 1], padding="SAME", strides=[1, 1, 1, 1, 1], _device="/device:GPU:0"](Const, Const_1)]]
下面是我的测试代码。
import tensorflow as tf
import numpy as np
with tf.device('/device:GPU:0'):
a = tf.constant(2 * np.ones([1, 200, 200, 200, 9], dtype=np.float64), dtype=tf.float64)
b = tf.constant(np.ones([3, 3, 3, 9, 9], dtype=np.float64), dtype=tf.float64)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
c = tf.nn.conv3d(a, b, strides=[1, 1, 1, 1, 1], padding='SAME')
print(a)
print(b)
print(c)
for i in range(1000):
print(sess.run(c))
有什么方法可以将gpu用于这些操作吗?
答案 0 :(得分:0)
对GPU的双精度支持取决于硬件。快速搜索品牌和型号以及“支持双精度”将为您解答GPU是否可以支持双精度数学。
快速搜索我的GPU(gtx 1060)及其对双精度的支持导致出现以下链接: https://devtalk.nvidia.com/default/topic/995849/does-the-gtx1060-support-double-precision-/
对于gtx 1060,双精度数学的吞吐量是单精度数学的1/32。因此,即使您的GPU支持它,性能仍然无法满足您的期望。