TensorFlow Eager Execution GPU使用报错:变量未放置在GPU上
解决TensorFlow Eager Execution中GPU使用的变量放置问题
嘿,我来帮你搞定这个GPU使用的报错问题~
问题根源
你遇到的错误是因为张量A是在默认的CPU设备上创建的,当你进入tf.device上下文执行tf.matmul时,TensorFlow尝试在GPU上处理CPU上的张量,这种跨设备的操作在Eager模式下会触发错误——毕竟Eager执行时要求张量和操作必须处于同一设备上。
修复方案
这里有两种可行的解决办法:
方案1:在GPU上下文内创建张量
把张量A的创建代码放到tf.device上下文里,让所有相关张量和操作都在GPU上执行:
import tensorflow as tf import tensorflow.contrib.eager as tfe tf.enable_eager_execution() if tf.test.is_gpu_available(): with tf.device(tf.test.gpu_device_name()): A = tf.constant([[2.0, 0.0], [0.0, 3.0]]) print(tf.matmul(A, A))
方案2:显式将张量复制到GPU
如果需要保留A在CPU上的副本,也可以显式把它复制到GPU设备后再执行操作:
import tensorflow as tf import tensorflow.contrib.eager as tfe tf.enable_eager_execution() A = tf.constant([[2.0, 0.0], [0.0, 3.0]]) if tf.test.is_gpu_available(): gpu_device = tf.test.gpu_device_name() with tf.device(gpu_device): A_gpu = tf.identity(A) # 将A复制到GPU设备 print(tf.matmul(A_gpu, A_gpu))
小提示
另外注意,tf.test.is_gpu_available()返回的是布尔值,你代码里的if tf.test.is_gpu_available() > 0可以简化成if tf.test.is_gpu_available(),这样写法更规范哦。
内容的提问来源于stack exchange,提问作者Maosi Chen
相关产品推荐
相关产品推荐

