背景:由于需要在python3的环境下用dlib识别人脸,但是cpu算力太低,所以尝试使用GPU增加图像处理的速度,提升效率。网上有很多dlib装GPU版的教程,但是比较零碎,有些具体的细节也不完全一样,写一下我安装的过程。

准备环境:

1.Win10

2.GTX75Ti

1 安装 Visual Studio 2015 update3

文件大小 7.22G,下载地址:

http://download.microsoft.com/download/8/4/3/843ec655-1b67-46c3-a7a4-10a1159cfa84/vs2015.3.ent_enu.iso

下载完成后,点击安装,安装整个过程大概需要花费1个小时。安装前需要把别的版本的Visual Studio卸载,否则报错。

Visual Studio 2015 update3 是在安装cuda所需要的环境,但是网上和cuda说Visual Studio 2017也是可以的,有兴趣的同学可以自行尝试。我自己测试过Visual Studio 2019,失败了。

2 安装cuda

打开 NVIDIA 控制面板 > 帮助 > 系统信息 > 组件,查看 NVCUDA.DLL 选项,可以看到显卡NVIDIA CUDA对应的版本。

Snipaste_2019-06-21_11-48-05.png

Snipaste_2019-06-21_11-50-17.png

打开链接:

https://developer.nvidia.com/cuda-toolkit-archive

找到对应的版本,点击:

Snipaste_2019-06-21_11-54-57.png

依次选择 **Windows > x86_64 > 10 > exe(local)*,推荐用本地安装的方式下方出现Download Installers*的文件,下载 Base Installer

Snipaste_2019-06-21_11-56-20.png

下载完成,点击安装。选择自定义安装,保证所有的组件被勾选。记录文件安装位置。

Snipaste_2019-06-21_12-03-46.png

打开命令行,输入nvcc -V,输出以下结果,则cuda安装成功:

Snipaste_2019-06-21_14-18-11.png

3 安装cudnn

打开链接:

https://developer.nvidia.com/rdp/cudnn-archive

找到对应的cuda和系统版本。注意:需要登陆NVIDIA账号才能够下载,所以需要登陆或用邮箱注册账号。

Snipaste_2019-06-21_12-08-39.png

下载完成,解压。进入目录,复制文件:

Snipaste_2019-06-21_12-13-49.png

找到CUDA安装目录,打开CUDA Development,将刚才复制好的cudnn的文件,粘贴到该目录下,文件会自动合并。不放心的话可以提前备份CUDA Development文件夹。

Snipaste_2019-06-21_12-21-45.png

4 添加系统变量

我的电脑>右键属性>高级系统设置>环境变量>系统变量

Snipaste_2019-06-21_12-23-57.png

在环境变量下已经有了CUDA_PATHCUDA_PATH_V9_1,还需要添加以下几个系统变量,点击新建,依次添加:

变量名 变量值
CUDA_BIN_PATH %CUDA_PATH%\bin
CUDA_LIB_PATH %CUDA_PATH%\lib\x64
CUDA_SDK_BIN_PATH %CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH %CUDA_SDK_PATH%\common\lib\x64

结果如图:

Snipaste_2019-06-21_12-31-17.png

测试:

找到安装路径下的CUDA Development\extras\demo_suite文件夹,如我的是F:\CUDA\CUDA Development\extras\demo_suite

cmd进入此文件夹,运行bandwidthTest.exe,输出Result = PASS

Snipaste_2019-06-21_12-34-47.png

继续运行deviceQuery.exe,输出Result = PASS说明配置成功。

Snipaste_2019-06-21_12-36-44.png

5 下载dlib

http://dlib.net/

Snipaste_2019-06-21_12-37-52.png

我的版本是19.17,解压:

Snipaste_2019-06-21_12-38-50.png

cmd进入该文件,运行python setup.py install

注意:如果使用python setup.py install --yes USE_AVX_INSTRUCTIONS --yes DLIB_USE_CUDA

会出现无需加 –yes的提示,因为这个版本的dlib不需要特别说明CUDA安装:

Snipaste_2019-06-21_12-41-08.png

如果存在CUDA dlib会自动安装CUDA的版本,编译的过程出现了以下的提示:

Snipaste_2019-06-19_22-14-59.png

注意:如果安装dlib之前,需要安装cmake,可以用 pip install cmake进行安装。

6 测试

1 全部环境部署完成,运行python脚本:

1
2
3
import dlib
print(dlib.DLIB_USE_CUDA)
print(dlib.cuda.get_num_devices())

输出结果,说明dlib调用GPU成功。

Snipaste_2019-06-19_22-20-53.png

2 运行python dlib脚本,在cmd中输入nvidia-smi 命令,看到python.exe的进程,说明在执行dlib的时候,确实有用到GPU

Snipaste_2019-06-20_21-29-09.png

3 效果

我在安装dlib-gpu的之前,以为gpu的计算速度至少比cpu快几十倍,但后来我才发现是我太天真了。实测的时候,同样的脚本,CPU执行需要15秒,而GPU则需要12秒,只是快了20%。而看到GPU的使用率也低于10%,至今也没弄懂是为什么,大概和GIL有关。后来在看到有关一本tensorflow的书的时候,看到tensorflow-cpu和tensorflow-gpu跑同样的代码,gpu也只是快了26%,说明这个情况是普遍存在的。

7 参考文献

https://blog.csdn.net/luckyfairy17/article/details/83855739

https://www.cnblogs.com/supersayajin/p/8446685.html