Min*_*ark 2 gpu initialization tensorflow
当我尝试运行以下非常简单的TensorFlow代码时出现异常,尽管我从文档中虚拟地复制了它:
import tensorflow as tf
with tf.device("/gpu:0"):
x = tf.Variable(0, name="x")
sess = tf.Session()
sess.run(x.initializer) # Bombs!
Run Code Online (Sandbox Code Playgroud)
例外是:
tensorflow.python.framework.errors.InvalidArgumentError: Cannot assign a device to
node 'x': Could not satisfy explicit device specification '/device:GPU:0' because
no supported kernel for GPU devices is available.
Run Code Online (Sandbox Code Playgroud)
如果我改变变量的初始值tf.zeros([1]),一切正常:
import tensorflow as tf
with tf.device("/gpu:0"):
x = tf.Variable(tf.zeros([1]), name="x")
sess = tf.Session()
sess.run(x.initializer) # Works fine
Run Code Online (Sandbox Code Playgroud)
知道发生了什么事吗?
出现此错误是因为tf.Variable(0, ...)定义了元素类型的变量tf.int32,并且没有内核int32在标准TensorFlow分发中的GPU 上实现变量.当你使用tf.Variable(tf.zeros([1])),你定义元素类型的变量tf.float32,这是支持GPU.
tf.int32关于TensorFlow中GPU 的故事很长.虽然技术上很容易支持在GPU上运行的整数运算,但我们的经验是,大多数整数运算实际上都发生在张量的元数据上,而这些元数据存在于CPU上,因此在那里运行它更有效.作为一种短期解决方法,int32删除了GPU上的几个内核注册.但是,如果这些对您的模型有用,则可以将它们添加为自定义操作.
来源:在TensorFlow 0.10中,使用宏注册与变量相关的内核TF_CALL_GPU_NUMBER_TYPES().目前的"GPU数字类型"是tf.float16,tf.float32和tf.float64.
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |