build.sh 3.9 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/"
Y
yi.wu 已提交
28
    DOCKER_SUFFIX=""
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
L
liaogang 已提交
43 44
    # clean local cmake and third_party cache
    cd /paddle/build && rm -rf * && rm -rf ../third_party
45
    cmake .. \
L
liaogang 已提交
46
	  -DWITH_DOC=${WITH_DOC:-OFF} \
47 48 49 50 51 52 53 54
	  -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 已提交
55 56 57 58
    # generate deb package for current build
    # FIXME(typhoonzero): should we remove paddle/scripts/deb ?
    cpack -D CPACK_GENERATOR='DEB' ..
    mv /paddle/build/*.deb /paddle/${DEB_PATH}
59

L
liaogang 已提交
60
    if [[ ${BUILD_WOBOQ:-OFF} == 'ON' ]]; then
Y
yi.wu 已提交
61
        apt-get install -y clang-3.8 llvm-3.8 libclang-3.8-dev
L
liaogang 已提交
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
        # 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
86
    paddle version
87 88 89 90 91 92

    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 已提交
93
fi
Y
yuyang18 已提交
94

Y
yi.wu 已提交
95 96 97 98 99 100 101
# 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 已提交
102
cat > /paddle/build/Dockerfile.${DOCKER_SUFFIX} <<EOF
Y
yi.wu 已提交
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
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 && \
    pip install -U 'protobuf==3.1.0'
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 已提交
137
trap : 0