gpt4 book ai didi

initialization - 为什么设置初始化值会阻止在 TensorFlow 中将变量放置在 GPU 上?

转载 作者:行者123 更新时间:2023-12-01 22:07:20 25 4
gpt4 key购买 nike

当我尝试运行以下非常简单的 TensorFlow 代码时,我遇到了异常,尽管我实际上是从文档中复制了它:

import tensorflow as tf

with tf.device("/gpu:0"):
x = tf.Variable(0, name="x")

sess = tf.Session()
sess.run(x.initializer) # Bombs!

异常(exception)情况是:

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.

如果我将变量的初始值更改为 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

知道发生了什么吗?

最佳答案

出现此错误的原因是 tf.Variable(0, ...) 定义了元素类型 tf.int32 的变量,并且没有实现 的内核标准 TensorFlow 发行版中 GPU 上的 >int32 变量。当您使用tf.Variable(tf.zeros([1]))时,您正在定义一个元素类型tf.float32的变量, GPU 支持。

TensorFlow 中 GPU 上的 tf.int32 的故事很长。虽然支持在 GPU 上运行的整数运算在技术上很容易,但我们的经验是,大多数整数运算实际上发生在张量的元数据上,并且此元数据存在于 CPU 上,因此更有效在那里对其进行操作。作为短期解决方法,删除了 GPU 上 int32 的多个内核注册。但是,如果这些对您的模型有用,则可以 add them as custom ops .


来源:在 TensorFlow 0.10 中,与变量相关的内核为 registered使用TF_CALL_GPU_NUMBER_TYPES()宏。当前的“GPU 编号类型”为 tf.float16tf.float32tf.float64

关于initialization - 为什么设置初始化值会阻止在 TensorFlow 中将变量放置在 GPU 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39133312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com