cntk 2.5 win10 vs2017 编译(Cpuonly)

cntk编码风格还是很微软风格的。对于传统老微软程序员来说,研究cntk的代码,应该很有亲切感。

51cto上面有李金洪的两个cntk的讲座,其中一个是免费的。这两个讲座都很有价值。两个讲座各4小时。不管是否研读cntk代码,这个视频都会很有帮助。李的blog:https://blog.csdn.net/lijin6249
李金洪讲座链接:http://edu.51cto.com/center/course/index/search?q=cntk
李金洪还是 《深度学习之Tensorflow 入门、原理与进阶实战》(20180301出版)的作者,这本书同步发行了电子版。

如果仅仅编译遇到问题,直接看第三部分.01, 02部分官网上也有详细说明。

01 基本资料

cntk的资料首选是 github:https://github.com/microsoft/cntk

01.01 安装发行包

  1. github的首页可以直接下载安装包完成安装即可.
    安装包有cpu only,GPU,GPU-1bit-SGD 3个版本,其中GPU-1bit-SGD只可以个人使用,不能商用。
    图 01.01 github安装包

  2. 或者使用python的pip(python2用pip; python3 使用pip3)安装命令,如下是安装cntk2.2时的效果.

D:\git>pip3 install https://cntk.ai/PythonWheel/CPU-Only/cntk-2.2-cp36-cp36m-win_amd64.whl
Collecting cntk==2.2 from https://cntk.ai/PythonWheel/CPU-Only/cntk-2.2-cp36-cp36m-win_amd64.whl
  Downloading https://cntk.ai/PythonWheel/CPU-Only/cntk-2.2-cp36-cp36m-win_amd64.whl (34.5MB)
    100% |████████████████████████████████| 34.5MB 33kB/s
Requirement already satisfied: numpy>=1.11 in c:\python36\lib\site-packages (from cntk==2.2)
Requirement already satisfied: scipy>=0.17 in c:\python36\lib\site-packages (from cntk==2.2)
Installing collected packages: cntk
Successfully installed cntk-2.2
  1. 按照官网完整介绍安装。官网文档很详尽。(即使英文不太好,也不会有太大阅读障碍。)
    https://docs.microsoft.com/en-us/cognitive-toolkit/setup-windows-python

01.02 官网

cntk官网:https://cntk.ai会跳转到
https://docs.microsoft.com/en-us/cognitive-toolkit

windows 下编译安装方法
https://docs.microsoft.com/en-us/cognitive-toolkit/Setup-CNTK-on-Windows

cntk的开发环境配置还是比较繁琐的。好在官网上面介绍的很详细。
windows上面的开发环境,提供了脚本配置方式和手动配置方式说明文档。
建议采用手动方式,会了解的全面些。

图 01.02 开发配置说明

02 开发环境配置步骤:

cntk的代码下载不太稳定,好的时候很快就下载完成,不好的时候需要尝试好多次。
可能是因为git库太大的原因,单纯的cntk2.5 git仓库,688MB。
看运气。多试试,总会成功的。

  1. 安装 VC2017
    需要VC++2017 version 15.4 v14.11 toolset. (最新的是15.6.开发工具尽量更新到最新)
  2. 安装git
    等等
  3. 下载源码
c: && md \repos && cd \repos
git clone https://github.com/Microsoft/cntk
cd cntk
# # 这个Multiverso只对个人免费,在初次研究代码时,可以忽略
# git submodule update --init Source/Multiverso

注意:
如果不使用Multiverso,需要设置环境变量
setx CNTK_ENABLE_ASGD false
下面所有涉及到 setx 之类的设置,在系统环境变量里手动创建环境变量即可。
如上面的说明需要创建CNTK_ENABLE_ASGD环境变量,并把值设置为false。
而所有有dir说明的,是需要在环境变量PATH中添加路径,dir能够正常找到指定内容。如:
dir C:\local\swigwin-3.0.10\swig.exe
需要在PATH环境变量中,添加:C:\local\swigwin-3.0.10;

图 01.02 开发配置说明

  1. KML
    https://github.com/01org/mkl-dnn/releases/download/v0.12/mklml_win_2018.0.1.20171227.zip
    解压后,需要把 mklml.dll 的目录路径加入PATH环境变量中。

如果你不是使用vs2017,而是其它版本的vs,那么需要下载mklml的源码,自己编译对应的版本。下载地址:
https://github.com/intel/mkl-dnn/releases

5.MKL-DNN
下载:https://github.com/01org/mkl-dnn/archive/v0.12.zip
这个是源码,解压后需要自己编译。可以使用cmake命令或cmake-gui编译源码。
编译好之后,需要把编译生成的mkldnn.lib和mkldnn.dll文件放到lib文件夹下,再放到自己创建的MKL_PATH环境变量指定的路径中。并且把源码中的include 内容也拷贝到MKL_PATH指定的路径中。
即说明文档 https://docs.microsoft.com/en-us/cognitive-toolkit/setup-buildmkldnn-vs17 中下面这段脚本完成的内容。

cd cmake cmake .. -G "Visual Studio 15" -DCMAKE_BUILD_TYPE=Release msbuild "Intel(R) MKL-DNN.sln" /t:Rebuild /p:Configuration=Release /m copy ..\include\* c:\local\mklml-mkldnn-0.12\include copy src\Release\*.lib c:\local\mklml-mkldnn-0.12\lib copy src\Release\*.dll c:\local\mklml-mkldnn-0.12\lib

