MXNet 分布式环境部署
1. MxNet 分布式介绍
先忽略吧, 回头在填上去
2. 分布式部署方法
假设有两台主机ip地址分别是 xxx.xxx.xxx.114
和 xxx.xxx.xxx.111
这两台主机的环境如下
ubuntu Server 16.04SLT
python3.6| anaconda3
opencv3
cuda8
cudnn7
2.2 Step1. 搭建MxNet环境
根据文献[^Installing MXNet]以源代码的方式安装MxNet; 注意每台机器生配置的环境需要保持一致;
需要分别在114 和111主机上搭建MxNet环境
MxNet的安装方法有很多,免密码登录只是其中的一种方式. 建议使用源代码的方式去安装, 因为后面需要使用MxMet的源代码里面的文件.
#进入anaconda虚拟环境
source activate base # root
# 下载MxNet1.2.1 源代码
wget https://github.com/apache/incubator-mxnet/releases/download/1.2.1/apache-mxnet-src-1.2.1-incubating.tar.gz
# 解压源代码到目录 ~/source/下面
tar -zvxf apache-mxnet-src-1.2.1-incubating.tar.gz -d ~/source/
# 进入source目录,并编译
cd ~/source/apache-mxnet-src-1.2.1-incubating
# 编译参数解析
# USE_OPENCV=1 代表使用opencv
# USE_CUDA_PATH=/usr/local/cuda 是指定使用的cuda路径
#USE_CUDNN=1是使用cudann
make -j $(nproc) USE_OPENCV=1 USE_BLAS=openblas USE_CUDA=1 USE_CUDA_PATH=/usr/local/cuda USE_CUDNN=1
# 进入源文件的python目录, 编译python接口的MxNet
cd ~/source/apache-mxnet-src-1.2.1-incubating
python setup.py install
等待安装好以后,进如python终端,测试是否可以识别mxnet即可:
import mxnet
print(mxnet.__version__) # 应该可以输出版本 1.2.1
好, 到此为止,MxNet安装完毕;
2.1 Step2. 设置SSH免密码登录
在网上找到一片很靠谱的博客,参考这篇文章即可,不再赘述.
ubuntu开启SSH服务远程登录
2.3 Step3. 搭建分布式的环境
解析:
两台主机免密码互联是分布式之间数据传递的前提,再搭建分布式之前,一定要确保第2步没有问题;
mxNet的分布式运行比较简单,在tools文件夹中的launcher.py是管理分布式下运行的文件的,直接在哪运行该文件的时候添加相应的参数即可;
在安装好MxNet和设置好ssh免密码登录以后就可以使用了, 基本上不需要添加任何设置.
为了说明运行参数,同时为了测试分布式环境,我们将在分布式下运行apache-mxnet-src-1.2.1-incubating/examples/image-classification/train_mnist.py
进入源代码的目录下的tools
文件夹, 找到launcher.py
文件
cd ~/source/apache-mxnet-src-1.2.1-incubating/tools
在此处建立文件名host文件, 并在该文件中输入两台主机的ip地址;
xxx.xx.xxx.111
aaa.aa.aaa.114
ps: 这个名字host可以随意的起的,是为了在运行lanucher的时候让服务器知道在哪里进行分布式运行
运行launch.py
MxNet官方文档中有详细介绍MxNet分布式的使用方式,可以查看官方文档的详细内容[1]
python launch.py -n 2 -H host --launcher ssh `which python` ../example/image-classification/train_mnist.py
# --n 是代表要启动几台host
# -H 是要指定host的ip地址
如果不出任何错误,且train_mnist.py运行成功表明环境搭建成功了.
参考文献
[^Installing MXNet]: Installing MXNet