build.sh 8.4 KB
Newer Older
Z
zhangjinchao01 已提交
1 2
#!/bin/bash

T
typhoonzero 已提交
3 4 5 6 7 8 9 10
function cmake_gen() {
    mkdir -p /paddle/build
    cd /paddle/build

    # build script will not fail if *.deb does not exist
    rm *.deb 2>/dev/null || true
    # delete previous built whl packages
    rm -rf /paddle/paddle/dist 2>/dev/null || true
Y
Yi Wang 已提交
11

T
typhoonzero 已提交
12 13 14 15 16 17 18
    # Support build for all python versions, currently
    # including cp27-cp27m and cp27-cp27mu.
    PYTHON_FLAGS=""
    if [ "$1" != "" ]; then
        echo "using python abi: $1"
        if [ "$1" == "cp27-cp27m" ]; then
            export LD_LIBRARY_PATH=/opt/_internal/cpython-2.7.11-ucs2/lib:${LD_LIBRARY_PATH#/opt/_internal/cpython-2.7.11-ucs4/lib:}
Y
Yancey 已提交
19
            export PATH=/opt/python/cp27-cp27m/bin/:${PATH}
T
typhoonzero 已提交
20 21 22 23 24
            PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/opt/python/cp27-cp27m/bin/python
        -DPYTHON_INCLUDE_DIR:PATH=/opt/python/cp27-cp27m/include/python2.7
        -DPYTHON_LIBRARIES:FILEPATH=/opt/_internal/cpython-2.7.11-ucs2/lib/libpython2.7.so"
        elif [ "$1" == "cp27-cp27mu" ]; then
            export LD_LIBRARY_PATH=/opt/_internal/cpython-2.7.11-ucs4/lib:${LD_LIBRARY_PATH#/opt/_internal/cpython-2.7.11-ucs2/lib:}
Y
Yancey 已提交
25
            export PATH=/opt/python/cp27-cp27mu/bin/:${PATH}
T
typhoonzero 已提交
26 27 28 29 30 31
            PYTHON_FLAGS="-DPYTHON_EXECUTABLE:FILEPATH=/opt/python/cp27-cp27mu/bin/python
        -DPYTHON_INCLUDE_DIR:PATH=/opt/python/cp27-cp27mu/include/python2.7
        -DPYTHON_LIBRARIES:FILEPATH=/opt/_internal/cpython-2.7.11-ucs4/lib/libpython2.7.so"
        fi
    fi

T
typhoonzero 已提交
32 33 34
    cat <<EOF
    ========================================
    Configuring cmake in /paddle/build ...
Y
Yancey1989 已提交
35
        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release}
T
typhoonzero 已提交
36
        ${PYTHON_FLAGS}
Y
Yang Yang(Tony) 已提交
37
        -DWITH_DSO=ON
38
        -DWITH_DOC=${WITH_DOC:-OFF}
T
typhoonzero 已提交
39
        -DWITH_GPU=${WITH_GPU:-OFF}
40
        -DWITH_AMD_GPU=${WITH_AMD_GPU:-OFF}
T
typhoonzero 已提交
41
        -DWITH_DISTRIBUTE=${WITH_DISTRIBUTE:-OFF}
42
        -DWITH_MKL=${WITH_MKL:-ON}
T
typhoonzero 已提交
43
        -DWITH_AVX=${WITH_AVX:-OFF}
44
        -DWITH_GOLANG=${WITH_GOLANG:-OFF}
45
        -DCUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All}
T
typhoonzero 已提交
46 47 48 49 50 51 52
        -DWITH_SWIG_PY=ON
        -DWITH_C_API=${WITH_C_API:-OFF}
        -DWITH_PYTHON=${WITH_PYTHON:-ON}
        -DWITH_SWIG_PY=${WITH_SWIG_PY:-ON}
        -DCUDNN_ROOT=/usr/
        -DWITH_STYLE_CHECK=${WITH_STYLE_CHECK:-ON}
        -DWITH_TESTING=${WITH_TESTING:-ON}
53
        -DWITH_FAST_BUNDLE_TEST=ON
S
sabreshao 已提交
54
        -DCMAKE_MODULE_PATH=/opt/rocm/hip/cmake
T
typhoonzero 已提交
55
        -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
56
        -DWITH_FLUID_ONLY=${WITH_FLUID_ONLY:-OFF}
T
typhoonzero 已提交
57
    ========================================
Y
Yi Wang 已提交
58
EOF
T
typhoonzero 已提交
59 60 61 62
    # Disable UNITTEST_USE_VIRTUALENV in docker because
    # docker environment is fully controlled by this script.
    # See /Paddle/CMakeLists.txt, UNITTEST_USE_VIRTUALENV option.
    cmake .. \
Y
Yancey1989 已提交
63
        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE:-Release} \
T
typhoonzero 已提交
64
        ${PYTHON_FLAGS} \
Y
Yang Yang(Tony) 已提交
65
        -DWITH_DSO=ON \
