blob: 109131b361eaa159b9b5cced36c7ff1abc0dbb3f [file] [log] [blame] [view]
# Installing MXNet on CentOS
MXNet currently supports Python, R, Julia, and Scala. For users on CentOS with Docker environment, MXNet provides [Docker installation guide](http://mxnet.io/get_started/docker_setup.html). If you do not have a Docker environment set up, follow below-provided step by step instructions.
## Minimum Requirements
Make sure you have the root permission, and `yum` is properly installed. Check it using the following command:
```bash
sudo yum check-update
```
If you don't get an error message, then `yum` is installed.
**To install MXNet on CentOS, you must have the following:**
1. gcc, g++ (4.8 or later)
2. python2, python-numpy, python-pip, clang
3. graphviz, jupyter (pip or yum install)
4. OpenBLAS
5. CUDA for GPU
6. cmake and opencv (do not use yum to install opencv, some shared libs may not be installed)
## Install Dependencies
Make sure your machine is connected to Internet. A few installations need to download (`git clone` or `wget`) some packages from Internet.
### Install Basic Environment
```bash
# Install gcc-4.8/make and other development tools
sudo yum install -y gcc
sudo yum install -y gcc-c++
sudo yum install -y clang
# Install Python, Numpy, pip and set up tools.
sudo yum groupinstall -y "Development Tools"
sudo yum install -y python27 python27-setuptools python27-tools python-pip
sudo yum install -y python27-numpy
# install graphviz, jupyter
sudo pip install graphviz
sudo pip install jupyter
```
### Install OpenBLAS
Note that OpenBLAS can be replaced by other BLAS libs, e.g, Intel MKL.
```bash
# Install OpenBLAS at /usr/local/openblas
git clone https://github.com/xianyi/OpenBLAS
cd OpenBLAS
make -j $(($(nproc) + 1))
sudo make PREFIX=/usr/local install
cd ..
```
### Install CUDA for GPU
Note: Setting up CUDA is optional for MXNet. If you do not have a GPU machine (or if you want to train with CPU), you can skip this section and proceed with installation of OpenCV.
If you plan to build with GPU, you need to set up the environment for CUDA and CUDNN.
First, download and install [CUDA 8 toolkit](https://developer.nvidia.com/cuda-toolkit).
Then download [cudnn 5](https://developer.nvidia.com/cudnn).
Unzip the file and change to the cudnn root directory. Move the header and libraries to your local CUDA Toolkit folder:
```bash
tar xvzf cudnn-8.0-linux-x64-v5.1-ga.tgz
sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include
sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
sudo ldconfig
```
### Install opencv
Note: Setting up opencv is optional but strongly recommended for MXNet, unless you do not want to work on Computer Vision and Image Augmentation. If you are quite sure about that, skip this section and set `USE_OPENCV = 0` in `config.mk`.
The Open Source Computer Vision (OpenCV) library contains programming functions for computer vision and image augmentation. For more information, see [OpenCV](https://en.wikipedia.org/wiki/OpenCV).
```bash
# Install cmake for building opencv
sudo yum install -y cmake
# Install OpenCV at /usr/local/opencv
git clone https://github.com/opencv/opencv
cd opencv
mkdir -p build
cd build
cmake -D BUILD_opencv_gpu=OFF -D WITH_EIGEN=ON -D WITH_TBB=ON -D WITH_CUDA=OFF -D WITH_1394=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make PREFIX=/usr/local install
```
## Install MXNet
### Build MXNet shared library
After installing the dependencies, use the following command to pull the MXNet source code from GitHub.
```bash
# Download MXNet source code to ~/mxnet directory
git clone https://github.com/dmlc/mxnet.git ~/mxnet --recursive
# Move to source code parent directory
cd ~/mxnet
cp make/config.mk .
# Replace this line if you use other BLAS libs
echo "USE_BLAS=openblas" >>config.mk
echo "ADD_CFLAGS += -I/usr/include/openblas" >>config.mk
echo "ADD_LDFLAGS += -lopencv_core -lopencv_imgproc -lopencv_imgcodecs" >>config.mk
```
If building with ```GPU``` support, run below commands to add GPU dependency configurations to `config.mk` file:
```bash
echo "USE_CUDA=1" >>config.mk
echo "USE_CUDA_PATH=/usr/local/cuda" >>config.mk
echo "USE_CUDNN=1" >>config.mk
```
Then build mxnet:
```bash
make -j$(nproc)
```
Executing these commands creates a library called ```libmxnet.so``` in `~/mxnet/lib/`.
### Install MXNet for Python
Next, we install Python interface for MXNet. Assuming you are in `~/mxnet` directory, run below commands.
```bash
# Install MXNet Python package
cd python
sudo python setup.py install
```
Check if MXNet is properly installed.
```bash
# You can change mx.cpu to mx.gpu
python
>>> import mxnet as mx
>>> a = mx.nd.ones((2, 3), mx.cpu())
>>> print ((a * 2).asnumpy())
[[ 2. 2. 2.]
[ 2. 2. 2.]]
```
If you don't get an import error, then MXNet is ready for python.
Note: You can update mxnet for python by repeating this step after re-building `libmxnet.so`.
### Install MXNet for R, Julia and Scala
- [R](http://mxnet.io/get_started/amazonlinux_setup.html#install-the-mxnet-package-for-r)
- [Julia](http://mxnet.io/get_started/amazonlinux_setup.html#install-the-mxnet-package-for-julia)
- [Scala](http://mxnet.io/get_started/amazonlinux_setup.html#install-the-mxnet-package-for-scala)
## Troubleshooting
Here is some information to help you troubleshoot, in case you encounter error messages:
**1. Cannot build opencv from source code**
This may be caused by download failure during building, e.g., `ippicv`.
Prepare some large packages by yourself, then copy them to the right place, e.g, `opencv/3rdparty/ippicv/downloads/linux-808XXXXXXXXX/`.
**2. Link errors when building MXNet**
```bash
/usr/bin/ld: /tmp/ccQ9qruP.o: undefined reference to symbol '_ZN2cv6String10deallocateEv'
/usr/local/lib/libopencv_core.so.3.2: error adding symbols: DSO missing from command line
```
This error occurs when you already have old opencv (e.g, 2.4) installed using `yum` (in `/usr/lib64`). When g++ tries to link opencv libs, it will first find and link old opencv libs in `/usr/lib64`.
Please modify `config.mk` in `mxnet` directory, and add `-L/usr/local/lib` to `ADD_CFLAGS`.
```bash
ADD_CFLAGS += -I/usr/include/openblas -L/usr/local/lib
```
This solution solves this link error, but there are still lots of warnings.
## Next Steps
* [Tutorials](http://mxnet.io/tutorials/index.html)
* [How To](http://mxnet.io/how_to/index.html)
* [Architecture](http://mxnet.io/architecture/index.html)