你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Windows 上设置 CNTK

如果要使用 Visual Studio 2017 从 Windows 上的源代码手动生成 CNTK,此页适用于你。

如果你正在寻找任何其他支持来设置 CNTK 生成环境或在系统上安装 CNTK,则应 改为转到此处

注意

此页面假定你正在尝试生成 CNTK 的主分支。

64 位 OS

CNTK 需要安装 64 位 Windows。 我们在 Windows 8.1、Windows 10 和 Windows Server 2012 R2 及更高版本上测试了生成过程。 其他环境不受正式支持。 有关兼容性问题,请检查 CNTK 生产生成和测试配置

环境变量和组件

在系统上生成 CNTK 需要定义和配置各种环境变量。 有关 CNTK 的 Windows 版本使用的环境变量的概述,可 在此页上找到。 此外,此页面概述了用于生成 CNTK 的必需组件和可选组件 及其默认安装位置。

Visual Studio 2017

安装 Microsoft Visual Studio 2017 for Windows。 可 在此处找到下载链接。

Visual Studio 2017 的社区版本足以生成 CNTK。

在安装过程中,请选择“通用 Windows 平台开发”、“.NET 桌面开发”、“使用 C++ 的桌面开发”和“Python 开发”工作负载:

im1

此外,在各个组件屏幕上,请确保将“VC++ 2017 版本 15.4 v14.11 工具集”和“适用于 UWP 的 Visual C++ 运行时”添加到安装中:

im1

最后,为桌面 C++ 添加“Windows 10 SDK (10.0.16299.0) [x86 和 x64]”:

im1

预先存在的 Visual Studio 2017 安装

你需要在系统上安装适用于桌面 C++ [x86 和 x64] 的“VC++ 2017 版本 15.4 v14.11 工具集”、“适用于 UWP 的 Visual C++ 运行时”和“Windows 10 SDK (10.0.16299.0) ”。 若要检查打开 Windows“控制面板 - 程序 ->> 程序和功能”,并从已安装的程序列表中选择“Visual Studio Community 2017”。 这将再次启动 Visual Studio 安装程序,并允许确保上述组件安装在系统上, (请参阅上图) 。

注意

如果未 VS2017INSTALLDIR 由 Visual Studio 安装程序设置环境变量,请手动设置它。 具体安装目录取决于版本 2017 ( 2017,在本例中) 并提供 Visual Studio (CommunityEnterprise 等) ,具体视以下模式而定: C:\Program Files (x86)\Microsoft Visual Studio\<version>\<offering>

对于 Visual Studio 2017 Enterprise 版本,请运行:

setx VS2017INSTALLDIR "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise"

对于 Visual Studio 2017 社区 版,请运行:

setx VS2017INSTALLDIR "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community"

Git

Git 需要使用 CNTK 代码库。 可以使用以下工具:

在 CNTK GitHub 存储库中登记

