因为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