build.sh 4.1 KB
Newer Older
Z
zhangjinchao01 已提交
1 2 3 4 5 6 7 8 9
#!/bin/bash

function abort(){
    echo "An error occurred. Exiting..." 1>&2
    exit 1
}

trap 'abort' 0
set -e
Y
yi.wu 已提交
10 11 12 13 14 15 16 17 18
mkdir -p /paddle/dist/cpu
mkdir -p /paddle/dist/gpu
mkdir -p /paddle/dist/cpu-noavx
mkdir -p /paddle/dist/gpu-noavx
# Set BASE_IMAGE and DEB_PATH according to env variables
if [ ${WITH_GPU} == "ON" ]; then
  BASE_IMAGE="nvidia/cuda:7.5-cudnn5-runtime-ubuntu14.04"
  if [ ${WITH_AVX} == "ON" ]; then
    DEB_PATH="dist/gpu/"
Y
yi.wu 已提交
19
    DOCKER_SUFFIX="gpu"
Y
yi.wu 已提交
20 21
  else
    DEB_PATH="dist/gpu-noavx/"
Y
yi.wu 已提交
22
    DOCKER_SUFFIX="gpu-noavx"
Y
yi.wu 已提交
23 24 25 26 27
  fi
else
  BASE_IMAGE="python:2.7.13-slim"
  if [ ${WITH_AVX} == "ON" ]; then
    DEB_PATH="dist/cpu/"
28
    DOCKER_SUFFIX="cpu"
Y
yi.wu 已提交
29 30
  else
    DEB_PATH="dist/cpu-noavx/"
Y
yi.wu 已提交
31
    DOCKER_SUFFIX="noavx"
Y
yi.wu 已提交
32 33
  fi
fi
34 35 36
# If Dockerfile.* sets BUILD_AND_INSTALL to 'ON', it would have copied
# source tree to /paddle, and this scripts should build it into
# /paddle/build.
L
liaogang 已提交
37
if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then
38 39 40 41 42
    if [[ ${WITH_GPU:-OFF} == 'ON' ]]; then
	ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so /usr/lib/libcudnn.so
    fi

    mkdir -p /paddle/build # -p means no error if exists
43
    cd /paddle/build
L
liaogang 已提交
44
    # clean local cmake and third_party cache
45 46 47
    if [ ${DELETE_BUILD_CACHE} == 'ON' ]; then
      rm -rf * && rm -rf ../third_party
    fi
48
    cmake .. \
L
liaogang 已提交
49
	  -DWITH_DOC=${WITH_DOC:-OFF} \
50 51 52 53 54 55 56 57
	  -DWITH_GPU=${WITH_GPU:-OFF} \
	  -DWITH_AVX=${WITH_AVX:-OFF} \
	  -DWITH_SWIG_PY=ON \
	  -DCUDNN_ROOT=/usr/ \
	  -DWITH_STYLE_CHECK=OFF \
	  -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
    make -j `nproc`
    make install
Y
yi.wu 已提交
58 59
    # generate deb package for current build
    # FIXME(typhoonzero): should we remove paddle/scripts/deb ?
60 61 62
    # FIXME: CPACK_DEBIAN_PACKAGE_DEPENDS removes all dev dependencies, must
    # install them in docker
    cpack -D CPACK_GENERATOR='DEB' -D CPACK_DEBIAN_PACKAGE_DEPENDS="" ..
Y
yi.wu 已提交
63
    mv /paddle/build/*.deb /paddle/${DEB_PATH}
64

L
liaogang 已提交
65
    if [[ ${BUILD_WOBOQ:-OFF} == 'ON' ]]; then
Y
yi.wu 已提交
66
        apt-get install -y clang-3.8 llvm-3.8 libclang-3.8-dev
L
liaogang 已提交
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
        # Install woboq_codebrowser.
        git clone https://github.com/woboq/woboq_codebrowser /woboq
        cd /woboq
        cmake -DLLVM_CONFIG_EXECUTABLE=/usr/bin/llvm-config-3.8 \
        -DCMAKE_BUILD_TYPE=Release \
        .
        make

        export WOBOQ_OUT=/usr/share/nginx/html/paddle
        export BUILD_DIR=/paddle/build
        mkdir -p $WOBOQ_OUT
        cp -rv /woboq/data $WOBOQ_OUT/../data
        /woboq/generator/codebrowser_generator \
        -b /paddle/build \
        -a \
        -o $WOBOQ_OUT \
        -p paddle:/paddle
        /woboq/indexgenerator/codebrowser_indexgenerator $WOBOQ_OUT
        cd /woboq
        make clean
    fi

    pip install /usr/local/opt/paddle/share/wheels/py_paddle*linux*.whl
    pip install /usr/local/opt/paddle/share/wheels/paddle*.whl
91
    paddle version
92 93 94 95 96 97

    if [[ ${DOCKER_BUILD:-FALSE} == 'TRUE' ]]; then
	# reduce docker image size
	rm -rf /paddle/build
	rm -rf /usr/local/opt/paddle/share/wheels/
    fi
Z
zhangjinchao01 已提交
98
fi
Y
yuyang18 已提交
99

Y
yi.wu 已提交
100 101 102 103 104 105 106
# generate production docker image Dockerfile
if [ ${USE_MIRROR} ]; then
  MIRROR_UPDATE="sed 's@http:\/\/archive.ubuntu.com\/ubuntu\/@mirror:\/\/mirrors.ubuntu.com\/mirrors.txt@' -i /etc/apt/sources.list && \\"
else
  MIRROR_UPDATE="\\"
fi

Y
yi.wu 已提交
107
cat > /paddle/build/Dockerfile.${DOCKER_SUFFIX} <<EOF
Y
yi.wu 已提交
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
FROM ${BASE_IMAGE}
MAINTAINER PaddlePaddle Authors <paddle-dev@baidu.com>

# ENV variables
ARG WITH_AVX
ARG WITH_DOC
ARG WITH_STYLE_CHECK

ENV WITH_GPU=${WITH_GPU}
ENV WITH_AVX=\${WITH_AVX:-ON}
ENV WITH_DOC=\${WITH_DOC:-OFF}
ENV WITH_STYLE_CHECK=\${WITH_STYLE_CHECK:-OFF}

ENV HOME /root
ENV LANG en_US.UTF-8

# Use Fix locales to en_US.UTF-8

RUN ${MIRROR_UPDATE}
    apt-get update && \
    apt-get install -y libgfortran3 && \
    apt-get clean -y && \
    pip install --upgrade pip && \
131
    pip install -U 'protobuf==3.1.0' requests
Y
yi.wu 已提交
132 133 134 135 136 137 138 139 140 141
RUN pip install numpy
# Use different deb file when building different type of images
ADD \$PWD/${DEB_PATH}*.deb /usr/local/opt/paddle/deb/
RUN dpkg --force-all -i /usr/local/opt/paddle/deb/*.deb && rm -f /usr/local/opt/paddle/deb/*.deb

ENV PATH="/usr/local/opt/paddle/bin/:${PATH}"
# default command shows the paddle version and exit
CMD ["paddle", "version"]
EOF

Z
zhangjinchao01 已提交
142
trap : 0