Skip to content

编译安装

yiling-dc edited this page Dec 26, 2018 · 5 revisions

Docker镜像(推荐方式)

XDL的Docker镜像基于ubuntu16.04进行编译安装。镜像中中包含编译XDL所需要的所有系统环境以及编译安装完成的XDL和测试用例代码。用户也可以直接使用我们提供的Docker镜像进行XDL的二次开发。 (注: 由于HADOOP环境配置因人而异,因此在XDL的Docker镜像中我们没有安装配置HADOOP环境,需要的用户请自行安装配置)

XDL Docker系统要求

  1. 宿主机上需要安装docker环境
  2. 如果需要GPU支持,宿主机上需要安装nvidia-docker

下载XDL Docker镜像

XDL官方镜像的tag及描述如下表:

docker镜像 描述
registry.cn-hangzhou.aliyuncs.com/xdl/xdl:ubuntu-cpu-tf1.12 ubuntu16.04 + XDL + tensorflow1.12后端(开启avx2+fma指令优化)
registry.cn-hangzhou.aliyuncs.com/xdl/xdl:ubuntu-cpu-tf1.12-without-avx2-fma ubuntu16.04 + XDL + tensorflow1.12后端(关闭avx2+fma指令优化)
registry.cn-hangzhou.aliyuncs.com/xdl/xdl:ubuntu-gpu-tf1.12 ubuntu16.04 + XDL + tensorflow1.12后端(开启avx2+fma指令优化) + gpu支持(cuda9.0, cudnn7.0)
registry.cn-hangzhou.aliyuncs.com/xdl/xdl:ubuntu-cpu-mxnet1.3 ubuntu16.04 + XDL + mxnet1.3后端
registry.cn-hangzhou.aliyuncs.com/xdl/xdl:ubuntu-gpu-mxnet1.3 ubuntu16.04 + XDL + mxnet1.3后端 + gpu支持(cuda9.0, cudnn7.0)

例如,用户可以执行如下命令将XDL的镜像下载到宿主机上:

sudo docker pull registry.cn-hangzhou.aliyuncs.com/xdl/xdl:ubuntu-cpu-tf1.12

启动XDL镜像

用户可以使用以下命令,来启动一个XDL镜像:

sudo docker run -it registry.cn-hangzhou.aliyuncs.com/xdl/xdl[:tag] [command] 

更多docker的用法,可参考docker使用指南

例如,用户可以使用以下命令,来查看一个CPU版本的XDL镜像:

sudo docker run -it registry.cn-hangzhou.aliyuncs.com/xdl/xdl:ubuntu-cpu-tf1.12 python -c "import xdl; print xdl.__version__"

用户也可以使用以下命令,来查看一个支持GPU的XDL镜像:

sudo nvidia-docker run -it registry.cn-hangzhou.aliyuncs.com/xdl/xdl:ubuntu-gpu-tf1.12 python -c "import xdl; print xdl.__version__"

请注意,上述命令执行后并不能进入docker,只是打印docker环境中安装的xdl版本。请阅读docker使用指南获取如何进入docker的方法,以及如何指定进入目录、如何挂载宿主机上需要使用的目录、如何使用网卡等。

GPU支持

如果用户需要GPU支持,那么我们强烈建议使用支持GPU的XDL镜像。这样,用户只需要在宿主机上安装NVIDIA® GPU drivers

注意:CUDA9.0要求NVIDIA驱动版本高于384.x。

如果用户需要在宿主机上直接获得GPU支持,那么我们推荐用户对以下的软件版本进行安装:

源码编译

这部分内容将指导用户如何在一个纯净的ubuntu 16.04环境中编译安装XDL。

1.安装系统软件

(1) 下载ubuntu 16.04镜像,并以bash session的形式进入镜像:

sudo docker pull ubuntu:16.04
sudo docker run --net=host -it ubuntu:16.04 /bin/bash

系统更新:

apt-get update && apt-get -y upgrade

(2) 安装系统build工具,例如gcc、cmake、jdk、python等: 目前XDL使用seastar作为底层通信库,seastar只能使用GCC 5.3及以上版本编译。同时XDL需要使用GCC 4.8.5 编译CUDA代码来支持GPU,因此需要安装两个版本GCC; XDL使用cmake作为build工具,版本>2.8.0

