一、问题抛出过程
在使用Tensorflow2-gpu版本实现 LSTM 情感分析案例时,模块的导入,数据集的下载,以及模型的搭建均无异常,
最后在训练模型时抛出异常"Fail to find the dnn implementation."。查看terminal具体报错如下:
2021-12-21 12:06:27.579335: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2021-12-21 12:06:27.579379: W tensorflow/core/framework/op_kernel.cc:1753] OP_REQUIRES failed at cudnn_rnn_ops.cc:1510 : Unknown: Fail to find the dnn implementation.
二、问题分析
第一句:Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR看起来像是cudnn版本问题。
在运行环境中输入命令 conda list 查看各依赖安装以及安装版本。
对照版本要求,没有发现异常, 排除环境问题。
nvidia-smi 查看 gpu 状态及资源消耗情况。
可以看到 5915 进程占用内存比较大, kill -9 5915 杀死进程, 然后重启一下环境。尝试再次运行代码,
依然存在相同的报错。判断异常与 gpu 内存无关。
回头再细心看一下 terminal 第一句报错:
Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
经过前面操作,我们已经排除后半句:CUDNN_STATUS_INTERNAL_ERROR 问题
现在我们来关注前半句:**Could not create cudnn handle**,无法创建句柄,要么是cudnn安装问题,
要么是创建方式不对。上面我们已经排查过安装,没有问题,那么我们接下来从创建方式入手来解决一下:
physical_devices = tf.config.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0], enable=True)
在代码 import 后面加入以上两句,意思是自动为代码分配需要的 gpu 内存。修改代码后,先杀死当前代码所使用的进程,
重启环境,然后再次运行修改后的代码。异常已经被消除,开始正常训练。
三、总结
遇到问题不要着急着按照网上的办法随便尝试,尤其是当问题涉及到环境安装时,一定要慎重。笔者注意到网上
很多的对这个问题的解决方法是重装驱动和依赖,具体效果如何不知道,但估计风险很大,弄不好整个环境都会被破
坏。学会鉴别有用信息也是一项重要的技能呀。
**如果内容对你有用,不妨点个赞再走啦~**