一·GPU版本
前言,2.10和2.11都缺少很多DLL文件,而且找不全,2.12解压就会出现问题,2.8是我目前发现的能用的版本了,全部一模一样复刻。今天是7月26号,GPU只有2.10版本之前的,2.11和2.12只有CPU版本,我居然才知道,痛苦面具。
结论tensorflow2.8.0 配合 cuda 11.8 +cudnn8.9 可行!
1.1. GPU三个要求
第一 cuda toolkit 9.0 并有相关驱动 加入环境变量
第二 支持的显卡(N卡才行)Compute capability >3.0或者3.5的卡
第三 cuDnn 7.0 并加入环境变量
1.2. 查看方式
1.2.1 设备管理器显示确定有无驱动
1.2.2 去官网查计算能力,基本750以上才行
CUDA GPUs - Compute Capability | NVIDIA Developer
1.2.3 查看电脑的cuda版本
NAVIDIA控制面板中左下角系统信息——组件
12.1显然可以
1.3操作步骤
1.3.1 对应官网下载对应版本的cuda和cudnn,版本可以低,不能高了,地址:CUDA Toolkit Archive | NVIDIA Developer cudnn 的下载地址如下:cuDNN Archive | NVIDIA Developer
下载12.0.0版本的cuda,并下载对应的cudnn
选择了local版本的
尝试个最新的,希望别出错
1.3.2 cuda安装 自定义 ——默认路径安装——结束,这时候会生成两个系统变量,查看方式:
此电脑——属性——高级系统设置——环境变量——系统变量 ,在系统变量中找到path,去里面加另外两条,前两条应该本来就有,把后两条加上,最终有四条路径见截图
1.3.3 cuDnn安装 ,安装完了直接复制粘贴到duda安装目录文件中,给他覆盖了就完事儿了。完了我的没有覆盖选项,他们没有重合的部分,不会出问题了吧。
1.3.4 测试cuda版本,见证奇迹的时候到了,打开cmd,输入指令:nvcc -V
nice成功了,大佬牛X
二·Anaconda配环境(我自己有,省略安装,直接配)
2.1配置环境
2.1.1查看
打开Anaconda Prompt,输入命令
conda --version查看安装的版本
conda env list查看已经安装的环境,右边“*”表示当前使用的环境
2.1.2 创建
创建tensorflow环境,输入命令:conda create -n tensorflow python=3.9
注意环境命名不要叫tensorflow,不要和包的名字重合,后面后出bug,我给他改成了tf2.6
conda create -n tf python=3.8
创建成功后,查看环境然后用activate激活:activate tensorflow
因为我的conda环境在D盘中,所以将路径改了以下!很重要。如果anaconda安装的时候是默认路径,这一步不需要。
\anaconda3\envs\tf2.8
很重要奥,要不然装什么都白装
2.1.2 安装GPU版本的TensorFlow
安装tensorflow-gpu版本的,可以输入命令:pip install --ignore-installed --upgrade tensorflow-gpu
这一条失败了 ,是pip的问题,问了GPT说最好使用conda,这个时候GPT就是埋下的雷,因为国内需要科学上网,导致出现了SSL代理问题,把梯子关了就好了。
使用命令:pip install tensorflow-gpu 就搞定了,下载了挺久的,下载不了的见这篇文章(PS:我就是照着这篇文章做的,很全面,当然这个文档也是写给自己看的。)
(90条消息) tensorflow详细安装教程(Win10, Anaconda,Python3.9)_tensorflow安装教程_Yan_Yancy的博客-CSDN博客
2.1.3 手动下载
我就知道没那么好整,2.10和2.11都是DLL问题,2.12是setup文件的问题,目前还是得2.8
手动到这个网站下载,去找这个Feb 2 的版本,有人分享了这个缺少的唯一一个DLL,救了大命了。
下载完了放到对应环境的bin中,对我如下
之后输入命令:pip install tensorflow_gpu-2.8.0-cp39-cp39-win_amd64.whl
如果有网速问题,照着前文解决(90条消息) tensorflow详细安装教程(Win10, Anaconda,Python3.9)_tensorflow安装教程_Yan_Yancy的博客-CSDN博客
下载好了以后就是done,确定的时候,可以用:pip show tensorflow-gpu看看版本号,有就对了
2.1.4 补充DLL
这时直接进2.2.2验证,会出这个问题,其实挺好的,2.10.0报的错巨长,头都裂开了
去下载一个DLL,文件由前文博主分享,在下仅仅复制粘贴,我缺少的是cudart64_110.dll,博主当时缺少的是cusolver64_11.dll
链接:https://pan.baidu.com/s/1W9fR2N_hoVD-7_ODtOiJhg
提取码:u65i
这是11.2缺少的dll文件,11.8应该不缺,至少我不缺
下载好了以后放到这里,对应环境的bin中,里面全是dll,肯定错不了
解决方法是到这个网站下载一个,然后方到C:\Windows\System32目录里,解决了问题
Download missing DLL files for free | DLL‑files.com
2.1.5 protobuf问题
我的是4.几的版本,要我降到3.20以下。
pip uninstall protobuf
pip install protobuf==3.20.1就完了,希望没事儿了。
2.1.6 cuda版本问题(前面的雷)
缺少dll文件,而且一缺就是一组,这个时候对比自己的
在其他人的网盘里下载了一套_10的DLL文件,总之都不对,这是cuda版本的问题,需要v11.2的cuda,卸了重下。PS:我最后没有卸载新版本(12.0)的,只是把旧版本(11.8)下载了一份,然后调整了环境变量,让旧版本在前面即可。
(91条消息) windows下CUDA的卸载以及安装_卸载cuda_hi_1900的博客-CSDN博客
2.2 查看和验证
2.2.1 查看
输入命令:pip show tensorflow-gpu,可以查看tensorflow的版本信息,我这里查不到tensorflow,只能查到 tensorflow-gpu 所以最好直接到集成的环境spider或者pycharm里面试一试测试代码,能引入就好了
2.2.2 验证
在自己pycharm中加入一个解释器,选择到环境的位置中的python.exe即可。
之后调用测试代码,分两个,一个市能不能引用,一个是测试速度。
第一个:
import tensorflow as tf
a = tf.constant(1.)
b = tf.constant(2.)
print(a+b)
print(tf.__version__)
print(tf.test.gpu_device_name())
print('GPU:',tf.config.list_physical_devices(device_type='GPU'))
print('CPU:',tf.config.list_physical_devices(device_type='CPU'))
print(tf.test.is_gpu_available())
结果:
第二个:
import tensorflow as tf
import timeit
#指定在cpu上运行
def cpu_run():
with tf.device('/cpu:0'):
cpu_a = tf.random.normal([10000, 1000])
cpu_b = tf.random.normal([1000, 2000])
cpu_c = tf.matmul(cpu_a, cpu_b)
# print( "cpu_a: ", cpu_a.device)
# print( "cpu_b: ", cpu_b.device)
# print("cpu_c:", cpu_c.device)
return cpu_c
#指定在gpu上运行
def gpu_run():
with tf.device( '/gpu:0'):
gpu_a = tf.random. normal([ 10000,1000])
gpu_b = tf.random. normal([ 1000, 2000])
gpu_c = tf.matmul(gpu_a, gpu_b)
# print( "gpu_a: ", gpu_a.device)
# print("gpu_b: ", gpu_b.device)
# print("gpu_c: ", gpu_c.device)
return gpu_c
cpu_time = timeit.timeit(cpu_run, number = 10)
gpu_time = timeit.timeit(gpu_run, number = 10)
print('cpu:',cpu_time, 'gpu:',gpu_time)
结果:
请注意,第一次跑的时候,跑得慢是很正常的,第二次就快了。