这篇文章将会演示windows下详细的用VS2019+CUDA10.1+tensorflow2.0+tbb+opencv4.2.0(gpu——with_cuda)环境的配置全过程。如果按本文讲到的避坑方式做的话,应该是可以成功配置的,本文的配置顺序也是个人踩坑多年觉得最合适的路线,所以话不多说,直接开始。
注意:在全部配置过程之前,一定要确保环境是干净的(即下面要用到的工具没安装过,如果有一定要卸载干净,包括环境变量、注册表等)。
这个的安装过程就不详细讲了,因为没有太重要的点。下载好64位的exe文件后,双击打开按提示安装就好了,很简单。
ps:最后有一步有两个选项的(已安装好没截图了),第一个选项是是否添加环境变量,选上可以不用手动添加环境变量,第二个选项是python是否会被其他用到python的软件检测到,如果安装anaconda之前已经安装过python,可以不点,不然就要选上。
环境变量:
这个的安装依旧不讲解,官网下载就好了,但是这里要求版本要 2019.3 以上,因为是要和后面的tensorflow.whl文件匹配下。
注意:如果没有 Microsoft Visual C++ Redistributable for Visual Studio 2019 的话 也要下载安装(exe文件,双击安装就行), 否则会出现下面的错误,安装好后就不会有这样的错误了,当然也有可能是cuda版本不对(这里应该是10.1)或cuda没安装的原因.
ImportError: DLL load failed: 找不到指定的模块。
Failed to load the native TensorFlow runtime.
下面是环境变量的添加(3个),可能不需要,但添加上应该没什么坏处吧:
这里稍微讲下cuda:
① VS2019支持cuda10.1/cuda10.2,但是VS2017支持的最高版本为cuda10.0。
② TensorFlow2.0官方是只支持CUDA10.0(直接pip install tensorflow安装的话就要注意选用CUDA10.0版本了)的,但是这里选的CUDA10.1是因为下面安装的tf是大神从源码编译的,是只支持CUDA10.1(我安装的时候还不支持10.2)的,如果是安装其他的tf版本,也可以看看大神的github里的说明再选配置。
(1)同意协议,选自定义安装
如果已经有比cuda10.1更新的显卡driver驱动,就把下面三个选项去掉,只选第一个就行。
安装路径,可以默认C盘,也可以自定义,然后下一步就开始安装了
后面就下一步或关闭就可以完成安装了。
注意:安装完之后,可以添加cudnn库,下载对应版本,解压,然后把里面的文件复制到CUDA的安装目录下就可以了。
下面是环境变量的设置:
① 如下图,绿色框框中的是安装完之后默认就添加的,红色框里的自己添加到系统变量中设置为变量, 注意下面的CUDA_SDK其实就是NVCUDASAMPLES_ROOT,一样的,自己仔细看看,最好不要直接复制。
② 在 系统变量-path 中添加如下内容:
打开samples目录,如 F:\NVIDIA GPU Computing Toolkit\CUDA Samples\v10.1, 双击打开Samples_vs2019.sln,第一次打开导入项目会比较久, 耐心等待一下,打开之后右键 1_Utilities 生成/重新生成。
成功生成后是下面这样的,这里也可能会报错:如果是 could not set up environment for …(balabalabala什么的),那就是环境问题,仔细查看自己的cuda环境变量是否正确,再次强调环境真的很重要。
然后终端/shell进入这个目录中的bin文件夹,里面有个debug和release,生成时选的是哪个,就进入哪个目录,然后执行deviceQuery.exe和bandwidthTest.exe,看图操作,出现图中的结果就说明安装成功了, samples里面还有其他的例子,同理生成可测试。
在安装tensorflow之前先检查下下面这些是否已经具备:
-> Visual Studio 2019.3或以上
-> Microsoft Visual C++ Redistributable for Visual Studio 2019
-> CUDA 10.1
-> 对应CUDA版本的cudnn
-> python3.7
前面的都弄好了之后就很简单了,在shell里cd进入下载好的whl文件目录,pip install
# 进入whl文件下载的目录
cd F:\SetupFiles\tensorflow 2.0
# pip 安装cpu版的或者gpu版的
# pip install tensorflow-2.0.0-cp37-cp37m-win_amd64.whl
pip install tensorflow_gpu-2.0.0-cp37-cp37m-win_amd64.whl
注意:第一次执行tensorflow时,需要等待一段时间用于编译初始化
测试是否安装成功:
# 这里在shell中进入ipython测试
import tensorflow as tf
tf.test.is_built_with_cuda()
tf.test.is_gpu_available()
一个用于并行进程的C++库,官方介绍:
Intel® Threading Building Blocks (Intel® TBB) is a widely used C++ library for shared memory parallel programming and heterogeneous computing (intra-node distributed memory programming). The library provides a wide range of features for parallel programming that include:
· Generic parallel algorithms
· Concurrent containers
· A scalable memory allocator
· Work-stealing task scheduler
· Low-level synchronization primitives
Use this library-only solution for task-based parallelism. It does not require any special compiler support and has ports to multiple architectures that include Intel® architectures and Arm*.
安装文件是个压缩文件,解压后设置一下环境变量就可以了:
进入下载地址,下载64位的msi文件,双击安装即可,自动添加环境变量。
注意:如果不需要支持cuda的opencv(一般是没有gpu的情况下),在cmake中(下面操作对应部分)取消勾选with_cuda即可。
下面进入需要编译三四个小时的gpu加速的opencv配置过程。。。。。。
(Linux其实是同样的编译过程的,如果没有install cmake-gui,那就用命令参数的方式选择,如果有GUI就同下)
首先,打开cmake,添加源码目录,和需要存放build生成的文件的目录。
点击configure后需要选择编译器,也就是VS2019 x64了,点finish之后就开始第一次configure了。
第一次configure done之后,是一片红的,然后勾选下表中的的选项,勾选完之后点击configure。
(注意:如果configure的时间很长,且有红色信息输出,多半是ippicv、ffmpeg等文件下载不成功,解决办法请参考:传送门)
必选项 | value |
---|---|
WITH_CUDA | True |
WITH_TBB | True |
OPENCV_EXTRA_MODULES_PATH | F:/opencv_4.2.0/opencv_contrib-master/modules |
OPENCV_ENABLE_NONFREE | True |
可选项 | value |
---|---|
BUILD_DOCS | True |
BUILD_EXAMPLES | True |
INSTALL_C_EXAMPLES | True |
INSTALL_PYTHON_EXAMPLES | True |
BUILD_opencv_world | True |
(BUILD_opencv_world选项的作用是将所有lib文件融合为一个world.lib文件,我没选,个人觉得不同的模块都有对应名字的lib,这样比较好管理,出错也好排查)
configure done之后,手动填入tbb的路径,如下。
然后选一下cuda的computing capacity(好像这么叫的), 如下,例如我这里 RTX2080对应的就是7.5,设置完之后再次点击configure。
无需设置上面这个computing capacity,直接检查其他无误之后点击configure就可以了。
这次就只有一个红色选项了,就是 TBB_VER_FILE,value是文件路径,一般自动填入的,检查一下有没有错误,没有就再次点击configure。
configure done之后,可以往上翻一翻,看看configure的信息是否正确,如果没有问题就点击左下方的第二个选项 Generate,生成之后输出 Generating done,到这里就完成了cmake的使命了,点击 Open Project 选项直接打开 OpenCV.sln项目了(如果没有点这个选项关闭了cmake,也可以在build目录下找到这个文件打开)。
打开 OpenCV.sln 之后,先找到 解决方案资源管理器-modules-opencv_core/opencv_cudacodec,先分别右键点击这两项生成,看看有没有什么错误,如果这两个可以生成,并不报错,那就是基本成功的了。
基本上是最后一步了:点击菜单栏 生成-批生成, 选中All_BUILD跟INSTALL,点击重新生成,就是漫长的等待编译完成的娱乐时间了。
出现下面这图时,说明编译已经成功完成了。整个编译过程有很多很多的警告(C4819),是因为编译 ANSI 源文件上使用不能表示文件中的所有字符的代码页的系统时,所以出现 C4819。不用理会,不影响结果,只有没有error就没问题。
ps:编译过程中也有可能错误: 无法打开 python37_d.lib, 需要简单修改一下pyconfig.h文件,具体操作:解决办法。