文档章节

Win10下编译mxnet分布式版本

q
 qinhui99
发布于 2017/04/20 11:21
字数 792
阅读 232
收藏 1

支持分布式部署和训练是mxnet的亮点。但是,根据个人实验的情况以及github上看到的情况看,编译和部署mxnet分布式版本并不容易。没有详细的文档,也没有开箱即用的分布式版本,只能靠自己编译和部署。下面记录一下个人在win10上编译成功mxnet分布式版本的经验。

 

第一步:我们得先安装好Protobuf和ZMQ。

 

1)       安装ZMQ. (www.zeromq.org)

选择一:下载windows 64位安装版。例如,ZeroMQ-4.0.4~miru1.0-x64.exe。 然后,安装到某目录下。例如,G:\Program Files\ZeroMQ 4.0.4。 我使用这个64位版本来编译mxnet.

 

选择二:下载一个ZMQ源代码,例如zeromq-4.2.1.zip. 解压,然后使用cmake制作vs2013或者VS2015的工程文件。最后编译成64位的release版本。(注意检查编译必须要基于/MT选项,否则后面link的时候会出错)

 

 

2)       安装Protobuf(目前只支持2.5.0版本。2.5以上版本在最后link时都失败了)

https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz

下载完后解压,然后进入protobuf-2.5.0\vsprojects目录下,直接用VS2013或者2015打开项目文件protobuf.sln。这个工程项目很旧,需要做些修改:

1、  把各个子项目编译目标换成64位

2、  把各个子项目编译选项都改成基于/MT选项,否则后面link的时候会出错.

3、  如果编译出现error C3861: “max” 或”min” ,那么需要在相关头文件上加上” #include<algorithm>  ”

 

最后,编译生成64位的Protobuf release版本。

 

第二步:

1)       下载mxnet的源代码。

git clone https://github.com/dmlc/mxnet

 

 

2)       启动cmake图形界面,把mxnet工程的USE_DIST_KVSTORE选项勾上。这个选项会触发两个新的选项:Protobuf和ZMQ.

 

设置Protobuf

把Protobuf_SRC_ROOT_FOLDER 设置成protobuf-2.5.0的目录。例如,G:/mxnet-cpp/protobuf-2.5.0

 

设置ZMQ

把ZMQ_INCLUDE_DIR设置成ZMQ的头文件Include目录。例如,G:/Program Files/ZeroMQ 4.0.4/include

把ZMQ_LIBRARY设置成ZMQ的lib文件绝对路径。例如,G:/Program Files/ZeroMQ 4.0.4/lib/libzmq-v120-mt-4_0_4.lib。注意:libzmq-v120-mt-4_0_4.lib很重要,后面编译生成的libmxnet.dll会去寻找libzmq-v120-mt-4_0_4.dll文件。

 

然后,使用cmake的generate功能生成mxnet的VS项目文件。后面的剩下的编译mxnet和安装的步骤,可以参考我写的另一篇文章:《win10成功安装GPU版MXNET的经历》

根据我的经验,有一个LIBZMQ-V120-MT-4_0_4.DLL文件也需要放到path变量里。否则,调用mxnet可能会报错。

 

第三步:测试。

写段python代码:

import mxnet as mx
kvs = mx.kv.create('dist')

如果报类似下面的DMLC_NUM_SERVER异常就表明已经是分布式版本了。

[11:17:59] G:\mxnet-cpp\mxnet094\mxnet\dmlc-core\include\dmlc/logging.h:300: [11:17:59] G:\mxnet-cpp\mxnet094\mxnet\ps-lite\src\postoffice.cc:18: Check  notnull: Environment::Get()->find("DMLC_NUM_SERVER")

 

后记:在windows平台编译分布式的mxnet版本会有非常多的坑,不是一个好的选择。建议还是在linux或Unix平台上编译。

Mxnet分布式版本相关文档链接:http://mxnet.io/how_to/multi_devices.html

 

© 著作权归作者所有

q
粉丝 66
博文 73
码字总数 34091
作品 0
深圳
程序员
私信 提问
业界 | MXNet开放支持Keras,高效实现CNN与RNN的分布式训练

  选自AWS Machine Learning Blog   作者:Lai Wei、Kalyanee Chendke、Aaron Markham、Sandeep Krishnamurthy   机器之心编译   参与:路、王淑婷      今日 AWS 发布博客宣布 ...

机器之心
2018/05/22
0
0
windows下编译mxnet并使用C++训练模型

版权声明:原创文章如需转载,请在左侧博主描述栏目扫码联系我并取得授权,谢谢 https://blog.csdn.net/u012234115/article/details/80503086 大多数情况下,mxnet都使用python接口进行机器学...

踏莎行hyx
2018/05/29
0
0
Windows10上使用VS2017编译MXNet源码操作步骤(C++)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengbingchun/article/details/84997490 MXNet是一种开源的深度学习框架,核心代码是由C++实现。MXNet官网推荐...

fengbingchun
2018/12/14
0
0
MXNet 宣布支持 Keras 2,可更加方便快捷地实现 CNN 及 RNN 分布式训练

雷锋网(公众号:雷锋网) AI 研习社按,近期,AWS 表示 MXNet 支持 Keras 2,开发者可以使用 Keras-MXNet 更加方便快捷地实现 CNN 及 RNN 分布式训练。AI 研习社将 AWS 官方博文编译如下。 Ke...

孔令双
2018/05/23
0
0
深度学习框架 MXNet 成为 Apache 孵化器项目

MXNet 是一个轻量级、可移植、灵活的分布式深度学习框架,2017 年 1 月 23 日,该项目进入 Apache 基金会,成为 Apache 的孵化器项目。 MXNet 项目由 DMLC(Distributied (Deep) Machine ...

局长
2017/02/06
3.3K
5

没有更多内容

加载失败,请刷新页面

加载更多

JAVA 编写redisUtils工具类,防止高并发获取缓存出现并发问题

import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.core.BoundHashOperations;import org.springframework.data.redis.core.BoundValueOperations;import org.......

huangkejie
22分钟前
3
0
JMM内存模型(一)&volatile关键字的可见性

在说这个之前,我想先说一下计算机的内存模型: CPU在执行的时候,肯定要有数据,而数据在内存中放着呢,这里的内存就是计算机的物理内存,刚开始还好,但是随着技术的发展,CPU处理的速度越...

走向人生巅峰的大路
39分钟前
86
0
你对AJAX认知有多少(2)?

接着昨日内容,我们几天继续探讨ajax的相关知识点 提到ajax下面几个问题又是必须要了解的啦~~~ 8、在浏览器端如何得到服务器端响应的XML数据。 通过XMLHttpRequest对象的responseXMl属性 9、 ...

理性思考
49分钟前
4
0
正则表达式基础(一)

1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转...

清自以敬
52分钟前
4
0
idea中@Data标签getset不起作用

背景:换电脑以后在idea中有@data注解都不生效 解决办法:idea装个插件 https://blog.csdn.net/seapeak007/article/details/72911529...

栾小糖
57分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部