文章目录

  • 前言
  • 准备
  • --> 全过程会很久,做好心理准备
  • --> Tools:
  • 环境配置
  • 1. Anaconda3
  • 2. Visual Studio 2019
  • 3. CUDA10.1
  • ----> 安装:
  • ---> 测试
  • 4. tensorflow2.0
  • 5. tbb (Threading Building Blocks)
  • 6. cmake16
  • 7. opencv4.2.0(with_cuda)
  • --> 第一次configure
  • --> 第二次configure
  • --> 第三次configure
  • --> generate
  • --> VS2019——build&install
  • --> 完成



————————————————————————————————————

前言

这篇文章将会演示windows下详细的用VS2019+CUDA10.1+tensorflow2.0+tbb+opencv4.2.0(gpu——with_cuda)环境的配置全过程。如果按本文讲到的避坑方式做的话,应该是可以成功配置的,本文的配置顺序也是个人踩坑多年觉得最合适的路线,所以话不多说,直接开始。

准备

–> 全过程会很久,做好心理准备

注意:在全部配置过程之前,一定要确保环境是干净的(即下面要用到的工具没安装过,如果有一定要卸载干净,包括环境变量、注册表等)。

–> Tools:

  1. Anaconda3(python3.7)下载地址
  2. Visual Studio 2019下载地址
  3. CUDA10.1下载地址
  4. tensorflow2.0下载链接
  5. tbb下载地址
  6. cmake16下载地址
  7. opencv-4.2.0 + opencv-conrtib-4.2.0opencv下载地址 opencv-contrib下载地址

环境配置

1. Anaconda3

这个的安装过程就不详细讲了,因为没有太重要的点。下载好64位的exe文件后,双击打开按提示安装就好了,很简单。

ps:最后有一步有两个选项的(已安装好没截图了),第一个选项是是否添加环境变量,选上可以不用手动添加环境变量,第二个选项是python是否会被其他用到python的软件检测到,如果安装anaconda之前已经安装过python,可以不点,不然就要选上。

环境变量:

tensorflow版本对应cuda tensorflow2.4.1对应cuda_tensorflow版本对应cuda

2. Visual Studio 2019

这个的安装依旧不讲解,官网下载就好了,但是这里要求版本要 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个),可能不需要,但添加上应该没什么坏处吧:

tensorflow版本对应cuda tensorflow2.4.1对应cuda_opencv_02

3. CUDA10.1

这里稍微讲下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)同意协议,选自定义安装

tensorflow版本对应cuda tensorflow2.4.1对应cuda_tensorflow版本对应cuda_03


如果已经有比cuda10.1更新的显卡driver驱动,就把下面三个选项去掉,只选第一个就行。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_tensorflow_04


安装路径,可以默认C盘,也可以自定义,然后下一步就开始安装了

tensorflow版本对应cuda tensorflow2.4.1对应cuda_环境变量_05


后面就下一步或关闭就可以完成安装了。

注意:安装完之后,可以添加cudnn库,下载对应版本,解压,然后把里面的文件复制到CUDA的安装目录下就可以了。

下面是环境变量的设置

① 如下图,绿色框框中的是安装完之后默认就添加的,红色框里的自己添加到系统变量中设置为变量, 注意下面的CUDA_SDK其实就是NVCUDASAMPLES_ROOT,一样的,自己仔细看看,最好不要直接复制。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_环境变量_06


② 在 系统变量-path 中添加如下内容:

tensorflow版本对应cuda tensorflow2.4.1对应cuda_cuda_07

—> 测试

打开samples目录,如 F:\NVIDIA GPU Computing Toolkit\CUDA Samples\v10.1, 双击打开Samples_vs2019.sln,第一次打开导入项目会比较久, 耐心等待一下,打开之后右键 1_Utilities 生成/重新生成

tensorflow版本对应cuda tensorflow2.4.1对应cuda_opencv_08


