2017年10月6日星期五

这是一份你们需要的Windows版深度学习软件安装指南

选自Github

机器之心编译

参与:蒋思源、刘晓坤

本文从最基本的依赖项开始,依次配置了 VS 2015、Anaconda 4.4.0、CUDA 8.0.61 和 cuDNN v5.1 等基本环境,然后再从 Keras 出发安装 Theano、TensorFlow 和 CNTK 以作为其后端。在完成配置深度学习框架后,本文分别利用这三个框架作为 Keras 后端在 CPU 和 GPU 上训练了一个标准的卷积神经网络,完成该简单的卷积网络也就意味着我们完成了深度学习环境的配置。
  • 从零开始:深度学习软件环境安装指南(Ubuntu)
  • 本文GitHub地址:http://ift.tt/298u3hE

该配置版本最后更新的日期是今年七月,该更新版本允许本地使用 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)上配置深度学习环境所需要的工具和软件包:

  1. Visual Studio 2015 Community Edition Update 3 w. Windows Kit 10.0.10240.0:用于其 C/C++编译器(而不是 IDE)和 SDK,选择该确定的版本是因为 CUDA 8.0.61 所支持的 Windows 编译器。
  2. 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 加速许多线性代数运算。
  3. CUDA 8.0.61 (64-bit):CUDA 是一种由 NVIDIA 推出的通用并行计算架构,该架构使 GPU 能够解决复杂的计算问题,该软件包能提供 GPU 数学库、显卡驱动和 CUDA 编译器等。
  4. cuDNN v5.1 (Jan 20, 2017) for CUDA 8.0:用于加速卷积神经网络的运算。
  5. 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:\toolkits.win),所以在下文只要看到以 e:\toolkits.win 开头的路径,那么我们可能就需要小心不要覆盖或随意更改必要的软件包目录。

  • Visual Studio 2015 Community Edition Update 3 w. Windows Kit 10.0.10240.0
  • 下载地址:http://ift.tt/2yMSrSW

运行下载的软件包以安装 Visual Studio,可能我们还需要做一些额外的配置:

  • 基于我们安装 VS 2015 的地址,需要将 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin 添加到 PATH 中。
  • 定义系统环境变量(sysenv variable)INCLUDE 的值为 C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt
  • 定义系统环境变量(sysenv variable)LIB 的值为 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\ucrt\x64

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:\toolkits.win\anaconda3-4.4.0 或 e:\toolkits.win\anaconda2-4.4.0 为安装 Anaconda 的文件夹名。

  • Python 3.6 版本的 Anaconda 下载地址:http://ift.tt/2ksirRz
  • Python 2.7 版本的 Anaconda 下载地址:http://ift.tt/2yMx5oP

运行安装程序完成安装:

如上,本教程选择了第二个选项,但不一定是最好的。

定义一下变量并更新 PATH:

  • 定义系统环境(sysenv variable)变量 PYTHON_HOME 的值为 e:\toolkits.win\anaconda3-4.4.0
  • 添加 %PYTHON_HOME%, %PYTHON_HOME%\Scripts 和 %PYTHON_HOME%\Library\bin 到 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):http://ift.tt/16kKORC

选择合适的操作系统:

下载安装包:

运行安装包,安装文件到 e:\toolkits.win\cuda-8.0.61 中:

完成安装后,安装包应该创建了一个名为 CUDA_PATH 的系统环境变量(sysenv variable),并且已经添加了%CUDA_PATH%\bin 和 %CUDA_PATH%\libnvvp 到 PATH 中。检查是否真正添加了,若 CUDA 环境变量因为一些原因出错了,那么完成下面两个步骤:

  • 定义名为 CUDA_PATH 的系统环境变量的值为 e:\toolkits.win\cuda-8.0.61
  • 添加%CUDA_PATH%\bin 和 %CUDA_PATH%\libnvvp 到 PATH 中

cuDNN v5.1 (Jan 20, 2017) for CUDA 8.0

根据英伟达官网「cuDNN 为标准的运算如前向和反向卷积、池化、归一化和激活层等提供高度调优的实现」,它是为卷积神经网络和深度学习设计的一款加速方案。

cuDNN 的下载地址:http://ift.tt/29tY9lA

我们需要选择符合 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:\toolkits\cuda-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:/http://ift.tt/2ksiv3L

现在,我们能直接使用 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案例地址:http://ift.tt/2yLWZZO

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%。

原文链接:http://ift.tt/298u3hE

本文为机器之心编译,转载请联系本公众号获得授权。




]]> 原文: http://ift.tt/2ktpl9a
RSS Feed

机器知心

IFTTT

不到10美元、比M&M豆还小:它让谷歌首款AI相机Clips梦想成真

撰文 | 邱陆陆

编辑 | 微胖


10 月 4 日,谷歌在「谷歌制造」(Made by Google)活动上宣布了 8 款全新硬件产品。其中非常引人注目的是 Google Clips 相机,这款不过巴掌大小的产品面向家庭场景,能够自动寻找有价值的瞬间并进行捕捉。


值得一提的是,所有这些机器学习算法都在机器本地运行,最大程度保护了用户的隐私。这可以说是人工智能终端化的一个非常典型的样例,而支持这一切的「智能来源」,是英特尔旗下的 Movidius Myriad 2 VPU 芯片。


比一颗 M&M 豆还小的 Myriad 2 芯片(图为2014年发布的 Myriad 2)


「Google Clips 作为一款智能相机,正代表了 Movidius 团队在开发 Myriad VPU 技术时所梦想的终端设备机上智能。低能耗的智能芯片正在让越来越多以 AI 技术为基础的智能设备走进现实」,原 Movidius CEO、现任英特尔公司副总裁 Remi El-Ouazzane 近日在接受媒体采访时表示。


