# Windows下配置TensorFlow-GPU开发环境经验总结

> 作者：zning（https://ning.ae） · 发布：2019/04/27 20:28 下午 (UTC+8) · 原文：https://zning.me/15563681009626.html

## 先废话一波

开启正文之前，先说一下这篇文章怎么来的。

其实TensorFlow有一个别人提供的服务器在用着，不过最近访问不了了，估计给收回去了吧。另外自己的MacBook Pro也其实有TensorFlow，但是这个MacBook Pro是二手的，3000块钱收的，而这个本子在前任主人那里也得呆了2年左右了，虽然不长但也有点小卡，尤其是硬盘容量实在是……随便放点东西就基本满了，像我除了写代码还有一些多媒体制作的小事会有，这玩意一两个就占硬盘好几个G……于是，综上原因，因为要学习深度学习，对硬件有一定的要求，因此就萌生了配一台PC主机的想法了。

而正巧现在内存暴跌、固态降价、板U价格达到冰点，加上矿难导致的矿主狂出挖矿显卡回本，正好是配置主机的大好光景。于是，正好有配机需求的我整了台机子。

![-w300](media/15563681009626/15563729999462.jpg)

这是最后的机子配置。板U套装是天猫购买，顺便有个天猫给的-100的优惠券用了，因此1779。内存正巧京东299搞促销，直接搞了两条。SSD选择了金士顿，同样有优惠不贵。电源机箱套装340元拿下，因为还有一张-50的优惠券hhh。其他的配件都有了因此没算成本。总共花了3334，比我五年前家里配的那台AMD平台的电脑稍贵三四百——因为多了张显卡——但这可是Wintel平台电脑啊！所以可见现在配的电脑多便宜了。

特别说明下TensorFlow学习需要的硬件，也是本次装机重头戏——显卡。说出来可能没人信：我这是人生之中第一次买显卡（手动斜眼）。由于我没有游戏需求，而且买个显卡不打游戏实在是有点费钱，正巧N卡在之前挖矿火热的时候出了一个P106系列矿卡，对标的是GTX 1060，唯一一个不一样的地方是没有显示输出接口。由于这样的配置，因此这个系列显卡在现在矿难时期卖的特别便宜，从年初的400-500软妹币到现在350-380软妹币就可以拿下了——当然降价最主要原因是因为黄药师要出新毒药了，旧毒药怎么能卖出钱嘛——这卡对于深度学习需求来说十分可以了，深度学习只需要算力，不需要输出呀~输出交给核显就好啦~因此就在咸鱼找了个矿主收了个P106-100——对标的是GTX 1060 6G版。

买这卡有个好处，就是坏掉也不太心疼。要是现在想收个1080ti真的提心吊胆怕遇上矿卡或者水货。这玩意本身虽然是矿卡，但是卖三四百的东西坏掉，比收个几千块钱的东西坏掉要好很多啊，要是有能力或者项目能用得上，多买几个P106插在板子上做多算力机器成本也比单个千元二手货要便宜许多。

好了说了这么多，还是体现了自己没钱的现状……要是有钱早就买RTX 2080ti了……

进入正题。

> 注意：本文首次撰写于2019-04-27，最近修改时间为2019-04-27，请注意相关程序的可用性与安全性。

## 环境准备

### 配置说明

1. 硬件：见上节图。
2. 系统：Windows 10 1903 版本 18362.53

### 软件说明

需要的安装包及管网下载地址如下：

