This blog shows how I built the MXNet deep learning framework in a docker container. If you follow this guide, you should be able to build your own. You can find the Dockerfile I created at the end of this post.
Since I’m building a GPU-enabled MXNet, the following pre-requisites are needed:
- NVIDIA GPU (with support for
Compute Capability >= 2.0)
To create a docker container, you start with a base image. For this case, I chose the
as the base image. This images container CUDA 7.5 as well as cuDNN v4. Since we are building a container on top of that,
we’ll run a container in interactive mode with the following command:
$ nvidia-docker run -ti --name mxnet nvidia/cuda:7.5-cudnn4-devel /bin/bash
This will create a container named mxnet and run a bash shell inside. Now let’s follow MXNet’s documentation to build MXNet. First, we need to install the dependencies for MXNet, run the following command:
$ apt-get update $ apt-get install -y build-essential git libatlas-base-dev libopencv-dev
After the dependencies are installed, we can clone the MXNet repository and build it. Last thing before we build MXNet is to edit
Make a copy in the root directory of MXNet, and add your corresponding CUDA path and CUDA support in it. Now run the following command:
$ cd root && git clone --recursive https://github.com/dmlc/mxnet $ cd mxnet && make -j$(nproc)
This will utilize all the available cores according to
nproc to build MXNet.
Adding Python support
Personally, I use Python a lot, so I’ll build the Python support of MXNet. Alternatively, you can also build support for languages like R, Julia and etc. Use the following command to add Python support for MXNet:
$ cd python $ apt-get install -y python-numpy python-setuptools $ python setup.py install
Once we are done, we should test whether the Python support works. Run the following command to test:
$ apt-get install -y wget unzip $ cd .. && python example/image-classification/train_mnist.py --network lenet --gpus 0
unzip utility is used for getting the MNIST dataset and extracting it. The second command trains a LeNet with the MNIST dataset on GPU 0.
If everything works fine, you should see that the network is trained and you should be able to achieve a very high accuracy (close to 100%).
Writing a Dockerfile
Since there are so many steps, why not make a Dockerfile for it? Well, to save you guys’ time, I’ve created a Dockerfile which does the same thing as I described above. It’s available on my Github here.comments powered by Disqus