Mask_RCNN入门(三)—— 使用gpu进行训练和测试

cpu换成gpu

之前的工作:
Mask_RCNN入门(一)—— 跑通代码
Mask_RCNN入门(二)—— 训练自己的数据集
其实是在CPU上跑的,这一点可以在requirements.txt中可以看到:
Mask_RCNN入门(三)—— 使用gpu进行训练和测试_第1张图片
tensorflow就是CPU版,GPU版本是tensorflow-gpu。
所以第一步是卸载tensorflow,安装tensorflow-gpu,为了避免兼容性冲突,tensorflow-gpu同样使用1.6.0版本。
卸载tensorflow:

python -m pip uninstall tensorflow

安装tensorflow-gpu:

python -m pip install tensorflow-gpu==1.6.0

driver,CUDA,cuDNN和tensorflow-gpu

安装完tensorflow-gpu之后,如果直接运行demo.py或者train.py会报错:ImportError: Could not find 'cudart64_90.dll’
在这里插入图片描述
其实信息明确了,到指定网址下载安装CUDA 9.0。
这里开一下上帝视角:CUDA,包括后面同样会报错需要下载的cuDNN,它们是什么,还有和CUDA版本紧密相关的显卡驱动又是什么?

driver

这个最好理解,这个和键盘驱动,鼠标驱动,打印机驱动等等没本质区别,计算机(确切地说是CPU)与外设(这个外设是广义的,显卡也算在内)的任何通信都要统一好接口,而驱动就是硬件统一CPU和外设通信的接口,以驱动程序的形式呈现。
对于一个显卡驱动是自动安装好了的,不然我们连开机画面都没,这个不用多说,关于驱动的版本可以看这里:
电脑 —— 属性 —— 管理 —— 设备管理器 —— 显示适配器,双击,选择“驱动程序”:
Mask_RCNN入门(三)—— 使用gpu进行训练和测试_第2张图片
但其实只用看倒数第一个小数点往左的第一个数字开始,一直到结尾部分,对于上图来说,即:411.31
如果了解nvidia-smi命令的话(使用前要将其目录添加进环境变量,具体可见我的另外一个文章:nvidia-smi命令),可以使用它快速查看:
Mask_RCNN入门(三)—— 使用gpu进行训练和测试_第3张图片
值得注意的是,显卡支持的驱动是一直在更新的。

CUDA

CUDA全称Compute Unified Device Architecture,NVIDIA推出的显卡并行计算框架,这看名字大概也知道什么意思。更为专业性的知识这里也不多说(我也不懂),反正知道tensorflow-gpu的运行需要它的底层支持就够了,但是,它是一个计算框架,抽象层次比驱动高,每个版本的CUDA都是基于一定版本的驱动建立的,所以它对驱动的最低版本是有要求的(应该就是写它的时候那个版本),具体要求可见:CUDA对显卡驱动版本的要求,BTW:

  1. 很多教程在安装CUDA和cuDNN时不怎么提驱动的事,但是这也是一个隐藏坑:万一你的显卡比较老就会报错:CUDA driver version is insufficient for CUDA runtime version:
    在这里插入图片描述
    其实这个CUDA runtime就是显卡驱动。
  2. NVIDIA下载特定版本的地址:NVIDIA 驱动程序下载
cuDNN

cuDNN全称The NVIDIA CUDA Deep Neural Network library,即基于CUDA架构的神经网络库,这是专门用于神经网络计算的加速包,这可以看做是CUDA的一部分(并行计算框架下的一个包),这从cuDNN实际安装过程 —— 解压放入CUDA安装目录对应的子文件夹也能看出来。
所以cuDNN和CUDA的版本肯定是有对应关系的,这一点在官网下载cuDNN时可以看到:CUDA和cuDNN对应关系

tensorflow-gpu

tensorflow-gpu本身不多说,但是tensorflow-gpu的运行需要用到CUDA框架,特别是cuDNN库(神经网络加速包),就像CUDA是基于特定版本驱动构建的一样,tensorflow-gpu也是调用的也是特定版本的CUDA,二者的对应关系可见:tensorflow-gpu和CUDA的关系

关系图

Mask_RCNN入门(三)—— 使用gpu进行训练和测试_第4张图片
先说明一下图中情况:

  • driver决定了CUDA的版本
  • CUDA决定了cuDNN版本
  • CUDA决定了tensorflow-gpu版本,可见tensorflow-gpu和CUDA的关系
  • tensorflow-gpu基于一定版本的python,这在tensorflow-gpu和CUDA的关系中也能看出
  • 如果在算法中还要用到Keras,那么tensorflow-gpu和Keras也有约束关系
    详见:tensorflow-gpu和Keras版本兼容性


    在实操中,一般采用自上而下的确定方式:
  • 确定python版本
  • 确定项目的tensorflow-gpu版本
  • 确定CUDA版本,从而确定cuDNN版本,更新驱动版本

安装CUDA

回到之前的问题:
在这里插入图片描述
接下来安装cuda 9.0:
在这里插入图片描述
一路next,命令行nvcc -V验证:
在这里插入图片描述
BTW:
① 网络教程很多要设置环境变量,单经实测,安装过程中会自动添加,不用手动添加。
② 一台机器可以同时安装多个版本CUDA,不矛盾。

cuDNN 7

再次运行demo.py,继续报错:
在这里插入图片描述
去cuDNN官方地址下载,不过这回要注册用户:
在这里插入图片描述
join now,注册用户,giaogiaogiao

去这里下载:
在这里插入图片描述

下载,解压,三个文件分别放入cuda对应文件夹(其实就是手动给cuda安装cuDNN模块):

  1. 把cuda\bin\cudnn64_7.dll复制到 C:\Program Files\NVIDIA GPU Computing\Toolkit\CUDA\v9.0\bin 目录下
  2. 把\cuda\ include\cudnn.h复制到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\include 目录下
  3. 把\cuda\lib\x64\cudnn.lib复制到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\lib\x64 目录下


    运行,搞定!

你可能感兴趣的:(Mask_RCNN)