1. Visual Studio 2017。官方地址：[点击访问](https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community&rel=15#)
2. CUDA Toolkit v10.0。官方地址：[点击访问](https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal)
3. cuDNN v7.5.0 (需注册开发者账户)。官方地址：[点击访问](https://developer.nvidia.com/compute/machine-learning/cudnn/secure/v7.5.0.56/prod/10.0_20190219/cudnn-10.0-windows10-x64-v7.5.0.56.zip)
4. Python 3.7.3。官方地址：[点击访问](https://www.python.org/downloads/)
5. Anaconda3 2019.03 (Python 3.7版本)。官方地址：[点击访问](https://repo.anaconda.com/archive/Anaconda3-2019.03-Windows-x86_64.exe)
6. JetBrains PyCharm 2019.1(专业版收费，社区版免费)(选装)。官方地址：[点击访问](https://www.jetbrains.com/pycharm/download/)
7. TensorFlow。通过`pip`命令安装。

> 注意：安装CUDA Toolkit v10.0之前，请务必安装好VS 2017，否则会出现TensorFlow使用时报缺少DLL的错误。
> 当然，有些教程提出只需要装Microsoft Visual C++ 2015/2017/2019 Redistributable Runtime Environment，不需要安装VS系列，但是本人在Windows下测试的情况并不能解决问题。因此还是按照如上软件说明进行了操作。

## 环境配置
### 踩坑小记

其实上一节的软件说明的软件版本是踩过坑的。曾经我用的版本CUDA是10.1，cuDNN是v7.5.1。但是经过各种Google以及Stack Overflow的浏览，截止到2019-04-27 22:35:14，这些个版本的软件无法搭建起可以让TensorFlow运行起来的环境，一直提示缺少DLL。同时我也发现了一个大佬也跟我一样的问题（ 传送门：https://blog.csdn.net/w1573007/article/details/88214099 ），我在其博客也留了个言说明了这个问题。他的博客也分析了可能出现的问题是Anaconda3的包没有进行更新，所以，如果单纯直接从官方下载Python安装相应的包，再打基础扩展包可能不会出现问题，也可能是CUDA10.1所需的依赖并没有更新导致的。

为了供后来人参考，也为了自己记录以防未来重复踩坑，这里小记一下。

### 可用配置

> 注意：以下软件尽可能放在原始路径下，以便调用。同时一定要记得安装路径不要出现中文。

1. **安装Visual Studio 2017**

    现在的VS都开整在线安装了啊……反正我也懒得搜别的离线安装包了，毕竟200+100M双线，网速快不怕在线安装吼吼吼。
    
    安装倒是没有什么注意的，就是记得选择装的组件时选择“通用Windows平台开发”、“.NET桌面开发”、“Python开发”三个选项吧。其中Python开发中Anaconda3可以勾掉不选，自己安装最新版也好。我反正是自己安装的。
    
    ![](media/15563681009626/15563762104597.jpg)

1. **安装CUDA Toolkit v10.0**

    这个也没需要特别注意的，就是安装组件的时候可以将GeForce Experience那个组件勾掉不安装。据网上资料反馈这个是用于游戏体验优化的，由于目前用TensorFlow做深度学习不涉及游戏领域，因此可以不用安装。当然这个因人而异，如果你需要这个组件也可以安装，但是网上反映这个组件其实很鸡肋，游戏体验并没有什么提升……

    安装完成后，界面如图所示（网上用图，我的没截图，正常安装的时候提示的是VS 2017）：
    
    ![](media/15563681009626/15563766910585.jpg)
    
    安装完成后，去PowerShell或者命令提示符执行命令`nvcc -V`验证是否完成安装。
    
    ![批注 2019-04-27 225318](media/15563681009626/%E6%89%B9%E6%B3%A8%202019-04-27%20225318.jpg)

1. **安装cuDNN v7.5.0**

    这玩意与其说是安装，不如说是解压到相应目录……
    
    将下载好的压缩包打开，例如我的是`cudnn-10.0-windows10-x64-v7.5.0.56.zip`，`cuda`文件夹下文件如图所示，然后拖放到安装好的CUDA Toolkit v10.0文件夹下，例如我CUDA Toolkit v10.0的安装路径为`C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0`，就把这文件统统拖进去就好了（如下图）。
    
    ![批注 2019-04-27 230304-w700](media/15563681009626/%E6%89%B9%E6%B3%A8%202019-04-27%20230304.jpg)

1. **安装Python 3.7.3、Anaconda3 2019.03 (Python 3.7版本)和JetBrains PyCharm 2019.1**

    这个没什么可以说的，这仨软件应该是安装里面最简单的东西了吧。Python 3自动会加入系统变量，因此也不用关心什么。PyCharm算是用的比较舒服的Python IDE了，用过IDEA和PHPStorm的都应该能懂。
    
1. 安装后系统设置与程序测试

    1. 检验CUDA与显卡GPU适配工作状况

        这一部操作需要VS 2017来配合，来编译CUDA带的示例应用来检测显卡GPU是否适配。
    
        如果CUDA安装没有出错，在`C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0`或者自选路径下应该会有示例程序的。如图。
    
        ![批注 2019-04-27 231756-w500](media/15563681009626/%E6%89%B9%E6%B3%A8%202019-04-27%20231756.jpg)

    
        选择`Samples_vs2017.sln`工程文件，并用VS 2017打开。载入后进行编译，选择Release x64，在右侧解决方案资源管理器中右键1_Utilities，点击“生成”。

    
        ![-w900](media/15563681009626/15563784354324.jpg)

    
        若此步骤执行时出现出现MSB8020，MSB8036等SDK版本选择的错误，请在菜单栏中打开项目，在点击重新解决方案目标，然后会弹出SDK选择版本，选择对应的SDK版本，点击确定即可。如下图：
    
        ![20171216120744431-w400](media/15563681009626/20171216120744431.png)

    
        ![批注 2019-04-27 232344-w300](media/15563681009626/%E6%89%B9%E6%B3%A8%202019-04-27%20232344.jpg)

    
        稍后生成完成后，去PowerShell或者命令提示符进入`C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\bin\win64\Release`目录，执行`deviceQuery`、`bandwidthTest`两个可执行文件，出现如下图信息，并且两个信息末尾都有`PASS`字样便说明CUDA安装成功。
    
        ![批注 2019-04-25 212439-w500](media/15563681009626/%E6%89%B9%E6%B3%A8%202019-04-25%20212439.jpg)

    
    2. 系统变量配置

        上一步若没问题，可直接配置系统变量即可：

        ```powershell
        CUDA_SDK_PATH = C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0 
        CUDA_LIB_PATH = %CUDA_PATH%\lib\x64 
        UDA_BIN_PATH = %CUDA_PATH%\bin 
        CUDA_SDK_BIN_PATH = %CUDA_SDK_PATH%\bin\win64
        CUDA_SDK_LIB_PATH = %CUDA_SDK_PATH%\common\lib\x64
        ```

2. 安装TensorFlow-GPU

    比较简单，打开Anaconda Powershell Prompt，根据情况先进行环境的建设与部署，例如我的配置是：
    
    ```powershell
    # 建设TensorFlow专用环境
    conda create -n tensorflow python=3.6
    # 切换到TensorFlow专用环境
    conda activate tensorflow
    # 安装tensorflow-gpu稳定版
    pip install tensorflow-gpu
    ```

    安装完成后，进入`python`执行下述代码尝试TensorFlow是否可以正常工作，若正常工作则显示如图：
    
    ```python
    import tensorflow as tf
    hello = tf.constant('Hello, TensorFlow!')
    sess = tf.Session()
    print(sess.run(hello))
    ```
    
    ![批注 2019-04-27 235205-w500](media/15563681009626/%E6%89%B9%E6%B3%A8%202019-04-27%20235205.jpg)
    
    在执行时可以启动`nvidia-smi`来查看TensorFlow是否在GPU中操作：
    
    ![](media/15563681009626/15563805039013.jpg)

## 注意事项

1. 如果上述内容有些无法正常执行，请按照图中情况检查环境变量中`Path`变量的值情况：

    ![批注 2019-04-27 234627-w300](media/15563681009626/%E6%89%B9%E6%B3%A8%202019-04-27%20234627.jpg)

    其中第二个圈加入后，`nvidia-smi`可以以命令在全局的PowerShell或者命令提示符执行了。

1. 上面最后一步安装TensorFlow-GPU的时候没有用`conda`命令安装的原因是之前了解到conda这个东西的资源库有点问题，因此没有选择他安装，直接`pip`安装了。

    当然用它安装也是没问题的，不过我最近碰到的坑是conda会时不时抽风走HTTPS协议失败，最后查明需要安装OpenSSL并配置环境变量。安装地址：https://slproweb.com/products/Win32OpenSSL.html ，选择Win64 OpenSSL的Light版即可。
    
    另外可以切换下conda的国内镜像地址，以便加速访问：
    
    ```powershell
    conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/win-64
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/noarch
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/win-64
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/noarch
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/win-64
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/noarch
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/win-64
    conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/noarch
    conda config --set show_channel_urls yes
    ```
    
    注意，修改后若`conda`命令下载安装工作异常，则需要去用户目录下有个`.condarc`，用编辑器打开后显示示例如下：
    
    ```
    channels:
      - https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
      - defaults
    ssl_verify: true
    show_channel_urls: true
    ```
    
    将`- defaults`删掉保存即可。

## 参考文献

1. [cuda10.1.+cudnn7.5+tensorflow1.13.1+anaconda3-2018-12版本(python 3.7)安装](https://blog.csdn.net/w1573007/article/details/88214099)
2. [Win10 安装Tensorflow-GPU版教程](https://blog.csdn.net/ygjustgo/article/details/78883981)
2. [Visual Studio 2017出现MSB8020，MSB8036等SDK版本选择的错误](https://blog.csdn.net/u012570056/article/details/78819083)
2. [CondaHTTPError: Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available)](https://github.com/conda/conda/issues/6064)
2. [CondaHTTPError: HTTP 000 Connection Failed during conda install with new 2018.12 Anaconda3 Windows install](https://github.com/conda/conda/issues/8046)
