这是一份你们需要的Windows版深度学习软件安装指南
- 2017-10-06 18:55:00
- 刘大牛 转自文章
- 231
本文从最基本的依赖项开始,依次配置了 VS 2015、Anaconda 4.4.0、CUDA 8.0.61 和 cuDNN v5.1 等基本环境,然后再从 Keras 出发安装 Theano、TensorFlow 和 CNTK 以作为其后端。在完成配置深度学习框架后,本文分别利用这三个框架作为 Keras 后端在 CPU 和 GPU 上训练了一个标准的卷积神经网络,完成该简单的卷积网络也就意味着我们完成了深度学习环境的配置。
- 从零开始:深度学习软件环境安装指南(Ubuntu): https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650731550&idx=1&sn=0ad49b4f74046456d806655b36659ba8&chksm=871b3060b06cb9761b6016c083413d33ec5333fd520deb1264aca45f469f1125d381376cf973&scene=21#wechat_redirect
- 本文GitHub地址: https://github.com/philferriere/dlwin
该配置版本最后更新的日期是今年七月,该更新版本允许本地使用 3 个不同的 GPU 加速后端,并添加对 MKL BLAS 库的支持。
目前有很多帮助我们在 Linux 或 Mac OS 上构建深度学习(DL)环境的指导文章,但很少有文章完整地叙述如何高效地在 Windows 10 上配置深度学习开发环境。此外,很多开发者安装 Windows 和 Ubuntu 双系统或在 Windows 上安装虚拟机以配置深度学习环境,但对于入门者来说,我们更希望还是直接使用 Windows 直接配置深度学习环境。因此,本文作者 Phil Ferriere 在 GitHub 上发布了该教程,他希望能从最基本的环境变量配置开始一步步搭建 Keras 深度学习开发环境。
如果读者希望在 Windows 10 上配置深度学习环境,那么本文将为大家提供很多有利的信息。
依赖项
下面是我们将在 Windows 10(Version 1607 OS Build 14393.222)上配置深度学习环境所需要的工具和软件包:
- Visual Studio 2015 Community Edition Update 3 w. Windows Kit 10.0.10240.0:用于其 C/C++编译器(而不是 IDE)和 SDK,选择该确定的版本是因为 CUDA 8.0.61 所支持的 Windows 编译器。
- Anaconda (64-bit) w. Python 3.6 (Anaconda3-4.4.0) [for Tensorflow support] or Python 2.7 (Anaconda2-4.4.0) [no Tensorflow support] with MKL:Anaconda 是一个开源的 Python 发行版本,其包含了 conda、Python、NumPy、SciPy 等 180 多个科学包及其依赖项,是一个集成开发环境。MKL 可以利用 CPU 加速许多线性代数运算。
- CUDA 8.0.61 (64-bit):CUDA 是一种由 NVIDIA 推出的通用并行计算架构,该架构使 GPU 能够解决复杂的计算问题,该软件包能提供 GPU 数学库、显卡驱动和 CUDA 编译器等。
- cuDNN v5.1 (Jan 20, 2017) for CUDA 8.0:用于加速卷积神经网络的运算。
- Keras 2.0.5 with three different backends: Theano 0.9.0, Tensorflow-gpu 1.2.0, and CNTK 2.0:Keras 以 Theano、Tensorflow 或 CNTK 等框架为后端,并提供深度学习高级 API。使用不同的后端在张量数学计算等方面会有不同的效果。
硬件
- Dell Precision T7900, 64GB RAM:Intel Xeon E5-2630 v4 @ 2.20 GHz (1 processor, 10 cores total, 20 logical processors)
- NVIDIA GeForce Titan X, 12GB RAM:Driver version: 372.90 / Win 10 64
安装步骤
我们可能喜欢让所有的工具包和软件包在一个根目录下(如 e:oolkits.win),所以在下文只要看到以 e:oolkits.win 开头的路径,那么我们可能就需要小心不要覆盖或随意更改必要的软件包目录。
- Visual Studio 2015 Community Edition Update 3 w. Windows Kit 10.0.10240.0
- 下载地址: https://www.visualstudio.com/vs/older-downloads
运行下载的软件包以安装 Visual Studio,可能我们还需要做一些额外的配置:
- 基于我们安装 VS 2015 的地址,需要将 C:Program Files (x86)Microsoft Visual Studio 14.0VCin 添加到 PATH 中。
- 定义系统环境变量(sysenv variable)INCLUDE 的值为 C:Program Files (x86)Windows Kits10Include10.0.10240.0ucrt
- 定义系统环境变量(sysenv variable)LIB 的值为 C:Program Files (x86)Windows Kits10Lib10.0.10240.0umx64;C:Program Files (x86)Windows Kits10Lib10.0.10240.0ucrtx64
Anaconda 4.4.0 (64-bit) (Python 3.6 TF support / Python 2.7 no TF support))
本教程最初使用的是 Python 2.7,而随着 TensorFlow 可作为 Keras 的后端,我们决定使用 Python 3.6 作为默认配置。因此,根据我们配置的偏好,可以设置 e:oolkits.winanaconda3-4.4.0 或 e:oolkits.winanaconda2-4.4.0 为安装 Anaconda 的文件夹名。
- Python 3.6 版本的 Anaconda 下载地址: https://repo.continuum.io/archive/Anaconda3-4.4.0-Windows-x86_64.exe
- Python 2.7 版本的 Anaconda 下载地址: https://repo.continuum.io/archive/Anaconda2-4.4.0-Windows-x86_64.exe
运行安装程序完成安装:
如上,本教程选择了第二个选项,但不一定是最好的。
定义一下变量并更新 PATH:
- 定义系统环境(sysenv variable)变量 PYTHON_HOME 的值为 e:oolkits.winanaconda3-4.4.0
- 添加 %PYTHON_HOME%, %PYTHON_HOME%Scripts 和 %PYTHON_HOME%Libraryin 到 PATH 中
创建 dlwin36 conda 环境
在安装 Anaconda 后,打开 Windows 命令窗口并执行:
如上所示,使用 active dlwin36 命令激活这个新的环境。如果已经有了旧的 dlwin36 环境,可以先用 conda env remove -n dlwin36 命令删除。既然打算使用 GPU,为什么还要安装 CPU 优化的线性代数库如 MKL 呢?在我们的设置中,大多数深度学习都是由 GPU 承担的,这并没错,但 CPU 也不是无所事事。基于图像的 Kaggle 竞赛一个重要部分是数据增强。如此看来,数据增强是通过转换原始训练样本(利用图像处理算子)获得额外输入样本(即更多的训练图像)的过程。基本的转换比如下采样和均值归 0 的归一化也是必需的。如果你觉得这样太冒险,可以试试额外的预处理增强(噪声消除、直方图均化等等)。当然也可以用 GPU 处理并把结果保存到文件中。然而在实践过程中,这些计算通常都是在 CPU 上平行执行的,而 GPU 正忙于学习深度神经网络的权重,况且增强数据是用完即弃的。因此,我们强烈推荐安装 MKL,而 Theanos 用 BLAS 库更好。
CUDA 8.0.61 (64-bit)
从英伟达网站下载 CUDA 8.0 (64-bit): https://developer.nvidia.com/cuda-downloads
选择合适的操作系统:
下载安装包:
运行安装包,安装文件到 e:oolkits.wincuda-8.0.61 中:
完成安装后,安装包应该创建了一个名为 CUDA_PATH 的系统环境变量(sysenv variable),并且已经添加了%CUDA_PATH%in 和 %CUDA_PATH%libnvvp 到 PATH 中。检查是否真正添加了,若 CUDA 环境变量因为一些原因出错了,那么完成下面两个步骤:
- 定义名为 CUDA_PATH 的系统环境变量的值为 e:oolkits.wincuda-8.0.61
- 添加%CUDA_PATH%in 和 %CUDA_PATH%libnvvp 到 PATH 中
cuDNN v5.1 (Jan 20, 2017) for CUDA 8.0
根据英伟达官网「cuDNN 为标准的运算如前向和反向卷积、池化、归一化和激活层等提供高度调优的实现」,它是为卷积神经网络和深度学习设计的一款加速方案。
cuDNN 的下载地址: https://developer.nvidia.com/rdp/cudnn-download
我们需要选择符合 CUDA 版本和 Window 10 编译器的 cuDNN 软件包,一般来说,cuDNN 5.1 可以支持 CUDA 8.0 和 Windows 10。
下载的 ZIP 文件包含三个目录(bin、include、lib),抽取这三个的文件夹到%CUDA_PATH% 中。
安装 Keras 2.0.5 和 Theano0.9.0 与 libgpuarray
运行以下命令安装 libgpuarray 0.6.2,即 Theano 0.9.0 唯一的稳定版:
输入以下命令安装 Keras 和 Theano:
安装 CNTK 2.0 后端
根据 CNTK 安装文档,我们可以使用以下 pip 命令行安装 CNTK:
该安装将导致在 conda 环境目录下额外安装 CUDA 和 cuDNN DLLs:
这个问题并不是因为浪费硬盘空间,而是安装的 cuDNN 版本和我们安装在 c:oolkitscuda-8.0.61 下的 cuDNN 版本不同,因为在 conda 环境目录下的 DLL 将首先加载,所以我们需要这些 DLL 移除出%PATH% 目录:
安装 TensorFlow-GPU 1.2.0 后端
运行以下命令行使用 pip 安装 TensorFlow:
使用 conda 检查安装的软件包
完成以上安装和配置后,我们应该在 dlwin36 conda 环境中看到以下软件包列表:
为了快速检查上述三个后端安装的效果,依次运行一下命令行分别检查 Theano、TensorFlow 和 CNTK 导入情况:
验证 Theano 的安装
因为 Theano 是安装 Keras 时自动安装的,为了快速地在 CPU 模式、GPU 模式和带 cuDNN 的 GPU 模式之间转换,我们需要创建以下三个系统环境变量(sysenv variable):
- 系统环境变量 THEANO_FLAGS_CPU 的值定义为:floatX=float32,device=cpu
- 系统环境变量 THEANO_FLAGS_GPU 的值定义为:floatX=float32,device=cuda0,dnn.enabled=False,gpuarray.preallocate=0.8
- 系统环境变量 THEANO_FLAGS_GPU_DNN 的值定义为:floatX=float32,device=cuda0,optimizer_including=cudnn,gpuarray.preallocate=0.8,dnn.conv.algo_bwd_filter=deterministic,dnn.conv.algo_bwd_data=deterministic,dnn.include_path=e:/toolkits.win/cuda-8.0.61/include,dnn.library_path=e:/toolkits.win/cuda-8.0.61/lib/x64
现在,我们能直接使用 THEANO_FLAGS_CPU、THEANO_FLAGS_GPU 或 THEANO_FLAGS_GPU_DNN 直接设置 Theano 使用 CPU、GPU 还是 GPU+cuDNN。我们可以使用以下命令行验证这些变量是否成功加入环境中:
更多具体的 Theano 验证代码与命令请查看原文。
检查系统环境变量
现在,不论 dlwin36 conda 环境什么时候激活,PATH 环境变量应该需要看起来如下面列表一样:
使用 Keras 验证 GPU+cuDNN 的安装
我们可以使用 Keras 在 MNIST 数据集上训练简单的卷积神经网络(convnet)而验证 GPU 的 cuDNN 是否正确安装,该文件名为 mnist_cnn.py,其可以在 Keras 案例中找到。该卷积神经网络的代码如下:
Keras案例地址: https://github.com/fchollet/keras/blob/2.0.5/examples/mnist_cnn.py
1. 使用带 Theano 后端的 Keras
为了有一个能进行对比的基线模型,首先我们使用 Theano 后端和 CPU 训练简单的卷积神经网络:
我们现在使用以下命令行利用带 Theano 的后端的 Keras 在 GPU 和 cuDNN 环境下训练卷积神经网络:
我们看到每一个 Epoch 的训练时间只需要 16 秒,相对于使用 CPU 要 250 秒左右取得了很大的提高(在同一个批量大小的情况下)。
2. 使用 TensorFlow 后端的 Keras
为了激活和测试 TensorFlow 后端,我们需要使用以下命令行:
我们看到使用 TensorFlow 后端要比 Theano 后端在该任务上快 3 倍左右,它们都是用了 GPU 和 cuDNN 加速。这可能是因为在该测试中它们有相同的通道等级(channel ordering),但实际上两个平台在这一点是不一样的。因此,程序可能强制 Theano 后端重新排序数据而造成性能上的差异。但在该案例下,TensorFlow 在 GPU 上的负载一直没有超过 70%。
3. 使用 CNTK 后端的 Keras
为了激活和测试 CNTK 后算,我们需要使用以下命令行:
在具体的试验中,CNTK 同样也十分快速,并且 GPU 负载达到了 80%。
联系人: | 透明七彩巨人 |
---|---|
Email: | weok168@gmail.com |