使用cmake编译支持分布式的mxnet1.7.0

前言:

  为了使mxnet支持分布式,需要对源码进行改动,然后重新编译。

  环境:linux ,python3.7.3

准备:

首先下载mxnet源码

方法1:直接输入命令:

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

   但git下载的属实太慢,迫不得已我选择了第二种方法。

方法2:到到官方github手动下载源码,笔者使用的是最新版1.7.0

   mxnet源码:https://github.com/apache/incubator-mxnet/releases/tag/1.7.0  

   这种方法也有一个问题就是,手动下载的源码里不包括第三方依赖库,也就是说在3rdparty下的文件夹都是空的

   所以必须自己再手动去把所有3rdparty的依赖库下载下来。。

编译安装mxnet

# 安装必备工具包
sudo apt-get update
sudo apt-get install -y build-essential git ninja-build ccache

# 安装数学库
sudo apt-get install -y libopenblas-dev

# 安装opencv,mxnet使用opencv加载图片和对图片进行增强
sudo apt-get install -y libopencv-dev

修改cmake文件

cp config/linux.cmake config.cmake
# 在config.cmake里的修改为
# set(USE_DIST_KVSTORE ON CACHE BOOL "Build with DIST_KVSTORE support")  
# 这样编译后的mxnet就# 可以支持分布式了

新建build文件夹,开始编译


mkdir build; cd build
cmake ..
cmake --build . --parallel 8
#编译过程较久,且会出现很多错误,不过大多都是缺少依赖包的错误,依次装上就好,看不懂报错就百度谷歌
#每个人的报错都不太一样,取决于每个人的系统环境
#这个过程顺利的话大概一小时

编译成功后 再输入make install

# 进入python目录
cd python
python setup.py install
# 若想安装到python3,则执行python3 setup.py install
# conda中的某个环境中,则先激活该环境,然后执行python setup.py install

最后将之前编译生成的.so 和 .a文件(在build下)拷贝到库目录下

cp build/*.so /usr/local/lib/python3.7/dist-packages/mxnet-1.7.0-py3.7.egg/mxnet/
cp build/*.a /usr/local/lib/python3.7/dist-packages/mxnet-1.7.0-py3.7.egg/mxnet/

  理论上到了这一步 就可以使用mxnet了

但如果像我比较倒霉的话,会有python找不到mxnet模块的错误。原因是python搜索模块的路径没有包括刚刚安装的mxnet。

解决的方法:在site-packages目录下新建文件:mypkpth.pth  然后把mxnet的路径写进去 如我的路径是/usr/local/lib/python3.7/dist-packages/mxnet-1.7.0-py3.7.egg

最后

   测试一下成果:

import mxnet as mx

kv = mx.kv.create('local')  # create a local kv store.
shape = (2, 3)
kv.init(3, mx.nd.ones(shape) * 2)
a = mx.nd.zeros(shape)
kv.pull(3, out=a)
print(a.asnumpy())
kv.push(3, mx.nd.ones(shape) * 8)
kv.pull(3, out=a)  # pull out the value
print(a.asnumpy())

如果运行后有输出没报错的话,就算成功了!

参考:https://blog.csdn.net/liuholysun/article/details/90401441

           https://zhuanlan.zhihu.com/p/245078233

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页