经历了抓耳挠腮,疯狂查找的经历,今天梳理一下tensorflow利用GPU遇到各种问题!
一、找对tensorflow和cuda版本
如果安装的tensorflow和GPU版本不相符,就会报各种 .dll 文件缺失,.h 文件缺失,非常头大,找文件的过程就会浪费很长时间。所以计划安装前一定要把版本匹配对(查看已安装cuda版本,cmd输入:nvcc -V,查看电脑可安装最高cuda版本,cmd输入:nvidia-smi)!可以参考下面的博主文章:
下图是安装后的目录文件,除了cudnn开头的.dll文件其他都是有的,cudnn开头文件在下载cudnn后放进去!(我的版本是python 3.9.17+tensorflow_gpu-2.10.0+CUDA 11.2+cuDNN 8.9.2.26)
二、 cudnn文件里包含cuda缺少的部分dll和h文件,可以通过清华源下载(不需要注册):
Index of /anaconda/pkgs/main/win-64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
以cudnn-8.9.2.26-cuda11_0.tar为例,里面的文件目录有:
cudnn-8.9.2.26-cuda11_0.tar\info
cudnn-8.9.2.26-cuda11_0.tar\Library
cudnn-8.9.2.26-cuda11_0.tar\Library\bin
按图将cudnn文件复制到CUDA的版本号目录下的相应文件夹中(左:cudnn目录,右CUDA目录,CUDA目录可以通过cmd窗口输入:set cuda命令找到)
三、如果你已经安装好了,并且不打算卸载重新安装,想试试以找文件打补丁的方式(我最初也是这么想的),以下方法可以参考:
3.1 有个文件(cublasLt64_11.dll)很难找:
需要链接@我
3.2 除了cudnn里有的文件,还有一些会报错的dll文件,如cublas64_11.dll,cufft64_10.dll,cusolver64_11.dll,查看CUDA bin目录下如果有前缀一致,标号版本更高,可以copy一份改一下报错缺少的名字!如果没有,那就得全网找了!
3.3 找完全部缺少的dll,h文件后,可能会报缺少 zlibwapi.dll 文件,可以通过下面链接下载,注意有32和64位的差别,64位放c:\windows\system32
ZLIB DLL Home Page (winimage.com)
3.4 整完上面的以后,又出了一个报错,全网没找到解决方法,最后只能将CUDA10.0升级 到11.2【奔溃】(在我安装和tensorflow匹配的CUDA版本后就没有了):
2023-09-09 11:51:42.059949: E tensorflow/stream_executor/cuda/cuda_blas.cc:183] failed to set new cublas math mode: cublas error
2023-09-09 11:51:42.060049: W tensorflow/core/framework/op_kernel.cc:1780] OP_REQUIRES failed at matmul_op_impl.h:625 : INTERNAL: Failed initializing math mode