在编译TensorFlow时遇到"不允许为__shared__变量使用初始化器"的错误通常是因为在GPU上使用了不支持的特性。为了解决这个问题,可以尝试以下方法:
确保你的TensorFlow版本与CUDA和cuDNN版本兼容。首先检查CUDA和cuDNN的版本,然后根据它们的版本选择与之兼容的TensorFlow版本。
如果你使用的是自定义的CUDA kernel,检查是否在GPU代码中使用了__shared__
关键字。__shared__
变量是在共享内存中分配的变量,它们不能使用初始化器。如果确实存在这样的变量,尝试移除或修改初始化器。
如果你使用的是TensorFlow的官方版本,尝试更新TensorFlow到最新版本。新版本的TensorFlow通常修复了一些已知的问题和错误。
以下是一个示例代码,展示了在TensorFlow中定义一个__shared__
变量的错误示例:
import tensorflow as tf
def my_model():
with tf.device('/gpu:0'):
shared_var = tf.Variable(tf.zeros([10]), name='shared_var', trainable=False) # 这里出现了错误
# 其他模型定义的代码
my_model()
为了解决这个问题,你可以尝试将__shared__
变量移至CPU上,或者移除初始化器:
import tensorflow as tf
def my_model():
with tf.device('/cpu:0'): # 将__shared__变量移至CPU上
shared_var = tf.Variable(tf.zeros([10]), name='shared_var', trainable=False)
# 其他模型定义的代码
my_model()
如果以上方法仍然无法解决问题,你可能需要进一步检查CUDA和cuDNN的版本兼容性,并尝试使用更早或更晚的TensorFlow版本。
上一篇:编译TensorFlow 1.15 GPU源码失败。
下一篇:编译TensorFlow时出现“nvcc error: 'cicc'在构建TensorFlow时发生错误,状态为0xC0000005(访问冲突)”的问题。