前言本系列文章前面部分是对CNTK的基本使用做一些介绍,从本篇文章开始,我们将共同的去研究CNTK的内部实现和一些针对于特殊项目的定制化修改(自定义DataReader等)。 本篇文章所涉及的CNTK开发环境,指的是CNTK代码的实现,而非具使用CNTK进行体深度学习的生产程序开发环境。 做一个广告,笔者认为,机器学习领域中工具的使用比工具的实现更加重要,笔者有计划去针对其他项目做一些使用上的介绍,例如微软提供的Machine Learning Studio以及“牛津计划”等,敬请期待笔者的其他系列文章。 获取CNTK的源代码作为微软的开源项目,微软已经将CNTK的代码放到Github上,下面是地址, 当然可以直接clone下来微软的代码 但是笔者个人建议大家不要直接拉代码而是先fork到自己的账户下后clone自己的CNTK版本库。 笔者建议fork到自己账户下在clone的原因是,CNTK作为一个开源项目,大家是可以共同贡献的代码的。难免在使用中遇到些小bug,顺手修了的同时提交给微软一个pull request。是否突然感觉自己参与了开源社区的建设而感觉略微良好呢? 准备工作CNTK依赖于如下几项内容, 所以需要用户先将其部署好后才可以执行CNTK工具包的编译。CNTK其实包括2个版本,一个是“onlyCPU”的版本,另外一个是使用“GPU”的版本。两者编译工作先前的环境准备不是很相同。 同时作为机器学习领域的微软开源项目,支持多平台将大大丰富其发展空间,CNTK目前支持Windows及Linux,但是笔者目前只有Windows环境,只能以Windows环境举例。下面是所需要的列表:
之前有讲过,CNTK分两个版本,onlyCPU版本和GPU版本。如果只需要编译onlyCPU版本,那些庞大的Nvidia相关的库则可以不用部署。这些Nvida相关的库中,CUDA和CUB都可以随意下载,但是对于cuDNN这个库,正规的获取方式需要申请NVidia Accelerated-Computing的开发账户(申请是免费的,但是需要等几天时间审批下来),当然也应该有其他渠道获取。 Visual Studio 2013Visual Studio 2013 这个就不细说如何获取了。建议更新Update到5。 BoostBoost库CNTK官方给出的指导版本是1.59.0,可以自己下载源码编译,也可以直接下载编译好的。(编译boost库真的需要时间和空间,真的建议直接下载编译好的版本)
Boost库安装后需要设定两个环境变量,BOOST_INCLUDE_PATH和BOOST_LIB_PATH分别用于指定boost库的include目录和lib目录。
ACML/MKLACML是AMD的数学库,MKL是Intel的数学库,两者CNTK都支持,选择一个即可,默认CNTK支持的是ACML,如果使用MKL则需要在编译的时候在Math工程中定义USE_MKL这个宏。 使用ACMLACML需要使用5.3.1以上,切记,一定要下载下载ifort64的windows版本,地址如下:
安装ACML后,需要手动设定环境变量ACML_PATH用于指定ACML的安装位置:
同时如果是Intel CPU并支持FMA3,则建议设置环境变量ACML_FMA=0去避免一些问题。
使用MKLMKL可以通过如下地址获取,再提醒一下使用MKL需要为Math工程定义USE_MKL宏: MS-MPIMS-MPI是一个好东西,他其实是微软HPC高性能计算的一部分,CNTK中通过它来实现多设备多进程的并行计算,借此来体现出CNTK的速度快等优点。详细的介绍请移步下面的站点:
目前CNTK中需要使用的MS-MPI v7下载地址如下:
CUDACUDA ToolkitCNTK中需要使用CUDA来调用GPU对计算进行加速,所以需要部署CUDA,微软给出的指导说明是使用7.0版本的,但是笔者目前使用的是7.5暂时没有遇到什么问题,预计官方也会在未来一段时间升级上去。CUDA请通过如下地址进行下载。 默认安装完成CUDA后,安装包会自动设置环境变量,可以自行检查下是否有如下两条环境变量存在,如果没有请手动添加。
NVidia CUB 1.4.1NVidia CUB这个一定要使用1.4.1版本,笔者尝试使用1.5.x版本但是没有成功过。有关CUB的相关资料可以通过如下链接获取: NVidia CUB 1.4.1可以通过如下地址下载: 下载后解压至一个地方然后设置环境变量CUB_PATH来指向CUB库。
NVidia CUDA Deep Neural Network librarycuDNN是NVidia特殊为深度神经网络所实现的一套算法库,目前主流的深度学习的工具包都或多或少的使用cuDNN来对学习以及训练过程进行加速。如需获取cuDNN,需要注册Nvida Accelerated-Computing的开发账户。cuDNN的官方主页如下: CNTK的wiki上也给出了一个rc版本的下载地址,可以直接下载:
解压后如同CUB一样,需要设定一个环境变量CUDNN_PATH用于指明cuDNN的路径。
编译CNTK在完成上述准备工作后,即可打开工程文件编译CNTK。 编译完成后可在 如果需要从Visual Studio中调试或者
上面的内容是一行,有点长,针对于CNTK中提供的其他Sample,可自行修改路径并执行即可,建议第一次运行的时候使用 至此,CNTK开发环境搭建完成。 已知的问题及解决方案使用CUDA 7.5CNTK工程中,默认配置使用的都是CUDA 7.0版本,如果有一些需要使用CUDA 7.5,则需要手动修改配置文件。需要修改的地方有3点,都是在各个工程的
最后的修改情况可以参考下图: 使用的是cuDNN v4.0 prod版本有些可能使用的是v4.0 prod版本,如果是之前fork过的CNTK工程可能有编译报错的情况,主要因为cuDNN v4.0从rc到prod的改变中,修改了一个函数的原型,增加了几个参数。可以自行pull一下最新的CNTK工程,目前已经能够兼容rc以及prod两者。下面内容是节选的一段有关cuDNN升级的资料和原因。
运行时报错api-ms-win-core-path-l1-1-0.dll缺失CNTK在2016-3-24前的几个版本中,由于混入了一些Win8特有的代码,会导致Win7下提示报错。这种情况下请pull下最新的CNTK工程,确保 总结本文作为CNTK从入门到深入研究的过度,讲解了如何部署CNTK开发环境等内容,读者应该可以正常的编译CNTK并研究其实现方法。笔者将继续的去研究CNTK的实现方法,有计划先从自定义的DataReader入手,希望能够为国内研究深度学习的学生或专家学者提供一些便利。 |
|