Google Clips 中涉及的机器学习算法包括:第一,寻找有价值的瞬间、拍摄一个小的包含整个瞬间的片段,并从中选取出「稳定、清晰」的照片,第二,识别照片中的人物、动物、场景。最后,根据用户保留特定照片的动作,学习有哪些元素是重要的,对以后的拍摄进行优化。


Google Clips 产品负责人 Juston Payne 在活动上介绍 Google Clips


由于机器学习算法,尤其是神经网络,对计算能力的极大需求,当前的大部分机器学习应用都需要终端设备能够连接互联网,在本地获取输入后,将数据传输到云端,在云端进行计算和处理并返回到本地输出。这个过程中,传输时间与网络环境密切相关,联网也会大幅缩短的电池寿命,最重要的是,用户的数据隐私很难得到保障。因此,智能算力终端化一直是一个热门的话题。


背靠 Google Cloud、拥有强有力云端计算能力的谷歌也从未放松对终端计算的追求。「(云端与终端)综合的方式是非常有意义的。我们对于两种方式都会审慎地进行投入」,谷歌 CEO Sundar Pichai 在接受媒体采访时表示,「(最终选择哪一种)取决于情境、亟待解决的问题以及以不同的方式部署是否有意义。」


但是,如何能把在几年前还是一台性能超卓的处理器才能完成的运算任务放进小小的终端处理芯片中,同时还要保证能耗不超过设备电池的承受能力,以及成本低廉、让设备的价格可以为大众接受,一直是一个硬件上的难题。


去年 9 月被英特尔收购的 Movidius 就一直致力于解决这个难题。这家公司从 2007 年就开始致力于设计低能耗计算机视觉与深度学习处理芯片。


2010 年,公司与东芝一起开发了专用于处理图像和视频的 Myriad 1,这一动作引起了摩托罗拉先进科技与计划团队(ATAP)的注意,二者在 2012 年正式开始了「Project Pink」,研制用于高性能图像计算的 28 纳米架构,项目在摩托罗拉被谷歌收购后变成了谷歌的「Project Tango」。


2014 年,Movidius 正式发布第二代 Myriad 芯片 Myriad 2 VPU。据介绍,Myriad 2 芯片使用了一种和 Myriad 1 完全不同的架构。新的架构使得 2 代获得比 1 代高 20 倍的运算效能——每秒 3 万亿次浮点运算,功耗不到 0.5 瓦。28 纳米芯片能够同时支持 6 个 60 帧 Full HD 视频内容输入。Remi El-Ouazzane 在接受电话采访时曾表示,这种新型芯片在移动设备上占用的空间仅相当于当前芯片的五分之一,而成本也只是当前芯片的五分之一。事实上,El-Ouazzane 说,这块芯片为移动设备带来的视频运算能力提升,已经达到了单反级别。


当时,这些芯片应当且已经具有足够清晰的消费级产品用途,并以星火燎原之势抢占了不少原属于移动端 GPU 的地盘。


比如,从 15 年起,Movidius 为大疆提供计算机视觉计算解决方案,其产品 Phantom4、Mavic Pro、Phantom4 Pro、Inspire2 等都采用了 Myriad 2 芯片。今年推出的具有手势识别遥控功能的迷你无人机 DJI Spark,也是由 Myriad 2 芯片支持传统几何视觉运算与深度学习运算,从而获得了空间感知与情景感知能力。16 年年底,国内安防巨头海康威视与 Movidius 达成合作协议,海康威视将在新的智能相机中使用 Movidius 的 Myriad 2 视觉处理芯片。


2016 年 1 月,谷歌宣布从 Movidius 公司那里正式获得 Myriad 2 VPU 芯片的授权。Myriad 2 家族包括 MA2150 和 MA2450 芯片以及相关 SDK。这种微型芯片及其 12 个内核,可以实现低功耗、先进的计算机视觉处理。虽然当时谷歌并未透露会在哪种移动设备使用 Myriad 2 芯片,但高层曾暗示 Myriad 2 的低功耗是谷歌决定授权使用这种芯片的一个重要原因。


通过与 Movidius 公司的合作,谷歌「将可以让人工智能技术的应用范围不再局限于数据中心,而是扩大至现实世界,让人们从个人设备上获得机器智能的种种益处。」谷歌负责机器智能的产品总监 Blaise Aguera y Arcas 曾告诉媒体。近日,Arcas 在谈及 Google Clips 时还表示,Movidius 的 VPU 技术让他们在开发 Google Clips 时有能力进行更多的创新。


去年 1 月,Myriad 2 的价格已经低至 10 美元。今年 8 月底,Movidius 发布了 Movidius Myriad X VPU,但 Myriad X 不会取代 Myriad 2,新产品将负责更加高端市场。



据报道,Myriad X 芯片引入了被称之为神经计算引擎(Neural Compute Engine)的新结构,将会在同样功耗条件下提供 Myriad 2 十倍的深度神经网络性能。新芯片旨在使无人机,摄像机,机器人,VR 和 AR 等边缘设备的推理更加迅速,将视觉处理与 AI 功能结合起来,扩展更多设备的应用场景。


]]> 原文: http://ift.tt/2yN9nZV
RSS Feed

机器知心

IFTTT

LangChain 彻底重写:从开源副业到独角兽,一次“核心迁移”干到 12.5 亿估值 -InfoQ 每周精要No.899期

「每周精要」 NO. 899 2025/10/25 头条 HEADLINE LangChain 彻底重写:从开源副业到独角兽,一次"核心迁移"干到 12.5 亿估值 精选 SELECTED 1000 行代码手搓 OpenAI gpt-oss 推理引...