apt-get install -y build-essential gcc-4.8 g++-4.8 gcc-5 g++-5 cmake python python-pip openjdk-8-jdk wget && pip install --upgrade pip

2.安装依赖库

主要依赖库包括两部分,a) 安装boost b) 安装seastar依赖库

(a) 安装boost(以1.63为例), 必须设置_GLIBCXX_USE_CXX11_ABI=0,否则可能有链接错误

cd /tmp
wget -O boost_1_63_0.tar.gz https://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.tar.gz
tar zxf boost_1_63_0.tar.gz && cd boost_1_63_0
./bootstrap.sh --prefix=/usr/local && ./b2 -j32 variant=release define=_GLIBCXX_USE_CXX11_ABI=0 install
mkdir -p /usr/local/lib64/boost && cp -r /usr/local/lib/libboost* /usr/local/lib64/boost/

(b) 安装其它依赖

apt-get install -y libaio-dev ninja-build ragel libhwloc-dev libnuma-dev libpciaccess-dev libcrypto++-dev libxml2-dev xfslibs-dev libgnutls28-dev liblz4-dev libsctp-dev libprotobuf-dev protobuf-compiler libunwind8-dev systemtap-sdt-dev libjemalloc-dev libtool python3 libjsoncpp-dev

3. 如果是GPU版本,还需安装cuda和cudnn,可以参考Dockerfile,主要步骤如下:

cd /tmp
wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libcudnn7_7.0.5.15-1+cuda9.0_amd64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libcudnn7-dev_7.0.5.15-1+cuda9.0_amd64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libnccl2_2.1.4-1+cuda9.0_amd64.deb
wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1604/x86_64/libnccl-dev_2.1.4-1+cuda9.0_amd64.deb
apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
dpkg -i cuda-repo-ubuntu1604_9.0.176-1_amd64.deb
dpkg -i libcudnn7_7.0.5.15-1+cuda9.0_amd64.deb
dpkg -i libcudnn7-dev_7.0.5.15-1+cuda9.0_amd64.deb
dpkg -i libnccl2_2.1.4-1+cuda9.0_amd64.deb
dpkg -i libnccl-dev_2.1.4-1+cuda9.0_amd64.deb
apt-get clean && apt-get update -y && apt-get -y upgrade
apt-get install -y cuda=9.0.176-1 --fix-missing
apt-get install -y libcudnn7-dev
apt-get install -y libnccl-dev
apt-get update -y && apt-get -y upgrade
rm -rf /tmp/*.deb
echo '/usr/local/nvidia/lib64/' >> /etc/ld.so.conf

4. 安装深度学习后端,目前支持TensorFlow和Mxnet

  • TensorFlow

    • github下载tensorflow-rc1.12源码
    • 按照官方wiki从源码编译,并加上编译选项: --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"
  • 使用Mxnet

    • github下载mxnet1.3源码
    • 按照官方wiki从源码编译,并加上编译选项:USE_CPP_PACKAGE=1
    • XDL使用mxnet C++接口执行后端计算,需要依赖其C++接口,mxnet默认不安装头文件,因此需要手动安装
cp -r incubator-mxnet/cpp-package `python -c "from __future__ import print_function;import mxnet,os; print(os.path.dirname(mxnet.__file__),end='')"`
cp -r incubator-mxnet/include  `python -c "from __future__ import print_function;import mxnet,os; print(os.path.dirname(mxnet.__file__),end='')"`
cp -r incubator-mxnet/3rdparty `python -c "from __future__ import print_function;import mxnet,os; print(os.path.dirname(mxnet.__file__),end='')"`

5. 编译XDL(以TensorFlow作为后端为例)

  • 代码准备
git clone --recursive https://github.com/alibaba/x-deeplearning.git
cd x-deeplearning/xdl
mkdir build && cd build
export CC=/usr/bin/gcc-5 && export CXX=/usr/bin/g++-5
  • 编译CPU版本
cmake .. -DTF_BACKEND=1
make -j32 
# 安装
make install_python_lib
  • 编译GPU版本
cmake .. -DUSE_GPU=1 -DTF_BACKEND=1 -DCUDA_PATH=/usr/local/cuda-9.0 -DNVCC_C_COMPILER=/usr/bin/gcc-4.8
make -j32
# 安装
make install_python_lib
  • 验证安装

在shell中执行一下命令,如果显示1.0表示安装成功

python -c "import xdl; print xdl.__version__"

集群部署