在TensorFlow中使用DirectML调用AMD RX580显卡运行LSTM模型时遭遇CudnnRNN OpKernel未注册错误
解决AMD RX580 + TensorFlow DirectML下LSTM的CudnnRNN错误
看起来你踩了TensorFlow-DirectML搭配AMD GPU时的一个常见坑——咱们一步步拆解问题:
错误根源
你看到的InvalidArgumentError核心原因是:TensorFlow默认会优先调用NVIDIA专属的CuDNN优化LSTM实现(也就是报错里的CudnnRNN Op),但AMD RX580是通过DirectML后端运行的,完全不支持CuDNN。而你其他嵌入模型能正常跑,是因为那些模型没有用到依赖CuDNN的算子。
快速修复方案
只需要修改你的LSTM层定义,添加use_cudnn=False参数,强制TensorFlow使用通用的、兼容DirectML的LSTM实现:
# 替换你原来的LSTM层代码 model_LSTM_peso.add(LSTM( n_neurons, batch_input_shape=(n_batch,X.shape[1], X.shape[2]), stateful=True, use_cudnn=False # 关键:禁用CuDNN依赖,切换到通用实现 ))
可选的额外调整
如果修改后出现激活函数相关的警告或小问题,可以显式指定recurrent_activation='sigmoid'——因为CuDNN版LSTM默认用hard_sigmoid,而通用版默认是sigmoid,明确指定能避免潜在的不一致:
model_LSTM_peso.add(LSTM( n_neurons, batch_input_shape=(n_batch,X.shape[1], X.shape[2]), stateful=True, use_cudnn=False, recurrent_activation='sigmoid' ))
为什么其他模型没问题?
你提到嵌入模型能正常运行,这说明你的TensorFlow-DirectML环境配置完全正确——DirectML已经成功识别并调用了你的RX580显卡。只是LSTM层默认走了NVIDIA专属的优化路径,咱们把它掰回通用路径就好。
内容的提问来源于stack exchange,提问作者Rodrigo Oviedo
相关产品推荐
相关产品推荐

