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

G
gangliao 已提交
3
set -xe
H
Helin Wang 已提交
4

Y
Yu Yang 已提交
5

T
typhoonzero 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
function cmake_gen() {
    # Set BASE_IMAGE according to env variables
    if [[ ${WITH_GPU} == "ON" ]]; then
    BASE_IMAGE="nvidia/cuda:8.0-cudnn5-runtime-ubuntu16.04"
    else
    BASE_IMAGE="ubuntu:16.04"
    fi

    DOCKERFILE_GPU_ENV=""
    DOCKERFILE_CUDNN_DSO=""
    if [[ ${WITH_GPU:-OFF} == 'ON' ]]; then
        DOCKERFILE_GPU_ENV="ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH}"
        DOCKERFILE_CUDNN_DSO="RUN ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so.5 /usr/lib/x86_64-linux-gnu/libcudnn.so"
    fi

    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 已提交
28

T
typhoonzero 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
    cat <<EOF
    ========================================
    Configuring cmake in /paddle/build ...
        -DCMAKE_BUILD_TYPE=Release
        -DWITH_DOC=OFF
        -DWITH_GPU=${WITH_GPU:-OFF}
        -DWITH_MKLDNN=${WITH_MKLDNN:-ON}
        -DWITH_MKLML=${WITH_MKLML:-ON}
        -DWITH_AVX=${WITH_AVX:-OFF}
        -DWITH_GOLANG=${WITH_GOLANG:-ON}
        -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}
        -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
    ========================================
Y
Yi Wang 已提交
48
EOF
H
Helin Wang 已提交
49

T
typhoonzero 已提交
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
    # Disable UNITTEST_USE_VIRTUALENV in docker because
    # docker environment is fully controlled by this script.
    # See /Paddle/CMakeLists.txt, UNITTEST_USE_VIRTUALENV option.
    cmake .. \
        -DCMAKE_BUILD_TYPE=Release \
        -DPYTHON_EXECUTABLE:FILEPATH=/opt/python/cp27-cp27mu/bin/python \
        -DPYTHON_INCLUDE_DIR:PATH=/opt/python/cp27-cp27mu/include \
        -DPYTHON_LIBRARIES:FILEPATH=/opt/_internal/cpython-2.7.11-ucs4/lib/libpython2.7.so \
        -DWITH_DOC=OFF \
        -DWITH_GPU=${WITH_GPU:-OFF} \
        -DWITH_MKLDNN=${WITH_MKLDNN:-ON} \
        -DWITH_MKLML=${WITH_MKLML:-ON} \
        -DWITH_AVX=${WITH_AVX:-OFF} \
        -DWITH_GOLANG=${WITH_GOLANG:-ON} \
        -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} \
        -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
}

function run_build() {
Y
Yi Wang 已提交
74
    cat <<EOF
T
typhoonzero 已提交
75 76 77
    ============================================
    Building in /paddle/build ...
    ============================================
Y
Yi Wang 已提交
78
EOF
T
typhoonzero 已提交
79 80 81 82 83
    make -j `nproc`
}

function run_test() {
    if [ ${WITH_TESTING:-ON} == "ON" ] && [ ${RUN_TEST:-OFF} == "ON" ] ; then
Y
Yi Wang 已提交
84
    cat <<EOF
T
typhoonzero 已提交
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
    ========================================
    Running unit tests ...
    ========================================
EOF
        ctest --output-on-failure
        # make install should also be test when unittest
        make install -j `nproc`
        pip install /usr/local/opt/paddle/share/wheels/*.whl
        paddle version
    fi
}


function gen_docs() {
    if [[ ${WITH_DOC:-OFF} == "ON" ]]; then
        cat <<EOF
    ========================================
    Building documentation ...
    In /paddle/build_doc
    ========================================
Y
Yi Wang 已提交
105
EOF
T
typhoonzero 已提交
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
        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
        make -j `nproc` gen_proto_py
        make -j `nproc` paddle_docs paddle_docs_cn
        popd
    fi


    if [[ ${WOBOQ:-OFF} == 'ON' ]]; then
        cat <<EOF
    ========================================
    Converting C++ source code into HTML ...
    ========================================
Y
Yi Wang 已提交
125
EOF
T
typhoonzero 已提交
126 127 128 129 130 131 132 133 134 135 136
        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 已提交
137

T
typhoonzero 已提交
138 139 140 141 142 143 144

function gen_dockerfile() {

    cat <<EOF
    ========================================
    Generate /paddle/build/Dockerfile ...
    ========================================
R
reyoung 已提交
145 146
EOF

T
typhoonzero 已提交
147 148 149 150
    cat > /paddle/build/Dockerfile <<EOF
    FROM ${BASE_IMAGE}
    MAINTAINER PaddlePaddle Authors <paddle-dev@baidu.com>
    ENV HOME /root
R
reyoung 已提交
151
EOF
T
typhoonzero 已提交
152 153 154 155

    if [[ -n ${APT_MIRROR} ]]; then
    cat >> /paddle/build/Dockerfile <<EOF
    RUN sed -i '${APT_MIRROR}' /etc/apt/sources.list
Y
yi.wu 已提交
156
EOF
T
typhoonzero 已提交
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
    fi

    if [[ ${WITH_GPU} == "ON"  ]]; then
    NCCL_DEPS="apt-get install -y libnccl-dev &&"
    else
    NCCL_DEPS="" 
    fi

    cat >> /paddle/build/Dockerfile <<EOF
    ADD python/dist/*.whl /
    # run paddle version to install python packages first
    RUN apt-get update &&\
        ${NCCL_DEPS}\
        apt-get install -y wget python-pip && pip install -U pip && \
        pip install /*.whl; apt-get install -f -y && \
        apt-get clean -y && \
        rm -f /*.whl && \
        paddle version && \
        ldconfig
    ${DOCKERFILE_CUDNN_DSO}
    ${DOCKERFILE_GPU_ENV}
    ADD go/cmd/pserver/pserver /usr/bin/
    ADD go/cmd/master/master /usr/bin/
    # default command shows the paddle version and exit
    CMD ["paddle", "version"]
EOF
}
L
Luo Tao 已提交
184 185

set +xe
T
typhoonzero 已提交
186 187 188 189 190 191 192

cmake_gen
run_build
run_test
gen_docs
gen_dockerfile

L
Luo Tao 已提交
193 194
printf "If you need to install PaddlePaddle in develop docker image,"
printf "please make install or pip install build/python/dist/*.whl.\n"