|
|
@ -1,71 +1,50 @@
|
|
|
|
#!/bin/bash
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
|
|
function abort(){
|
|
|
|
|
|
|
|
echo "An error occurred. Exiting..." 1>&2
|
|
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
trap 'abort' 0
|
|
|
|
|
|
|
|
set -e
|
|
|
|
set -e
|
|
|
|
mkdir -p /paddle/dist/cpu
|
|
|
|
|
|
|
|
mkdir -p /paddle/dist/gpu
|
|
|
|
# Set BASE_IMAGE according to env variables
|
|
|
|
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
|
|
|
|
if [ ${WITH_GPU} == "ON" ]; then
|
|
|
|
BASE_IMAGE="nvidia/cuda:7.5-cudnn5-runtime-ubuntu14.04"
|
|
|
|
BASE_IMAGE="nvidia/cuda:7.5-cudnn5-runtime-ubuntu14.04"
|
|
|
|
# additional packages to install when building gpu images
|
|
|
|
# additional packages to install when building gpu images
|
|
|
|
GPU_DOCKER_PKG="python-pip"
|
|
|
|
GPU_DOCKER_PKG="python-pip python-dev"
|
|
|
|
if [ ${WITH_AVX} == "ON" ]; then
|
|
|
|
|
|
|
|
DEB_PATH="dist/gpu/"
|
|
|
|
|
|
|
|
DOCKER_SUFFIX="gpu"
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
DEB_PATH="dist/gpu-noavx/"
|
|
|
|
|
|
|
|
DOCKER_SUFFIX="gpu-noavx"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
else
|
|
|
|
else
|
|
|
|
BASE_IMAGE="python:2.7.13-slim"
|
|
|
|
BASE_IMAGE="python:2.7.13-slim"
|
|
|
|
if [ ${WITH_AVX} == "ON" ]; then
|
|
|
|
|
|
|
|
DEB_PATH="dist/cpu/"
|
|
|
|
|
|
|
|
DOCKER_SUFFIX="cpu"
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
DEB_PATH="dist/cpu-noavx/"
|
|
|
|
|
|
|
|
DOCKER_SUFFIX="noavx"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
# If Dockerfile.* sets BUILD_AND_INSTALL to 'ON', it would have copied
|
|
|
|
|
|
|
|
# source tree to /paddle, and this scripts should build it into
|
|
|
|
DOCKERFILE_GPU_ENV=""
|
|
|
|
# /paddle/build.
|
|
|
|
if [[ ${WITH_GPU:-OFF} == 'ON' ]]; then
|
|
|
|
if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then
|
|
|
|
DOCKERFILE_GPU_ENV="ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH}"
|
|
|
|
if [[ ${WITH_GPU:-OFF} == 'ON' ]]; then
|
|
|
|
fi
|
|
|
|
ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so /usr/lib/libcudnn.so
|
|
|
|
|
|
|
|
fi
|
|
|
|
mkdir -p /paddle/build
|
|
|
|
|
|
|
|
cd /paddle/build
|
|
|
|
mkdir -p /paddle/build # -p means no error if exists
|
|
|
|
|
|
|
|
cd /paddle/build
|
|
|
|
# build script will not fail if *.deb does not exist
|
|
|
|
# clean local cmake and third_party cache
|
|
|
|
rm *.deb || true
|
|
|
|
if [ ${DELETE_BUILD_CACHE} == 'ON' ]; then
|
|
|
|
|
|
|
|
rm -rf * && rm -rf ../third_party
|
|
|
|
cmake .. \
|
|
|
|
fi
|
|
|
|
|
|
|
|
cmake .. \
|
|
|
|
|
|
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
|
|
-DWITH_DOC=${WITH_DOC:-OFF} \
|
|
|
|
-DWITH_DOC=${WITH_DOC:-OFF} \
|
|
|
|
-DWITH_GPU=${WITH_GPU:-OFF} \
|
|
|
|
-DWITH_GPU=${WITH_GPU:-OFF} \
|
|
|
|
-DWITH_AVX=${WITH_AVX:-OFF} \
|
|
|
|
-DWITH_AVX=${WITH_AVX:-OFF} \
|
|
|
|
-DWITH_SWIG_PY=ON \
|
|
|
|
-DWITH_SWIG_PY=ON \
|
|
|
|
-DCUDNN_ROOT=/usr/ \
|
|
|
|
-DCUDNN_ROOT=/usr/ \
|
|
|
|
-DWITH_STYLE_CHECK=OFF \
|
|
|
|
-DWITH_STYLE_CHECK=${WITH_STYLE_CHECK:-OFF} \
|
|
|
|
|
|
|
|
-DON_COVERALLS=${TEST:-OFF} \
|
|
|
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
|
|
|
|
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
|
|
|
|
make -j `nproc`
|
|
|
|
make -j `nproc`
|
|
|
|
make install
|
|
|
|
if [[ ${TEST:-OFF} == "ON" ]]; then
|
|
|
|
# generate deb package for current build
|
|
|
|
make coveralls
|
|
|
|
# FIXME(typhoonzero): should we remove paddle/scripts/deb ?
|
|
|
|
fi
|
|
|
|
# FIXME: CPACK_DEBIAN_PACKAGE_DEPENDS removes all dev dependencies, must
|
|
|
|
make install
|
|
|
|
# install them in docker
|
|
|
|
|
|
|
|
cpack -D CPACK_GENERATOR='DEB' -D CPACK_DEBIAN_PACKAGE_DEPENDS="" ..
|
|
|
|
# generate deb package for current build
|
|
|
|
mv /paddle/build/*.deb /paddle/${DEB_PATH}
|
|
|
|
# FIXME(typhoonzero): should we remove paddle/scripts/deb ?
|
|
|
|
|
|
|
|
# FIXME: CPACK_DEBIAN_PACKAGE_DEPENDS removes all dev dependencies, must
|
|
|
|
if [[ ${BUILD_WOBOQ:-OFF} == 'ON' ]]; then
|
|
|
|
# install them in docker
|
|
|
|
|
|
|
|
cpack -D CPACK_GENERATOR='DEB' -D CPACK_DEBIAN_PACKAGE_DEPENDS="" ..
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ ${BUILD_WOBOQ:-OFF} == 'ON' ]]; then
|
|
|
|
apt-get install -y clang-3.8 llvm-3.8 libclang-3.8-dev
|
|
|
|
apt-get install -y clang-3.8 llvm-3.8 libclang-3.8-dev
|
|
|
|
# Install woboq_codebrowser.
|
|
|
|
# Install woboq_codebrowser.
|
|
|
|
git clone https://github.com/woboq/woboq_codebrowser /woboq
|
|
|
|
git clone https://github.com/woboq/woboq_codebrowser /woboq
|
|
|
@ -87,19 +66,10 @@ if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then
|
|
|
|
/woboq/indexgenerator/codebrowser_indexgenerator $WOBOQ_OUT
|
|
|
|
/woboq/indexgenerator/codebrowser_indexgenerator $WOBOQ_OUT
|
|
|
|
cd /woboq
|
|
|
|
cd /woboq
|
|
|
|
make clean
|
|
|
|
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
|
|
|
|
|
|
|
|
paddle version
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if [[ ${DOCKER_BUILD:-FALSE} == 'TRUE' ]]; then
|
|
|
|
|
|
|
|
# reduce docker image size
|
|
|
|
|
|
|
|
rm -rf /paddle/build
|
|
|
|
|
|
|
|
rm -rf /usr/local/opt/paddle/share/wheels/
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
paddle version
|
|
|
|
|
|
|
|
|
|
|
|
# generate production docker image Dockerfile
|
|
|
|
# generate production docker image Dockerfile
|
|
|
|
if [ ${USE_MIRROR} ]; then
|
|
|
|
if [ ${USE_MIRROR} ]; then
|
|
|
|
MIRROR_UPDATE="sed 's@http:\/\/archive.ubuntu.com\/ubuntu\/@mirror:\/\/mirrors.ubuntu.com\/mirrors.txt@' -i /etc/apt/sources.list && \\"
|
|
|
|
MIRROR_UPDATE="sed 's@http:\/\/archive.ubuntu.com\/ubuntu\/@mirror:\/\/mirrors.ubuntu.com\/mirrors.txt@' -i /etc/apt/sources.list && \\"
|
|
|
@ -107,20 +77,10 @@ else
|
|
|
|
MIRROR_UPDATE="\\"
|
|
|
|
MIRROR_UPDATE="\\"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
cat > /paddle/build/Dockerfile.${DOCKER_SUFFIX} <<EOF
|
|
|
|
cat > /paddle/build/Dockerfile <<EOF
|
|
|
|
FROM ${BASE_IMAGE}
|
|
|
|
FROM ${BASE_IMAGE}
|
|
|
|
MAINTAINER PaddlePaddle Authors <paddle-dev@baidu.com>
|
|
|
|
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 HOME /root
|
|
|
|
ENV LANG en_US.UTF-8
|
|
|
|
ENV LANG en_US.UTF-8
|
|
|
|
|
|
|
|
|
|
|
@ -128,18 +88,17 @@ ENV LANG en_US.UTF-8
|
|
|
|
|
|
|
|
|
|
|
|
RUN ${MIRROR_UPDATE}
|
|
|
|
RUN ${MIRROR_UPDATE}
|
|
|
|
apt-get update && \
|
|
|
|
apt-get update && \
|
|
|
|
apt-get install -y libgfortran3 ${GPU_DOCKER_PKG} && \
|
|
|
|
apt-get install -y libgfortran3 libpython2.7 ${GPU_DOCKER_PKG} && \
|
|
|
|
apt-get clean -y && \
|
|
|
|
apt-get clean -y && \
|
|
|
|
pip install --upgrade pip && \
|
|
|
|
pip install --upgrade pip && \
|
|
|
|
pip install -U 'protobuf==3.1.0' requests
|
|
|
|
pip install -U 'protobuf==3.1.0' requests numpy
|
|
|
|
RUN pip install numpy
|
|
|
|
|
|
|
|
# Use different deb file when building different type of images
|
|
|
|
# Use different deb file when building different type of images
|
|
|
|
ADD \$PWD/${DEB_PATH}*.deb /usr/local/opt/paddle/deb/
|
|
|
|
ADD build/*.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}"
|
|
|
|
# run paddle version to install python packages first
|
|
|
|
|
|
|
|
RUN dpkg -i /usr/local/opt/paddle/deb/*.deb && rm -f /usr/local/opt/paddle/deb/*.deb && paddle version
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
${DOCKERFILE_GPU_ENV}
|
|
|
|
# default command shows the paddle version and exit
|
|
|
|
# default command shows the paddle version and exit
|
|
|
|
CMD ["paddle", "version"]
|
|
|
|
CMD ["paddle", "version"]
|
|
|
|
EOF
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
|
|
trap : 0
|
|
|
|
|
|
|
|