初学DeepLearning,看到TensorFlow和pytorch框架用户数和讨论数比较多,最后选择上手TensorFlow2.0版本。因为搜索了一圈总结:TensorFlow用户基数还是比较大;2.0版本也改进了1.0版本代码编写、调试困难和API混乱等缺点,使其也有了pytorch好上手的优点。
TensorFlow有cpu和gpu两个版本,gpu可以并行处理,因此gpu版本运行起来更快,但需要有NVIDIA显卡,且显卡算力有一定要求。我的笔记本显卡是:NVIDIA GeForce MX250。以下是在win10安装TensorFlow2.0-gpu的步骤:
1、安装之前需要有anaconda,这个我之前装了就不写了;
查看我们机器的NVIDIA显卡算力是否满足gpu计算要求:https://www.tensorflow.org/install/gpu
显卡算力查询:https://developer.nvidia.com/cuda-gpus
我的MX250在官网没查到,百度了一下说满足要求,就继续安装了。最后我安装完成测试时看到了我的显卡算力是6.1
2、pip安装TensorFlow-gpu
用阿里云的镜像源下载安装:cmd执行:
pip install --default-timeout=100 --ignore-installed --upgrade tensorflow-gpu -i https://mirrors.aliyun.com/pypi/simple/
3、https://www.tensorflow.org/install/source_windows查看CUDA、cuDNN要下载的版本
我的python版本是Python 3.7.6,可以安装2.0版本,另外需要安装cuDNN7.4,CUDA10,中间的编译器和构建工具不知道是什么没理,最后也不影响。
#python版本查询:python -V
#python安装路径:where ipython
4、https://developer.nvidia.com/cuda-toolkit-archive,下载对应版本的CUDA,我下载的是10.2版本,安装过程就是一直点点点,如果你不放心的话可以找别的资料参照下具体过程。另外,我搜到有人装的10.0版本的,不知道区别大不大。我选择的是默认安装路径:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
5、https://developer.nvidia.com/cudnn,下载对应版本的cuDNN,我下载的是cudnn-10.2-windows10-x64-v8.0.2.39.zip。这里我下错了,导致后面运行时候有点小问题(具体下面说),我下成8.0版本了。下载前需要进行注册账户和填写问卷。
我只看到“for CUDA 10.2”就下了,其他历史版本在Archived cuDNN Releases里可以找到。下载得到的压缩包,就地解压后将里面的bin、include、lib里边的文件放到CUDA的对应文件夹下(我的是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2)。
6、添加环境变量:电脑 -> 右键 属性 -> 高级系统设置 -> 环境变量 -> 系统变量里找到Path -> 编辑 -> 新建,将以下4个分别加上去。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\libnvvp
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include
7、测试:
一、cmd中测试:
activate tensorflow
ipython
import tensorflow as tf //结果不报错即正常
tf.test.is_gpu_available() //最后结果显示True即gpu可以使用
二、pycharm中测试:
(1)加法测试,不要用1.x版本的session方式来测试,因为还要通过import tensorflow.compat.v1 as tf tf.disable_v2_behavior()来启用1.x版本的代码编写方式,这就是2.x想解决的一个TensorFlow缺点,直接用以下代码即可:
1 import tensorflow as tf 2 3 a = tf.constant(1.) 4 b = tf.constant(2.) 5 c = tf.add(a,b) 6 7 print(float(c))
(2)矩阵相乘测试,cpu和gpu分别计算10000×1000矩阵和1000×2000矩阵相乘的结果,输出2个运算的时间。
1 import tensorflow as tf 2 import timeit 3 4 with tf.device('/cpu:0'): 5 cpu_a = tf.random.normal([10000, 1000]) 6 cpu_b = tf.random.normal([1000, 2000]) 7 print(cpu_a.device, cpu_b.device) 8 9 with tf.device('/gpu:0'): 10 gpu_a = tf.random.normal([10000, 1000]) 11 gpu_b = tf.random.normal([1000, 2000]) 12 print(gpu_a.device, gpu_b.device) 13 14 def cpu_run(): 15 with tf.device('/cpu:0'): 16 c = tf.matmul(cpu_a, cpu_b) 17 return c 18 19 def gpu_run(): 20 with tf.device('/gpu:0'): 21 c = tf.matmul(gpu_a, gpu_b) 22 return c 23 24 25 cpu_time = timeit.timeit(cpu_run, number=10) 26 gpu_time = timeit.timeit(gpu_run, number=10) 27 print('warmup:', cpu_time, gpu_time) 28 29 30 cpu_time = timeit.timeit(cpu_run, number=10) 31 gpu_time = timeit.timeit(gpu_run, number=10) 32 print('run time:', cpu_time, gpu_time)
输出结果:
8、测试时遇到的问题:
Could not load dynamic library ‘cudart64_101.dll’; dlerror: cudart64_101.dll not found,还有个是没找到cudart64_7什么的文件
解决:在CUDA安装路径下(我的是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2)搜索缺失的dll文件,将搜到的cudart64_102.dll改为cudart64_101.dll,另一个cudart64_7的也同理。