因为MXNET的scala接口目前不支持windows, 所以在周末做了一个MXNET和Scala的Docker,顺便跑跑看MXNET0.94版本有什么新的东西。这个Docker测试了两天,用起来还不错,于是把制作过程记录下来以备参考。相关的步骤:

1、  安装Docker.  https://www.docker.com/

2、启动Docker, 下载MXNET对应的DOCKER文件。https://hub.docker.com/r/kaixhin/mxnet/

启动Docker的时候会自动创建一个名称为default的虚拟机,并打开一个Docker客户端窗口。在客户端窗口输入命令:
docker pull kaixhin/mxnet

备注:这个不是官方版本,但是比官方版本的Docker文件要新。此外,这个是基于CPU的版本。想要GPU版本请浏览https://hub.docker.com/r/kaixhin

这个Dcoker文件大概有500多M,中国的网络你知道的,要准备好比较快的网络。否则…

 

3、创建共享目录和运行kaixhin/mxnet的容器

启动Docker自带的VirtualBox管理器,为default的虚拟机设置共享目录。例如,我本地的F:\win_folder,共享文件名是win_folder。

 

切换到Docker客户端窗口, 输入命令:

mkdir -p /home/docker/vm_folder
sudo mount -t vboxsf win_folder /home/docker/vm_folder

这两句命令把前面设置的共享目录win_folder和vm_folder挂接在一起。

 

启动容器:

docker run -it -v /home/docker/vm_folder:/container_folder  kaixhin/mxnet bash
这一行命令把共享目录映射到容器里的/container_folder, 并且启动容器。容器启动完后自动切换到mxnet目录下。例如,
root@6ab51b5fcbe9:~/mxnet#
 
4、安装JDK
 
 
首先手工下载jdk linux 64位版本。然后在Dcoker客户端输入:
 
 
sudo mkdir /usr/lib/jvm
 
 
sudo tar zxvf jdk-8u121-linux-x64.tar.gz -C /usr/lib/jvm
 
 
cd /usr/lib/jvm
 
 
ls
 
 
sudo mv jdk1.8.0_121 java
 
 
 
安装vim
sudo apt-get install vim-gtk
 
 
 
sudo vim ~/.bashrc
 
 
加入如下内容
 
 
export JAVA_HOME=/usr/lib/jvm/java
 
 
export JRE_HOME=${JAVA_HOME}/jre 
 
 
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
 
 
export PATH=${JAVA_HOME}/bin:$PATH
 
配置默认JDK版本
 
 
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java/bin/java 300 
 
 
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java/bin/javac 300 
 
 
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/java/bin/jar 300  
 
 
sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/java/bin/javah 300  
 
 
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/java/bin/javap 300
 
然后执行
 
 
sudo update-alternatives --config java
 
 
 
 
5、安装maven
 
 
首先手工下载maven. 然后在Dcoker客户端输入:
 
 
sudo mkdir /usr/lib/maven
 
 
$ sudo tar zxvf apache-maven-3.3.9-bin.tar.gz -C /usr/lib/maven
 
 
$ cd /usr/lib/maven
 
 
$ls
 
 
$ sudo mv apache-maven-3.3.9 maven
 
 
 
 
 
$ sudo vim ~/.bashrc
 
 
在文件末尾追加:
 
 
# set maven environment
 
 
export M2_HOME=/usr/lib/maven/maven
 
 
export PATH=$M2_HOME/bin:$PATH
 
 
export  MAVEN_OPTS="-Xms256m -Xmx512m"
 
 
 
 
 
使环境变量生效
 
 
source ~/.bashrc
 
 
验证maven是否安装成功。
$ mvn –version
6、编译、打包生成支持scala的jar包和so文件
在Docker客户端窗口输入:
cd  /root/mxnet/
 
 
make scalapkg
 
 
这个编译打包的过程时间有些长,因为会从网络下载大概200多M的各种jar包。
这个命令结束后,会生成几个jar包,包括:
mxnet-core_2.11-0.1.2-SNAPSHOT-sources.jar (mxnet java接口源代码包)
mxnet-core_2.11-0.1.2-SNAPSHOT.jar(mxnet java接口包)
mxnet-full_2.11-linux-x86_64-cpu-0.1.2-SNAPSHOT.jar(大而全的编译用的包。里面包含mxnet java实现包和scala包以及slf4j包)
 
7、安装scala
首先下载scala-2.11.8.tgz。 因为Mxnet本身用的就是2.11.8,所以配合着下载这个版本。
在Dcoker客户端输入:
 
 
sudo mkdir /usr/lib/scala
 
 
$ sudo tar xvf scala-2.11.8.tgz -C /usr/lib/scala
 
 
$ cd /usr/lib/scala
 
 
$ls
 
 
 
 
 
$ sudo vim ~/.bashrc
 
 
在最后部分添加
#set scala
export SCALA_HOME=/usr/lib/scala/scala-2.11.8
export PATH=$PATH:${SCALA_HOME}/bin
 
重新生效
source ~/.bashrc
 
测试
scala –version

这样这个docker基本上就配置好了,可以在里面跑用Python,java和scala对mxnet进行调用的程序。

8、对容器提交前面所作的修改。(这步不要忘了)

在Dcoker客户端输入:

exit

docker ps –a

这一行会列出当前的所有容器。例如,

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
6ab51b5fcbe9        mxnet3              "bash"              15 hours ago        Exited (0) 50 seconds ago                       trusting_stonebraker

留意一下你的CONTAINER ID,例如这里的6ab51b5fcbe9 。 下面会以6ab51b5fcbe9这个ID的容器提交修改。输入命令:

docker commit 6ab51b5fcbe9  mxnet

这行命令的意思是把6ab51b5fcbe9这个ID的容器提交并制作一个镜像image, 这个镜像的名字是mxnet。

命令执行完后将生成一个新的image mxnet。 这个mxnet的镜像将保存着我们前面所作的那些改动内容。

使用查看image命令

docker images

将会显示所有的image. 例如,

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mxnet              latest              68c8459ff149        15 hours ago        2.4 GB

 

最后提醒,在下一次启动容器的时候,我们需要从镜像mxnet来启动,而不是原来的kaixhin/mxnet。

启动mxnet容器的命令:

docker run -it -v /home/docker/vm_folder:/container_folder  mxnet bash