完美解决Windows10安装和运行TensorFlow编译环境时出现“cudart64_100.dll、cublas64_10.dll、cudnn64_7.dll...”报错的问题

一、NVIVDIA驱动要求说明

安装或者运行TensorFlow时出现如下情况说明缺少相关驱动和依赖dll
解决办法:要么检查一下NVIVDIA驱动是否符合你当前的需求(不推荐直接更新,因为更新直接是最新的11.0版本);要么重新安装驱动;
但是要安装TensorFlow请下载安装NVIDIA 10.0版本(推荐)
下载链接点这里

或点击这里:https://developer.nvidia.com/zh-cn/cuda-toolkit
在这里插入图片描述

2020-07-21 08:58:42.494717: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-07-21 08:58:42.512216: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cublas64_10.dll'; dlerror: cublas64_10.dll not found
2020-07-21 08:58:42.516662: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cufft64_10.dll'; dlerror: cufft64_10.dll not found
2020-07-21 08:58:42.520033: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'curand64_10.dll'; dlerror: curand64_10.dll not found
2020-07-21 08:58:42.524041: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusolver64_10.dll'; dlerror: cusolver64_10.dll not found
2020-07-21 08:58:42.528116: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusparse64_10.dll'; dlerror: cusparse64_10.dll not found
2020-07-21 08:58:42.531599: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudnn64_7.dll'; dlerror: cudnn64_7.dll not found
2020-07-21 08:58:42.494717: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2020-07-21 08:58:42.512216: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cublas64_10.dll'; dlerror: cublas64_10.dll not found
2020-07-21 08:58:42.516662: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cufft64_10.dll'; dlerror: cufft64_10.dll not found
2020-07-21 08:58:42.520033: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'curand64_10.dll'; dlerror: curand64_10.dll not found
2020-07-21 08:58:42.524041: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusolver64_10.dll'; dlerror: cusolver64_10.dll not found
2020-07-21 08:58:42.528116: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cusparse64_10.dll'; dlerror: cusparse64_10.dll not found
2020-07-21 08:58:42.531599: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudnn64_7.dll'; dlerror: cudnn64_7.dll not found

二、领取依赖配置文件与报错问题分析

需要cudart64_100.dll依赖文件请关注我的公众号:kangsinx
AI科技与算法编程
在这里插入图片描述
进入公众号之后可在菜单右下角扫码加我微信领取以上配置文件!

1. 错误类型原因

问题是找不到cuda系的dll文件的模块,提示需要下载CUDA10.0,那么首先查看cuda的路径下是否存在该文件:
通过C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA路径访问cuda,在其bin目录下查找是否有cudart64_100.dll模块
如果有,则查看环境变量是否添加;如果没有,可能就是cuda版本和tensorflow版本的匹配问题

2. 搞清自己的tensorflow及CUDA版本

进入命令行环境下,首先通过python --version确定自己的python版本是3.6
再通过pip list查看已经安装好的tensorflow版本,笔者本人的版本是1.14
通过nvcc --version查看cuda版本,笔者之前的cuda版本是V9.0.176;

通过Tesnsorflow官网查找对应版本信息如下:
对应版本信息

可以看到当Tensorflow的版本>=1.13时,CUDA的版本需要是10.0,同时cudnn版本号需要大于7.4.1
这里笔者选用了将cuda的版本卸载,以适用tensorflow版本
直接进入C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA路径下将文件夹删除,并且将环境变量删除。
找到了一个高中生搭的服务器下载链接,这里的下载速度会快一些:
tensorflow相关下载链接

3. 匹配对应的cudnn对应cuda版本

将cuda版本安装后,再次打开jupyter运行import tensorflow,发现并没有成功,出现了找不到'cudnn64_7.dll'的错误:

ImportError: Could not find 'cudnn64_7.dll'

此提示表示缺少cudnn模块的dll文件,根据tensorflow文档,对应tensorflow1.13版本以上,cudnn需要是>7.4.1的版本,下载cudnn版本,cudnn的目录结构如下:
在这里插入图片描述

将cudnn目录下的文件对应放在cuda目录下即可

4. 匹配对应tf版本

