根据前一篇博文解决了tensorflow-gpu安装时候的DLL load failed错误,本以为安装好GPU版本的tensorflow就可以愉快的玩耍了,结果发现,并不是每一个NVIDIA显卡都适合安装GPU版本的tensorflow。
因为安装了GPU版本的tensorflow,所以跑实验时候都会默认使用GPU加速运算,然而安装成功之后我发现,当直接用tensorflow框架时候,运行正常,而当使用keras时候,不论数据集batch size调到多小,或者只是运行mnist的分类实验,总是出现如下错误,然后finished。
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:359] could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:366] error retrieving driver version: Unimplemented: kernel reported driver version not implemented on Windows
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:326] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
F c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\kernels\conv_ops.cc:659] Check failed: stream->parent()->GetConvolveAlgorithms(&algorithmsProcess finished with exit code -1073740791 (0xC0000409)
一般这种结束方式我们会感觉是内存不足的原因,但是我试着调小batch size为1仍然不行,应该也不是cuDNN没有安装好,因为直接用tensorflwo框架的代码就不会报错。所以经过网络多方搜索无果后,我突然意识到,会不会是这个显卡内存太小,当使用keras框架再调用tensorflow后台时候,导致内存不足?或者说keras不支持这个型号的显卡?
基于这样的猜想,我uninstall了tensorflow-gpu,然后重新安装了CPU版本的tensorflow(之前环境依赖DLL报错的问题已经不存在了),果然,所有的代码正常运行!而且同一个代码使用分别使用我安装的GPU和CPU版本tensorflow,CPU版本的运行时间居然比GPU的还快(一个批次GPU=0.047s,CPU=0.031s)。
所以,笔记本上虽然有显卡,我们在考虑安装GPU or CPU 版本的tensorflow时候,还是量力而为,并不是所有显卡都是GPU 快于CPU的。