也就是:

%MKL_PATH%\include
%MKL_PATH%\lib\mkldnn.lib
%MKL_PATH%\lib\mkldnn.dll

6.MS-MPI
安装 msmpisdk.msiMSMpiSetup.exe
下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=49926

7.Boost
下载地址:https://sourceforge.net/projects/boost/files/boost-binaries/1.60.0/boost_1_60_0-msvc-14.0-64.exe/download

Boost库比较大(251MB),下载可能不顺利,如果你不能直接下载编译好的库。就直接下载源码,自己编译。更靠谱些.
我就没有下载成功,所以自己现在Boost源码编译的。我使用的是1.65.1。完全没有问题。
注意环境变量 BOOST_INCLUDE_PATH 和 BOOST_LIB_PATH

8.Protobuf
编译好的vs2017的版本。
https://cntk.ai/binarydrop/prerequisites/protobuf/protobuf-3.1.0-vs15.zip
需要指定 PROTOBUF_PATH 环境变量。

如果使用其它vs版本,需要自己下载protobuf的源码编译。
https://github.com/google/protobuf/archive/v3.1.0.zip
https://docs.microsoft.com/en-us/cognitive-toolkit/setup-buildprotobuf-vs17

9.GPU支持。
我只研究Cpu only,没有配置GPU。

10.SWIG
这个还是需要的,尤其你要看一下 java 和python接口怎么实现和处理的就更需要了。
需要设置环境变量SWIG_PATH,并且添加 PATH 路径。
https://sourceforge.net/projects/swig/files/swigwin/
我测试使用的是 swig3.0.12版本。运行正常。

11 OpenCV
需要下载并安装到指定路径。http://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.1.0/opencv-3.1.0.exe/download
并且需要设置环境变量OPENCV_PATH_V31,并添加到PATH中。
使用 dir opencv_world310.dll 命令,可以找到这个文件即可。

也可以自己编译OpenCV。

12 zlib and libzip
下载https://cntk.ai/binarydrop/prerequisites/zip/zlib-vs15.zip
解压并配置好 ZLIB_PATH。并且把 %ZLIB_PATH%\bin;路径添加到 PATH 环境变量中.

13 Python
Python环境,不一定非要使用Anaconda。如果你本机已经配置好vs2017可用的python环境,应该没必要单独再配置Anaconda。
使用Anaconda的好处是可以使用独立的envs,不污染环境,尤其是你还同时使用tensorflow,caffe其它框架时。不至于互相干扰。
如果使用 Anaconda ,可以参考 https://blog.csdn.net/longji/article/details/69257632
或者按照cntk官网介绍的操作。

14 UWP
我没有配置。

15 Java
比较建议配置 Java环境。而且这里只需要配置 JAVA_HOME一个环境变量。

03 编译

03.01 代码切换到稳定版本。

使用 git tag 命令查看,最新tag打到 v2.5。迁出 v2.5到新的本地分支.

git checkout -b b2.5 v2.5
# 查看效果如下:
D:\git\DeepLearning\CNTK>git branch -vv
* b2.5   296ac76f7 Preparing Release 2.5 - update documentation
  master a7453ed07 [origin/master] Merge pull request #3065 from Microsoft/szhao/fixsample

03.02 第一次编译 CNTK.sln

使用vs2017打开 D:\git\DeepLearning\CNTK\CNTK.sln.

CNTK2.5 默认共有 55各项目。

配置管理其中:
选择 Debug_CpuOnly, X64平台, CNTK。

因为没有配置GPU选项,所以 MathCUDA项目加载失败。
因为 CNTK_ENABLE_ASGD=false,所以 Multiversio 项目(不可用).
直接编译,会出现16个错误。如下图:

图 03.01 首次编译cntk2.5

03.03 编译错误问题处理

1 c2220问题。

错误C2220 警告被视为错误 - 没有生成“object”文件    DelayLoadedExtensionsDll opencv\build\include\opencv2\core\mat.hpp 1964
错误 C2220 警告被视为错误 - 没有生成“object”文件 CNTKv2LibraryDll cntk\source\cntkv2librarydll\proto\onnx\defs\activation\defs.cpp 1

通过性修改,DelayLoadedExtensionsDll,CNTKv2LibraryDll项目的
配置 ⇒ c/c++ ⇒ [将警告视为错误]设置为[否]
图 03.02 处理C2220警告

修改后再次编译出现4个错误。

  1. CS0246 和 C3229 问题
    通过性修改,把这2个项目EvalWrapper, CSEvalClientTest,ManagedEvalTests 卸载掉。再次编译即可通过。
    图 03.03 处理CS0246 和 C3229 问题

图 03.04 卸载项目

rebuild结果:
图 03.05 编译成功

04 运行Hello World

  1. 参数设置
    调试 ==> 命令参数: configFile=lr_bs.cntk makeMode=false
    调试 ⇒ 工作目录: $(ProjectDir)..\..\Tutorials\HelloWorld-LogisticRegression

lr_bs.cntk 是 cntk使用的配置文件。使用的是 BrainScrip语言。

图 04.01 参数设置

2.运行结果
models生成在CNTK\Tutorials\HelloWorld-LogisticRegression\Models
LR_reg.dnn 是生成的模型
图 04.02 运行结果

3.BrainScript
BrainScript语言介绍。
https://docs.microsoft.com/en-us/cognitive-toolkit/tutorial/tutorial

猜你喜欢

转载自blog.csdn.net/longji/article/details/79825182