66
        -DWITH_DOC=${WITH_DOC:-OFF} \
T
typhoonzero 已提交
67
        -DWITH_GPU=${WITH_GPU:-OFF} \
68
        -DWITH_AMD_GPU=${WITH_AMD_GPU:-OFF} \
T
typhoonzero 已提交
69
        -DWITH_DISTRIBUTE=${WITH_DISTRIBUTE:-OFF} \
70
        -DWITH_MKL=${WITH_MKL:-ON} \
T
typhoonzero 已提交
71
        -DWITH_AVX=${WITH_AVX:-OFF} \
72
        -DWITH_GOLANG=${WITH_GOLANG:-OFF} \
73
        -DCUDA_ARCH_NAME=${CUDA_ARCH_NAME:-All} \
T
typhoonzero 已提交
74 75 76 77 78 79
        -DWITH_SWIG_PY=${WITH_SWIG_PY:-ON} \
        -DWITH_C_API=${WITH_C_API:-OFF} \
        -DWITH_PYTHON=${WITH_PYTHON:-ON} \
        -DCUDNN_ROOT=/usr/ \
        -DWITH_STYLE_CHECK=${WITH_STYLE_CHECK:-ON} \
        -DWITH_TESTING=${WITH_TESTING:-ON} \
80
        -DWITH_FAST_BUNDLE_TEST=ON \
S
sabreshao 已提交
81
        -DCMAKE_MODULE_PATH=/opt/rocm/hip/cmake \
82
        -DWITH_FLUID_ONLY=${WITH_FLUID_ONLY:-OFF} \
T
typhoonzero 已提交
83 84 85 86
        -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
}

function run_build() {
Y
Yi Wang 已提交
87
    cat <<EOF
T
typhoonzero 已提交
88 89 90
    ============================================
    Building in /paddle/build ...
    ============================================
Y
Yi Wang 已提交
91
EOF
L
Luo Tao 已提交
92
    make clean
T
typhoonzero 已提交
93 94 95 96 97
    make -j `nproc`
}

