InvalidArgumentError: 没有注册 OpKernel 来支持 Op 'CudnnRNN'

Jaw*_*ron 5 python gpu python-3.x tensorflow

我按照这里提供的步骤:https : //www.tensorflow.org/install/gpu 安装适用于我的 gpu 的 tensorflow,并使用 cuDNN SDK 但由于某些原因我仍然无法使用它,并且仍然得到这个错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: No OpKernel was registered to support Op 'CudnnRNN' used by node sequential/cu_dnnlstm/CudnnRNN (defined at cudrnn.py:27) with these attrs: [input_mode="linear_input", T=DT_FLOAT, direction="unidirectional", rnn_mode="lstm", seed2=0, is_training=true, seed=0, dropout=0]
Registered devices: [CPU, XLA_CPU, XLA_GPU]
Registered kernels:
  device='GPU'; T in [DT_DOUBLE]
  device='GPU'; T in [DT_FLOAT]
  device='GPU'; T in [DT_HALF]
Run Code Online (Sandbox Code Playgroud)

即使 GPU 已注册,但 tensorflow 声称他们找不到 OpKernel。

我在用:

tensoflow-GPU 1.14.0

CUDA 10.0

Ubuntu 18.04

PS:我可以使用 tensorflow 运行其他代码,通过检查 nvidia-smi 我可以看到 GPU 正在被实际使用。

任何人都可以帮我知道为什么我会遇到这个问题吗?

这是我试图运行的代码:

model = tf.keras.Sequential([
    tf.keras.layers.CuDNNLSTM(
        3,
        return_sequences=False),
    tf.keras.layers.Dense(1)
])

model.compile(
    optimizer=tf.keras.optimizers.Adam(0.1, decay=0.003), 
    loss=tf.keras.losses.mse)

model.fit(train_x, train_y, epochs=100, validation_split=0, shuffle=False)
Run Code Online (Sandbox Code Playgroud)

小智 1

您的注册设备显示XLA_GPU哪个是优化编译器,但与GPU您正在使用的张量流库期望的不同,

您可以检查几种方法来解决,