此时应该是没问题了吧,笔者继续运行import tensorflow, MMP, 并没有顺利运行,出现了提示'descriptor'的错误:

 ImportError: cannot import name 'descriptor'

stackflow上的tf安装问题汇总

通过stackflow上查找,发现该错误出现的原因是因为protobuf和tf的版本不对应,因为tf和pro之间存在依赖关系,于是笔者首先uninstall pro, 接着uninstall tf,最后重新install tf ,tf会自动对依赖项pro进行安装。
中间出现了一点小插曲,笔者是用virtualenv的py虚拟环境,于是安装好了版本后,依然会出现'descriptor'的错误,于是自己在原生py环境中测试了下,发现可以导入tf。那么原因就是可能因为系统找不到py虚拟环境中的sitepackage,将虚拟环境的py-bin下的目录设置为环境变量,即可正常调用。
最后结果导入成功:
在这里插入图片描述

三、测试结果

我采用的方法是直接在文件目录下:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin操作:增添或删减
在这里插入图片描述
测试代码:引用来自本博客:完美解决tensorflow 2.1.0 下执行sess =Session ()出错的情况

在这里插入图片描述
执行代码出现报错:
在这里插入图片描述
解决方法,将下载好的cudart64_100.dll文件放置在C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin,如图:
在这里插入图片描述
再次执行结果:测试成功

在这里插入图片描述

已标记关键词 清除标记
运行tensorflow出现tensorflow.python.framework.errors_impl.InternalError: Blas GEMM launch failed这个错误,查了一下说是gpu被占用了,从下面这里开始出问题的: ``` 2019-10-17 09:28:49.495166: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1304] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6382 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1) (60000, 28, 28) (60000, 10) 2019-10-17 09:28:51.275415: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cublas64_100.dll'; dlerror: cublas64_100.dll not found ``` ![图片说明](https://img-ask.csdn.net/upload/201910/17/1571277238_292620.png) 最后显示的问题: ![图片说明](https://img-ask.csdn.net/upload/201910/17/1571277311_655722.png) 试了一下网上的方法,比如加代码: ``` gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333) sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) ``` 但最后提示: ![图片说明](https://img-ask.csdn.net/upload/201910/17/1571277460_72752.png) 现在不知道要怎么解决了。新手想试下简单的数字识别,步骤也是按教程一步步来的,可能用的版本和教程不一样,我用的是刚下的:2.0tensorflow和以下: ![图片说明](https://img-ask.csdn.net/upload/201910/17/1571277627_439100.png) 不知道会不会有版本问题,现在紧急求助各位大佬,还有没有其它可以尝试的方法。测试程序加法运算可以执行,数字识别图片运行候我看了下,GPU最大占有率才0.2%,下面是完整数字图片识别代码: ``` import os import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers, optimizers, datasets os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' #gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.2) #sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333) sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) (x, y), (x_val, y_val) = datasets.mnist.load_data() x = tf.convert_to_tensor(x, dtype=tf.float32) / 255. y = tf.convert_to_tensor(y, dtype=tf.int32) y = tf.one_hot(y, depth=10) print(x.shape, y.shape) train_dataset = tf.data.Dataset.from_tensor_slices((x, y)) train_dataset = train_dataset.batch(200) model = keras.Sequential([ layers.Dense(512, activation='relu'), layers.Dense(256, activation='relu'), layers.Dense(10)]) optimizer = optimizers.SGD(learning_rate=0.001) def train_epoch(epoch): # Step4.loop for step, (x, y) in enumerate(train_dataset): with tf.GradientTape() as tape: # [b, 28, 28] => [b, 784] x = tf.reshape(x, (-1, 28 * 28)) # Step1. compute output # [b, 784] => [b, 10] out = model(x) # Step2. compute loss loss = tf.reduce_sum(tf.square(out - y)) / x.shape[0] # Step3. optimize and update w1, w2, w3, b1, b2, b3 grads = tape.gradient(loss, model.trainable_variables) # w' = w - lr * grad optimizer.apply_gradients(zip(grads, model.trainable_variables)) if step % 100 == 0: print(epoch, step, 'loss:', loss.numpy()) def train(): for epoch in range(30): train_epoch(epoch) if __name__ == '__main__': train() ``` 希望能有人给下建议或解决方法,拜谢!
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页