forked from PaddlePaddle/Paddle
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Helin Wang
committed
Mar 22, 2017
1 parent
a71218c
commit 7485e5d
Showing
3 changed files
with
81 additions
and
113 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
*.DS_Store | ||
build/ | ||
*.user | ||
.vscode | ||
.idea | ||
.project | ||
.cproject | ||
.pydevproject | ||
Makefile | ||
.test_env/ | ||
third_party/ | ||
*~ | ||
bazel-* | ||
|
||
!build/*.deb |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,145 +1,104 @@ | ||
#!/bin/bash | ||
|
||
function abort(){ | ||
echo "An error occurred. Exiting..." 1>&2 | ||
exit 1 | ||
} | ||
|
||
trap 'abort' 0 | ||
set -e | ||
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 | ||
|
||
# Set BASE_IMAGE according to env variables | ||
if [ ${WITH_GPU} == "ON" ]; then | ||
BASE_IMAGE="nvidia/cuda:7.5-cudnn5-runtime-ubuntu14.04" | ||
# additional packages to install when building gpu images | ||
GPU_DOCKER_PKG="python-pip" | ||
if [ ${WITH_AVX} == "ON" ]; then | ||
DEB_PATH="dist/gpu/" | ||
DOCKER_SUFFIX="gpu" | ||
else | ||
DEB_PATH="dist/gpu-noavx/" | ||
DOCKER_SUFFIX="gpu-noavx" | ||
fi | ||
GPU_DOCKER_PKG="python-pip python-dev" | ||
else | ||
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 | ||
# 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. | ||
if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then | ||
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 | ||
cd /paddle/build | ||
# clean local cmake and third_party cache | ||
if [ ${DELETE_BUILD_CACHE} == 'ON' ]; then | ||
rm -rf * && rm -rf ../third_party | ||
fi | ||
cmake .. \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DWITH_DOC=${WITH_DOC:-OFF} \ | ||
-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 | ||
# generate deb package for current build | ||
# FIXME(typhoonzero): should we remove paddle/scripts/deb ? | ||
# FIXME: CPACK_DEBIAN_PACKAGE_DEPENDS removes all dev dependencies, must | ||
# install them in docker | ||
cpack -D CPACK_GENERATOR='DEB' -D CPACK_DEBIAN_PACKAGE_DEPENDS="" .. | ||
mv /paddle/build/*.deb /paddle/${DEB_PATH} | ||
|
||
if [[ ${BUILD_WOBOQ:-OFF} == 'ON' ]]; then | ||
apt-get install -y clang-3.8 llvm-3.8 libclang-3.8-dev | ||
# 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 \ | ||
|
||
DOCKERFILE_GPU_ENV="" | ||
if [[ ${WITH_GPU:-OFF} == 'ON' ]]; then | ||
DOCKERFILE_GPU_ENV="ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH}" | ||
fi | ||
|
||
mkdir -p /paddle/build | ||
cd /paddle/build | ||
|
||
# build script will not fail if *.deb does not exist | ||
rm *.deb || true | ||
|
||
cmake .. \ | ||
-DCMAKE_BUILD_TYPE=Release \ | ||
-DWITH_DOC=${WITH_DOC:-OFF} \ | ||
-DWITH_GPU=${WITH_GPU:-OFF} \ | ||
-DWITH_AVX=${WITH_AVX:-OFF} \ | ||
-DWITH_SWIG_PY=ON \ | ||
-DCUDNN_ROOT=/usr/ \ | ||
-DWITH_STYLE_CHECK=${WITH_STYLE_CHECK:-OFF} \ | ||
-DON_COVERALLS=${TEST:-OFF} \ | ||
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON | ||
make -j `nproc` | ||
if [[ ${TEST:-OFF} == "ON" ]]; then | ||
make coveralls | ||
fi | ||
make install | ||
|
||
# generate deb package for current build | ||
# FIXME(typhoonzero): should we remove paddle/scripts/deb ? | ||
# FIXME: CPACK_DEBIAN_PACKAGE_DEPENDS removes all dev dependencies, must | ||
# 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 | ||
# 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 | ||
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 | ||
/woboq/indexgenerator/codebrowser_indexgenerator $WOBOQ_OUT | ||
cd /woboq | ||
make clean | ||
fi | ||
|
||
paddle version | ||
|
||
# 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 | ||
|
||
cat > /paddle/build/Dockerfile.${DOCKER_SUFFIX} <<EOF | ||
cat > /paddle/build/Dockerfile <<EOF | ||
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 ${GPU_DOCKER_PKG} && \ | ||
apt-get install -y libgfortran3 libpython2.7 ${GPU_DOCKER_PKG} && \ | ||
apt-get clean -y && \ | ||
pip install --upgrade pip && \ | ||
pip install -U 'protobuf==3.1.0' requests | ||
RUN pip install numpy | ||
pip install -U 'protobuf==3.1.0' requests 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 | ||
ADD build/*.deb /usr/local/opt/paddle/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 | ||
CMD ["paddle", "version"] | ||
EOF | ||
|
||
trap : 0 |