function run_test() {
    if [ ${WITH_TESTING:-ON} == "ON" ] && [ ${RUN_TEST:-OFF} == "ON" ] ; then
Y
Yi Wang 已提交
98
    cat <<EOF
T
typhoonzero 已提交
99 100 101 102
    ========================================
    Running unit tests ...
    ========================================
EOF
L
Lei Wang 已提交
103
        set +e
T
typhoonzero 已提交
104
        ctest --output-on-failure
L
Lei Wang 已提交
105 106 107 108 109 110
        if [ $? != 0 ]; then
            set -e
            ctest --output-on-failure --rerun-failed
            set +e
        fi
        set -e
T
typhoonzero 已提交
111 112 113
        # make install should also be test when unittest
        make install -j `nproc`
        pip install /usr/local/opt/paddle/share/wheels/*.whl
114 115 116
        if [[ ${WITH_FLUID_ONLY:-OFF} == "OFF" ]] ; then
            paddle version
        fi
T
typhoonzero 已提交
117 118 119 120 121 122 123 124 125 126 127
    fi
}


function gen_docs() {
    if [[ ${WITH_DOC:-OFF} == "ON" ]]; then
        cat <<EOF
    ========================================
    Building documentation ...
    In /paddle/build_doc
    ========================================
Y
Yi Wang 已提交
128
EOF
T
typhoonzero 已提交
129 130 131 132 133 134 135 136
        mkdir -p /paddle/build_doc
        pushd /paddle/build_doc
        cmake .. \
            -DWITH_DOC=ON \
            -DWITH_GPU=OFF \
            -DWITH_AVX=${WITH_AVX:-ON} \
            -DWITH_SWIG_PY=ON \
            -DWITH_STYLE_CHECK=OFF
137

_青葱's avatar
_青葱 已提交
138
        make -j `nproc` paddle_docs paddle_apis
T
typhoonzero 已提交
139 140 141 142 143 144 145 146 147
        popd
    fi


    if [[ ${WOBOQ:-OFF} == 'ON' ]]; then
        cat <<EOF
    ========================================
    Converting C++ source code into HTML ...
    ========================================
Y
Yi Wang 已提交
148
EOF
T
typhoonzero 已提交
149 150 151 152 153 154 155 156 157 158 159
        export WOBOQ_OUT=/paddle/build/woboq_out
        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
    fi
}
Y
Yi Wang 已提交
160

T
typhoonzero 已提交
161 162

function gen_dockerfile() {
T
typhoonzero 已提交
163 164
    # Set BASE_IMAGE according to env variables
    if [[ ${WITH_GPU} == "ON" ]]; then
D
dzhwinter 已提交
165
    BASE_IMAGE="nvidia/cuda:8.0-cudnn7-devel-ubuntu16.04"
T
typhoonzero 已提交
166 167 168 169 170 171 172
    else
    BASE_IMAGE="ubuntu:16.04"
    fi

    DOCKERFILE_GPU_ENV=""
    DOCKERFILE_CUDNN_DSO=""
    if [[ ${WITH_GPU:-OFF} == 'ON' ]]; then
Y
Yancey 已提交
173
        DOCKERFILE_GPU_ENV="ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:\${LD_LIBRARY_PATH}"
G
gongweibao 已提交
174
        DOCKERFILE_CUDNN_DSO="RUN ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so.7 /usr/lib/x86_64-linux-gnu/libcudnn.so"
T
typhoonzero 已提交
175
    fi
T
typhoonzero 已提交
176 177 178 179 180

    cat <<EOF
    ========================================
    Generate /paddle/build/Dockerfile ...
    ========================================
R
reyoung 已提交
181 182
EOF

T
typhoonzero 已提交
183 184 185 186
    cat > /paddle/build/Dockerfile <<EOF
    FROM ${BASE_IMAGE}
    MAINTAINER PaddlePaddle Authors <paddle-dev@baidu.com>
    ENV HOME /root
R
reyoung 已提交
187
EOF
T
typhoonzero 已提交
188 189

    if [[ ${WITH_GPU} == "ON"  ]]; then
Q
QI JUN 已提交
190
        NCCL_DEPS="apt-get install -y libnccl2=2.1.2-1+cuda8.0 libnccl-dev=2.1.2-1+cuda8.0 &&"
T
typhoonzero 已提交
191
    else
Y
Yang Yang(Tony) 已提交
192
        NCCL_DEPS=""
T
typhoonzero 已提交
193 194
    fi

195 196 197 198 199 200 201 202
    if [[ ${WITH_FLUID_ONLY:-OFF} == "OFF" ]]; then
        PADDLE_VERSION="paddle version"
        CMD='"paddle", "version"'
    else
        PADDLE_VERSION="true"
        CMD='"true"'
    fi

T
typhoonzero 已提交
203 204 205 206 207
    cat >> /paddle/build/Dockerfile <<EOF
    ADD python/dist/*.whl /
    # run paddle version to install python packages first
    RUN apt-get update &&\
        ${NCCL_DEPS}\
208
        apt-get install -y wget python-pip dmidecode python-tk && pip install -U pip==9.0.3 && \
T
typhoonzero 已提交
209 210 211
        pip install /*.whl; apt-get install -f -y && \
        apt-get clean -y && \
        rm -f /*.whl && \
212
        ${PADDLE_VERSION} && \
T
typhoonzero 已提交
213 214 215
        ldconfig
    ${DOCKERFILE_CUDNN_DSO}
    ${DOCKERFILE_GPU_ENV}
Y
Yang Yang(Tony) 已提交
216
    ENV NCCL_LAUNCH_MODE PARALLEL
217 218 219 220 221 222 223 224
EOF
    if [[ ${WITH_GOLANG:-OFF} == "ON" ]]; then
        cat >> /paddle/build/Dockerfile <<EOF
        ADD go/cmd/pserver/pserver /usr/bin/
        ADD go/cmd/master/master /usr/bin/
EOF
    fi
    cat >> /paddle/build/Dockerfile <<EOF
T
typhoonzero 已提交
225
    # default command shows the paddle version and exit
226
    CMD [${CMD}]
T
typhoonzero 已提交
227 228
EOF
}
L
Luo Tao 已提交
229

Y
Yancey 已提交
230 231 232 233 234 235
function gen_capi_package() {
  if [[ ${WITH_C_API} == "ON" ]]; then
    install_prefix="/paddle/build/capi_output"
    rm -rf $install_prefix
    make DESTDIR="$install_prefix" install
    cd $install_prefix/usr/local
236
    ls | egrep -v "^Found.*item$" | xargs tar -cf /paddle/build/paddle.tgz
Y
Yancey 已提交
237 238 239
  fi
}

240 241 242 243
function gen_fluid_inference_lib() {
    if [ ${WITH_C_API:-OFF} == "OFF" ] ; then
    cat <<EOF
    ========================================
244
    Deploying fluid inference library ...
245 246
    ========================================
EOF
247
        make -j `nproc` inference_lib_dist
248 249 250
    fi
}

T
typhoonzero 已提交
251
set -xe
T
typhoonzero 已提交
252

T
typhoonzero 已提交
253
cmake_gen ${PYTHON_ABI:-""}
T
typhoonzero 已提交
254 255 256 257
run_build
run_test
gen_docs
gen_dockerfile
Y
Yancey 已提交
258
gen_capi_package
259
gen_fluid_inference_lib
Y
Yancey 已提交
260 261

if [[ ${WITH_C_API:-OFF} == "ON" ]]; then
262
  printf "PaddlePaddle C-API libraries was generated on build/paddle.tgz\n"
Y
Yancey 已提交
263 264 265 266
else
  printf "If you need to install PaddlePaddle in develop docker image,"
  printf "please make install or pip install build/python/dist/*.whl.\n"
fi