此处我们假设你安装了 适用于 Windows 的 Git。 假设使用 Git 安装程序中的默认选项安装 Git, (特别“使用 Windows 命令提示符中的 Git”,并在启用“配置行尾”提示符处选择“签出 Windows 样式,提交 UNIX 样式的行尾”。

c:\repos\cntk 目录中创建 CNTK 源代码的克隆。 如果你更喜欢其他位置,则需要相应地调整命令。

打开标准 Windows 命令行界面并执行这些命令

c: && md \repos && cd \repos
git clone --recursive https://github.com/Microsoft/cntk
cd cntk

这会将标准生成所需的所有源代码都放入系统中。 如果打算修改 CNTK 代码,则应阅读 有关开发和测试的信息。

子模块 Multiverso 用于启用 DataParallelASGD 进行训练。 如果不需要 DataParallelASGD 支持,请添加环境变量CNTK_ENABLE_ASGD并将其值设置为 false。 例如,在 CMD 提示符中运行此操作,然后重新打开 CMD shell () 和 Visual Studio 以选取更改:

setx CNTK_ENABLE_ASGD false

MKL

默认的 CNTK 数学库是 Intel 数学内核库, (Intel MKL) 。 按照 此页面 进行安装

MKL-DNN

  • 下载 MKL-DNN 源,并使用MKL_PATH作为目标路径进行生成。 在 Windows 上设置 MKL-DNN 中检查生成说明

  • 将环境变量 MKL_PATH 设置为目录,例如:

    setx MKL_PATH c:\local\mklml-mkldnn-0.14

MS-MPI

此下载页安装 Microsoft MPI (MS-MPI) 版本 7 (7.0.12437.6) ,只需在页面标题中标记为“版本 7”。 单击“下载”按钮,然后选择这两个msmpisdk.msi按钮。MSMpiSetup.exe

提升

按照以下步骤在系统上安装 Boost 库

  • 下载并安装 Boost 版本 1.60 (需要 msvc-14.0 从 Sourceforge 上的此 下载位置) 二进制文件。
  • 将环境变量 BOOST_INCLUDE_PATH 设置为 Boost 安装,例如:
    setx BOOST_INCLUDE_PATH c:\local\boost_1_60_0-msvc-14.0
  • 将环境变量 BOOST_LIB_PATH 设置为 Boost 库,例如:
    setx BOOST_LIB_PATH c:\local\boost_1_60_0-msvc-14.0\lib64-msvc-14.0
  • 若要将 Boost 测试框架集成到 Visual Studio 中,可以从 Visual Studio 库中安装提升测试的运行程序。

Protobuf

需要为 CNTK 编译的 Protobuf 3.1.0 版本。 可以自行编译此版本,也可以使用本页所述的 (已预编译) protobuf 3.1.0 (预编译版本) 。 如果要在系统上生成 CNTK 的 Protobuf 库,可在此处找到详细信息

此位置下载包含 CNTK 的预编译版本的 Protobuf 的 ZIP 文件

将存档提取到本地磁盘上的文件夹,例如,将 C:\local\protobuf-3.1.0-vs15 指向该位置的环境变量 PROTOBUF_PATH (例如:

    setx PROTOBUF_PATH c:\local\protobuf-3.1.0-vs15

GPU 特定包

本部分概述了需要设置的包,以便 CNTK 利用 NVIDIA GPU。

如果不打算将任何 GPU 与 CNTK 配合使用,并且仅依赖于 CPU,则可以直接跳到 下一个常规部分。 否则,请转到 此页面

设置指向该位置的环境变量 CUDNN_PATH ,例如:

    setx CUDNN_PATH C:\local\cudnn-9.0-v7.0\cuda

设置指向该位置的环境变量 CUB_PATH ,例如:

    setx CUB_PATH c:\local\cub-1.7.4\

可选。 SWIG。

如果要从 Python 利用 CNTK,则需要安装 SWIG。 SWIG 还要求为 C#/.NET 或 Java) 生成 CNTK 评估库 (。

请从此站点下载版本SWIG 3.0.10

将存档提取到本地磁盘上的文件夹,例如,将 C:\local\swigwin-3.0.10 指向该位置的环境变量 SWIG_PATH (例如:

    setx SWIG_PATH C:\local\swigwin-3.0.10

快速安装检查:如果遵循上述说明并使用相同的路径,命令 dir C:\local\swigwin-3.0.10\swig.exe 将成功并显示一个文件。

可选。 OpenCV

CNTK 2.2 要求安装开放源代码计算机视觉 (OpenCV) ,但 CNTK 2.3 是可选的。 按照 此页面 执行进一步步骤。

设置指向 OpenCV 生成文件夹的环境变量 OPENCV_PATH_V31 ,例如

setx OPENCV_PATH_V31 c:\local\Opencv3.1.0\build

快速安装检查:如果遵循上述说明并使用相同的路径,命令 dir C:\local\Opencv3.1.0\build 将成功。

可选。 zlib 和 libzip

如果计划生成 CNTK 映像读取器 ,则需要 zliblibzip 库。

zlib 和 libzip

ZLib 和 LibZip 在源代码中分发,你需要重新编译这些包,也可以使用我们创建的预编译版本,方便你 (本部分所述的) 。 若要自行生成库,可在此处找到详细说明

此位置下载包含 CNTK 的 libzip/zlib 压缩库预编译版本的 ZIP 文件

将存档提取到本地磁盘上的文件夹,例如,将 C:\local\zlib-vs15 指向该位置的环境变量 ZLIB_PATH (例如:

    setx ZLIB_PATH c:\local\zlib-vs15

快速安装检查:如果遵循上述说明并使用相同的路径,命令 dir C:\local\zlib-vs15\bin 将成功并显示几个 DLL。

可选。 Anaconda Python 安装

如果计划使用 Python 支持生成 CNTK,请安装 SWIG (如果尚未这样做)。 此外,还需要一个 Python 环境。 我们将 Anaconda Python 用于默认 Python 安装。

如果没有 Anaconda 安装:安装 Anaconda Python for Windows。 可以遵循安装程序 (InstallationType=JustMe; 中指定的标准配置;AddToPath=No;RegisterPython=No) 。 在下面,我们假定你已将 Python Anaconda3 4.1.1 安装到 C:\local\Anaconda3-4.1.1-Windows-x86_64

可选。 CNTK UWP 生成

注意

CNTK 版本 2.1 中的新增功能。

若要生成适用于 UWP 的 CNTK 评估库,需要遵循 此处所述的其他安装步骤。

CNTK Python 环境

CNTK 支持 Python 2.7、Python 3.5 和 Python 3.6。 建议在 Python 安装中创建专用环境,以便使用 CNTK。 这样,CNTK 和已安装的支持包不会影响任何其他 Python 项目。 我们提供多个文件 (yml-files) 包含所需 Python 包的说明。 包位于 scripts\install\windows CNTK 克隆内的目录中。 请选择与目标 Python 版本匹配的文件。

Python 版本 文件名
Python 2.7 conda-windows-cntk-py27-environment.yml
Python 3.5 conda-windows-cntk-py35-environment.yml
Python 3.6 conda-windows-cntk-py36-environment.yml

例如,我们在名为 cntk-py35的环境中创建 Python 3.5 环境。 如果需要其他环境名称,请相应地调整以下步骤。 如果要创建 Python 2.7 或 Python 3.6 环境,请调整 YML 的名称以匹配要使用的 Python 版本。

下面假定已将 CNTK 源代码从 GitHub 克隆到目录中 c:\repos\cntk

  • 若要创建新的 conda 环境 (,例如 cntk-py35) 并激活它,请从 Windows 命令行界面运行以下命令:
    cd C:\local\Anaconda3-4.1.1-Windows-x86_64\scripts
    conda env create --file c:\repos\cntk\scripts\install\windows\conda-windows-cntk-py35-environment.yml  --name cntk-py35
    activate C:\local\Anaconda3-4.1.1-Windows-x86_64\envs\cntk-py35

如果你有一个环境 (,例如 cntk-py35) 可以使用以下命令使用最新的所需包更新它:

    cd C:\local\Anaconda3-4.1.1-Windows-x86_64\scripts
    conda env update --file c:\repos\cntk\scripts\install\windows\conda-windows-cntk-py35-environment.yml --name cntk-py35
    activate C:\local\Anaconda3-4.1.1-Windows-x86_64\envs\cntk-py35

适用于 Python 的 CNTK 环境变量

在开始生成 CNTK 并生成 CNTK 的 Python 库之前,需要设置/定义环境变量 CNTK_PY.._PATHPYTHONPATH

CNTK_PY.._PATH

为 Python 环境设置生成环境变量 (至少选择一个应用) :

    setx CNTK_PY36_PATH [paths for your Python 3.6 environment]
    setx CNTK_PY35_PATH [paths for your Python 3.5 environment]
    setx CNTK_PY27_PATH [paths for your Python 2.7 environment]

如果到目前为止遵循了安装,这意味着

    setx CNTK_PY35_PATH C:\local\Anaconda3-4.1.1-Windows-x86_64\envs\cntk-py35

The value for the CNTK_PY36_PATH, CNTK_PY35_PATH, or CNTK_PY27_PATH environment variables can be determined by running in conda ..activate cmd.exe [name-or-path-of-your-environment]

PYTHONPATH

PYTHONPATH 设置 Python 将查找要导入的模块的位置的路径。 如果生成 CNTK,则需要将生成过程的输出路径添加到此环境变量。 如果克隆了 CNTK, c:\repos\cntk 则为

    setx PYTHONPATH c:\repos\cntk\bindings\python;%PYTHONPATH%

可选。 Java

若要为 CNTK 评估库生成 Java 绑定,请安装 SWIG 工具 (如果尚未这样做)。 此外,还需要 Java 开发工具包 (JDK) 。 目前我们使用 64 位 JDK 8 (JDK 版本 1.8.0_131) 。

将环境变量JAVA_HOME设置为指向 Java 安装的目录。 以下设置假定已将 JDK 1.8.0_131 安装到 C:\local\jdk1.8.0_131:

    setx JAVA_HOME "c:\local\jdk1.8.0_131"

卸载以前的 CNTK 版本

如果以前在计算机上安装了任何版本的 CNTK Python 包,请先删除 PYTHONPATH 环境变量中的任何 CNTK 相关路径来卸载它。 请执行: echo %PYTHONPATH% 查看其当前值,然后使用 setx 命令设置 PYTHONPATH,以便 CNTK 相关路径消失。 如果这会使 PYTHONPATH 为空,则为空。

执行卸载: pip uninstall cntk


这结束安装部分。 让我们继续构建 CNTK


生成 CNTK

目前,Visual Studio 2017 中的 CUDA 9 与默认 VCTools 之间存在兼容性问题。 CNTK 需要 VCTools 14.11 才能使用 CUDA 9 进行生成。 若要执行该操作:

  • 打开命令提示符
  • call “%VS2017INSTALLDIR%\VC\Auxiliary\Build\vcvarsall.bat” amd64 -vcvars_ver=14.11

这将将 VCTools 设置为 CUDA 9 兼容版本。 从命令提示符处,从 GitHub 启动克隆的 CNTK 项目的根目录中的 CNTK.sln。 如果 CNTK.sln 使用默认 CUDA9 不兼容版本的 VCTools 运行,则会生成错误,例如“1>c:\program files\nvidia gpu computing toolkit\cuda\v9.0\include\crt/host_config.h (133) :致命错误 C1189:#error:-- 不支持的 Microsoft Visual Studio 版本! 仅支持版本 2012、2013、2015 和 2017!

如果只是更改了环境变量和环境变量,则应关闭任何已打开的 Visual Studio 实例,否则更改的环境变量的内容不会反映在 Visual Studio 中。

  • 右键单击解决方案资源管理器中的 CNTK 解决方案并选择Properties
  • 在打开的窗口中,选择 Configuration Properties 并按 Configuration Manager... 按钮
  • 在Configuration Manager选择所需的配置:
    • 调试或发布
    • GPU 或仅限 CPU。 仅 CPU 配置显式命名。 所有其他配置都意味着 GPU 使用率 (即 Release 意味着 发布。已启用 GPU 的模式)
    • 如果尚未安装 GPU 配置所需的组件,应始终选择仅 CPU 配置

生成 CNTK 解决方案。 生成过程创建的组件取决于安装的先决条件,有关详细信息,应查阅详细描述 Windows 环境变量 的页面。

如果生成 Python 模块,请注意:

  • Python 模块仅在配置中创建Release
  • 这将在bindings\python\cntk内部生成 CNTK Python 模块,并在生成输出 (文件夹的子文件夹中Python生成包 (.whl) ,例如 x64\Release\Python ,)
  • 请确保路径包括生成输出文件夹 (,例如 x64\Release ,) , PYTHONPATH 以及包含 bindings\python 目录。 这与 Pip 包安装所示的设置相反,此处我们将从 CNTK 存储库克隆加载 CNTK 模块,而不是作为 Python 环境中安装的包,因此设置 PYTHONPATH也有所不同。

CNTK 生成功能测试

若要确保 CNTK 在系统中正常工作,可以从 Hello World - 逻辑回归教程快速运行示例。 此示例训练一个简单的网络,并可以定向到使用 CPU 或 GPU,这有助于快速确保 CNTK 正常运行。

下面我们假设 CNTK 存储库克隆到 c:\repos\cntkbuild\x64\release (Release) 内部版本并用作子目录。

  • 打开命令提示符
  • 使用下面的第一个命令 () 并更改为 Tutorials\HelloWorld-LogisticRegression 目录,通过环境变量或命令提示符会话提供 CNTK 二进制文件的路径:
set PATH=C:\repos\cntk\x64\release;%PATH%
cd C:\repos\cntk\Tutorials\HelloWorld-LogisticRegression

首先尝试示例:

cntk configFile=lr_bs.cntk makeMode=false

如果示例运行,即如果没有错误消息,则首先会收到与读取配置相关的输出,然后是实际网络训练的输出。

使用 GPU 尝试 CNTK

如果为 GPU 使用情况生成 CNTK,请尝试通过执行以下命令使用 GPU:

cntk configFile=lr_bs.cntk makeMode=false deviceId=auto

在输出的开头附近,应会看到一行确认使用了 GPU:

Model has 9 nodes. Using GPU 0.

请注意,GPU ID 可能有所不同。 该 deviceId 参数定义要用于计算的处理器。

  • deviceId=-1 表示使用 CPU。 默认值
  • deviceId=X 其中 X 是整数 >=0 表示使用 GPU X,即 deviceId=0 表示 GPU 0 等。
  • deviceId=auto 表示使用 GPU,自动选择 GPU

尝试 CNTK Python API

我们假设你通过 安装脚本手动创建 CNTK Python 环境 (。 打开命令提示符并激活 CNTK Python 环境,例如,通过执行

activate cntk-py35

作为快速测试更改为 Tutorials\NumpyInterop 文件夹并运行 python FeedForwardNet.py。 训练后,应会看到如下所示的输出:

Finished Epoch [1]: loss = 0.297748 * 25600 2.383s (10742.8 samples per second)
 error rate on an unseen minibatch 0.040000

在 Visual Studio 中调试 CNTK 源代码

  • 如果要使用 Python 工具、CNTK 和 Visual Studio,请参阅 此处
  • 若要使用 Visual Studio 在 CNTK 中调试 BrainScript,请执行以下步骤。

参与 CNTK 代码

如果计划修改代码,则应阅读 有关开发和测试的信息。