成功生成后是下面这样的,这里也可能会报错:如果是 could not set up environment for …(balabalabala什么的),那就是环境问题,仔细查看自己的cuda环境变量是否正确,再次强调环境真的很重要。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_cuda_09


然后终端/shell进入这个目录中的bin文件夹,里面有个debug和release,生成时选的是哪个,就进入哪个目录,然后执行deviceQuery.exe和bandwidthTest.exe,看图操作,出现图中的结果就说明安装成功了, samples里面还有其他的例子,同理生成可测试。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_opencv_10


tensorflow版本对应cuda tensorflow2.4.1对应cuda_tensorflow_11

4. tensorflow2.0

在安装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 <filename.whl>就好了,如下面演示:

# 进入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()

5. tbb (Threading Building Blocks)

一个用于并行进程的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*.

安装文件是个压缩文件,解压后设置一下环境变量就可以了:

tensorflow版本对应cuda tensorflow2.4.1对应cuda_tensorflow_12

6. cmake16

进入下载地址,下载64位的msi文件,双击安装即可,自动添加环境变量。

7. opencv4.2.0(with_cuda)

注意:如果不需要支持cuda的opencv(一般是没有gpu的情况下),在cmake中(下面操作对应部分)取消勾选with_cuda即可。

下面进入需要编译三四个小时的gpu加速的opencv配置过程。。。。。。
(Linux其实是同样的编译过程的,如果没有install cmake-gui,那就用命令参数的方式选择,如果有GUI就同下)

–> 第一次configure

首先,打开cmake,添加源码目录,和需要存放build生成的文件的目录。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_cuda_13


点击configure后需要选择编译器,也就是VS2019 x64了,点finish之后就开始第一次configure了。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_tensorflow_14


第一次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

configure done之后,手动填入tbb的路径,如下。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_tensorflow版本对应cuda_15


然后选一下cuda的computing capacity(好像这么叫的), 如下,例如我这里 RTX2080对应的就是7.5,设置完之后再次点击configure。

无需设置上面这个computing capacity,直接检查其他无误之后点击configure就可以了。

–> 第三次configure

这次就只有一个红色选项了,就是 TBB_VER_FILE,value是文件路径,一般自动填入的,检查一下有没有错误,没有就再次点击configure。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_opencv_16

–> generate

configure done之后,可以往上翻一翻,看看configure的信息是否正确,如果没有问题就点击左下方的第二个选项 Generate,生成之后输出 Generating done,到这里就完成了cmake的使命了,点击 Open Project 选项直接打开 OpenCV.sln项目了(如果没有点这个选项关闭了cmake,也可以在build目录下找到这个文件打开)。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_opencv_17

–> VS2019——build&install

打开 OpenCV.sln 之后,先找到 解决方案资源管理器-modules-opencv_core/opencv_cudacodec,先分别右键点击这两项生成,看看有没有什么错误,如果这两个可以生成,并不报错,那就是基本成功的了。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_tensorflow版本对应cuda_18


基本上是最后一步了:点击菜单栏 生成-批生成选中All_BUILD跟INSTALL,点击重新生成,就是漫长的等待编译完成的娱乐时间了。

tensorflow版本对应cuda tensorflow2.4.1对应cuda_tensorflow版本对应cuda_19


tensorflow版本对应cuda tensorflow2.4.1对应cuda_环境变量_20

–> 完成

出现下面这图时,说明编译已经成功完成了。整个编译过程有很多很多的警告(C4819),是因为编译 ANSI 源文件上使用不能表示文件中的所有字符的代码页的系统时,所以出现 C4819。不用理会,不影响结果,只有没有error就没问题。
ps:编译过程中也有可能错误: 无法打开 python37_d.lib, 需要简单修改一下pyconfig.h文件,具体操作:解决办法

tensorflow版本对应cuda tensorflow2.4.1对应cuda_tensorflow_21

tensorflow版本对应cuda tensorflow2.4.1对应cuda_cuda_22