build.sh 5.3 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
    # 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 \
        -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 已提交
71
    cat <<EOF
T
typhoonzero 已提交
72 73 74
    ============================================
    Building in /paddle/build ...
    ============================================
Y
Yi Wang 已提交
75
EOF
T
typhoonzero 已提交
76 77 78 79 80
    make -j `nproc`
}

function run_test() {
    if [ ${WITH_TESTING:-ON} == "ON" ] && [ ${RUN_TEST:-OFF} == "ON" ] ; then
Y
Yi Wang 已提交
81
    cat <<EOF
T
typhoonzero 已提交
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
    ========================================
    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 已提交
102
EOF
T
typhoonzero 已提交
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
        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 已提交
122
EOF
T
typhoonzero 已提交
123 124 125 126 127 128 129 130 131 132 133
        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 已提交
134

T
typhoonzero 已提交
135 136 137 138 139 140 141

function gen_dockerfile() {

    cat <<EOF
    ========================================
    Generate /paddle/build/Dockerfile ...
    ========================================
R
reyoung 已提交
142 143
EOF

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

    if [[ ${WITH_GPU} == "ON"  ]]; then
151
        NCCL_DEPS="apt-get install -y libnccl-dev &&"
T
typhoonzero 已提交
152
    else
153
        NCCL_DEPS="" 
T
typhoonzero 已提交
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
    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/
171
    ADD paddle/pybind/print_operators_doc /usr/bin/
T
typhoonzero 已提交
172 173 174 175
    # default command shows the paddle version and exit
    CMD ["paddle", "version"]
EOF
}
L
Luo Tao 已提交
176

T
typhoonzero 已提交
177 178 179 180 181 182
cmake_gen
run_build
run_test
gen_docs
gen_dockerfile

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