Skip to content

Commit 4db0471

Browse files
authored
Merge pull request #1661 from helinwang/docker_build
Docker build
2 parents a71218c + 7485e5d commit 4db0471

File tree

3 files changed

+81
-113
lines changed

3 files changed

+81
-113
lines changed

.dockerignore

Lines changed: 0 additions & 1 deletion
This file was deleted.

.dockerignore

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
*.DS_Store
2+
build/
3+
*.user
4+
.vscode
5+
.idea
6+
.project
7+
.cproject
8+
.pydevproject
9+
Makefile
10+
.test_env/
11+
third_party/
12+
*~
13+
bazel-*
14+
15+
!build/*.deb

Dockerfile

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,17 @@
33
FROM nvidia/cuda:7.5-cudnn5-devel-ubuntu14.04
44
MAINTAINER PaddlePaddle Authors <[email protected]>
55

6-
ARG DEBIAN_FRONTEND=noninteractive
76
ARG UBUNTU_MIRROR
87
RUN /bin/bash -c 'if [[ -n ${UBUNTU_MIRROR} ]]; then sed -i 's#http://archive.ubuntu.com/ubuntu#${UBUNTU_MIRROR}#g' /etc/apt/sources.list; fi'
98

109
# ENV variables
1110
ARG BUILD_WOBOQ
12-
ARG BUILD_AND_INSTALL
1311
ARG WITH_GPU
1412
ARG WITH_AVX
1513
ARG WITH_DOC
1614
ARG WITH_STYLE_CHECK
1715

1816
ENV BUILD_WOBOQ=${BUILD_WOBOQ:-OFF}
19-
ENV BUILD_AND_INSTALL=${BUILD_AND_INSTALL:-OFF}
2017
ENV WITH_GPU=${WITH_AVX:-OFF}
2118
ENV WITH_AVX=${WITH_AVX:-ON}
2219
ENV WITH_DOC=${WITH_DOC:-OFF}
@@ -31,7 +28,7 @@ RUN apt-get update && \
3128
apt-get install -y wget unzip tar xz-utils bzip2 gzip coreutils && \
3229
apt-get install -y curl sed grep graphviz libjpeg-dev zlib1g-dev && \
3330
apt-get install -y python-numpy python-matplotlib gcc g++ gfortran && \
34-
apt-get install -y automake locales clang-format-3.8 && \
31+
apt-get install -y automake locales clang-format-3.8 swig && \
3532
apt-get clean -y
3633

3734
# git credential to skip password typing
@@ -51,8 +48,6 @@ RUN curl -sSL https://cmake.org/files/v3.4/cmake-3.4.1.tar.gz | tar -xz && \
5148
cd cmake-3.4.1 && ./bootstrap && make -j `nproc` && make install && \
5249
cd .. && rm -rf cmake-3.4.1
5350

54-
RUN apt-get install -y swig
55-
5651
VOLUME ["/usr/share/nginx/html/data", "/usr/share/nginx/html/paddle"]
5752

5853
# Configure OpenSSH server. c.f. https://docs.docker.com/engine/examples/running_ssh_service

paddle/scripts/docker/build.sh

Lines changed: 65 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -1,145 +1,104 @@
11
#!/bin/bash
22

3-
function abort(){
4-
echo "An error occurred. Exiting..." 1>&2
5-
exit 1
6-
}
7-
8-
trap 'abort' 0
93
set -e
10-
mkdir -p /paddle/dist/cpu
11-
mkdir -p /paddle/dist/gpu
12-
mkdir -p /paddle/dist/cpu-noavx
13-
mkdir -p /paddle/dist/gpu-noavx
14-
# Set BASE_IMAGE and DEB_PATH according to env variables
4+
5+
# Set BASE_IMAGE according to env variables
156
if [ ${WITH_GPU} == "ON" ]; then
167
BASE_IMAGE="nvidia/cuda:7.5-cudnn5-runtime-ubuntu14.04"
178
# additional packages to install when building gpu images
18-
GPU_DOCKER_PKG="python-pip"
19-
if [ ${WITH_AVX} == "ON" ]; then
20-
DEB_PATH="dist/gpu/"
21-
DOCKER_SUFFIX="gpu"
22-
else
23-
DEB_PATH="dist/gpu-noavx/"
24-
DOCKER_SUFFIX="gpu-noavx"
25-
fi
9+
GPU_DOCKER_PKG="python-pip python-dev"
2610
else
2711
BASE_IMAGE="python:2.7.13-slim"
28-
if [ ${WITH_AVX} == "ON" ]; then
29-
DEB_PATH="dist/cpu/"
30-
DOCKER_SUFFIX="cpu"
31-
else
32-
DEB_PATH="dist/cpu-noavx/"
33-
DOCKER_SUFFIX="noavx"
34-
fi
3512
fi
36-
# If Dockerfile.* sets BUILD_AND_INSTALL to 'ON', it would have copied
37-
# source tree to /paddle, and this scripts should build it into
38-
# /paddle/build.
39-
if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then
40-
if [[ ${WITH_GPU:-OFF} == 'ON' ]]; then
41-
ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so /usr/lib/libcudnn.so
42-
fi
43-
44-
mkdir -p /paddle/build # -p means no error if exists
45-
cd /paddle/build
46-
# clean local cmake and third_party cache
47-
if [ ${DELETE_BUILD_CACHE} == 'ON' ]; then
48-
rm -rf * && rm -rf ../third_party
49-
fi
50-
cmake .. \
51-
-DCMAKE_BUILD_TYPE=Release \
52-
-DWITH_DOC=${WITH_DOC:-OFF} \
53-
-DWITH_GPU=${WITH_GPU:-OFF} \
54-
-DWITH_AVX=${WITH_AVX:-OFF} \
55-
-DWITH_SWIG_PY=ON \
56-
-DCUDNN_ROOT=/usr/ \
57-
-DWITH_STYLE_CHECK=OFF \
58-
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
59-
make -j `nproc`
60-
make install
61-
# generate deb package for current build
62-
# FIXME(typhoonzero): should we remove paddle/scripts/deb ?
63-
# FIXME: CPACK_DEBIAN_PACKAGE_DEPENDS removes all dev dependencies, must
64-
# install them in docker
65-
cpack -D CPACK_GENERATOR='DEB' -D CPACK_DEBIAN_PACKAGE_DEPENDS="" ..
66-
mv /paddle/build/*.deb /paddle/${DEB_PATH}
67-
68-
if [[ ${BUILD_WOBOQ:-OFF} == 'ON' ]]; then
69-
apt-get install -y clang-3.8 llvm-3.8 libclang-3.8-dev
70-
# Install woboq_codebrowser.
71-
git clone https://github.com/woboq/woboq_codebrowser /woboq
72-
cd /woboq
73-
cmake -DLLVM_CONFIG_EXECUTABLE=/usr/bin/llvm-config-3.8 \
74-
-DCMAKE_BUILD_TYPE=Release \
75-
.
76-
make
77-
78-
export WOBOQ_OUT=/usr/share/nginx/html/paddle
79-
export BUILD_DIR=/paddle/build
80-
mkdir -p $WOBOQ_OUT
81-
cp -rv /woboq/data $WOBOQ_OUT/../data
82-
/woboq/generator/codebrowser_generator \
13+
14+
DOCKERFILE_GPU_ENV=""
15+
if [[ ${WITH_GPU:-OFF} == 'ON' ]]; then
16+
DOCKERFILE_GPU_ENV="ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH}"
17+
fi
18+
19+
mkdir -p /paddle/build
20+
cd /paddle/build
21+
22+
# build script will not fail if *.deb does not exist
23+
rm *.deb || true
24+
25+
cmake .. \
26+
-DCMAKE_BUILD_TYPE=Release \
27+
-DWITH_DOC=${WITH_DOC:-OFF} \
28+
-DWITH_GPU=${WITH_GPU:-OFF} \
29+
-DWITH_AVX=${WITH_AVX:-OFF} \
30+
-DWITH_SWIG_PY=ON \
31+
-DCUDNN_ROOT=/usr/ \
32+
-DWITH_STYLE_CHECK=${WITH_STYLE_CHECK:-OFF} \
33+
-DON_COVERALLS=${TEST:-OFF} \
34+
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
35+
make -j `nproc`
36+
if [[ ${TEST:-OFF} == "ON" ]]; then
37+
make coveralls
38+
fi
39+
make install
40+
41+
# generate deb package for current build
42+
# FIXME(typhoonzero): should we remove paddle/scripts/deb ?
43+
# FIXME: CPACK_DEBIAN_PACKAGE_DEPENDS removes all dev dependencies, must
44+
# install them in docker
45+
cpack -D CPACK_GENERATOR='DEB' -D CPACK_DEBIAN_PACKAGE_DEPENDS="" ..
46+
47+
if [[ ${BUILD_WOBOQ:-OFF} == 'ON' ]]; then
48+
apt-get install -y clang-3.8 llvm-3.8 libclang-3.8-dev
49+
# Install woboq_codebrowser.
50+
git clone https://github.com/woboq/woboq_codebrowser /woboq
51+
cd /woboq
52+
cmake -DLLVM_CONFIG_EXECUTABLE=/usr/bin/llvm-config-3.8 \
53+
-DCMAKE_BUILD_TYPE=Release \
54+
.
55+
make
56+
57+
export WOBOQ_OUT=/usr/share/nginx/html/paddle
58+
export BUILD_DIR=/paddle/build
59+
mkdir -p $WOBOQ_OUT
60+
cp -rv /woboq/data $WOBOQ_OUT/../data
61+
/woboq/generator/codebrowser_generator \
8362
-b /paddle/build \
8463
-a \
8564
-o $WOBOQ_OUT \
8665
-p paddle:/paddle
87-
/woboq/indexgenerator/codebrowser_indexgenerator $WOBOQ_OUT
88-
cd /woboq
89-
make clean
90-
fi
91-
92-
pip install /usr/local/opt/paddle/share/wheels/py_paddle*linux*.whl
93-
pip install /usr/local/opt/paddle/share/wheels/paddle*.whl
94-
paddle version
95-
96-
if [[ ${DOCKER_BUILD:-FALSE} == 'TRUE' ]]; then
97-
# reduce docker image size
98-
rm -rf /paddle/build
99-
rm -rf /usr/local/opt/paddle/share/wheels/
100-
fi
66+
/woboq/indexgenerator/codebrowser_indexgenerator $WOBOQ_OUT
67+
cd /woboq
68+
make clean
10169
fi
10270

71+
paddle version
72+
10373
# generate production docker image Dockerfile
10474
if [ ${USE_MIRROR} ]; then
10575
MIRROR_UPDATE="sed 's@http:\/\/archive.ubuntu.com\/ubuntu\/@mirror:\/\/mirrors.ubuntu.com\/mirrors.txt@' -i /etc/apt/sources.list && \\"
10676
else
10777
MIRROR_UPDATE="\\"
10878
fi
10979

110-
cat > /paddle/build/Dockerfile.${DOCKER_SUFFIX} <<EOF
80+
cat > /paddle/build/Dockerfile <<EOF
11181
FROM ${BASE_IMAGE}
11282
MAINTAINER PaddlePaddle Authors <[email protected]>
11383
114-
# ENV variables
115-
ARG WITH_AVX
116-
ARG WITH_DOC
117-
ARG WITH_STYLE_CHECK
118-
119-
ENV WITH_GPU=${WITH_GPU}
120-
ENV WITH_AVX=\${WITH_AVX:-ON}
121-
ENV WITH_DOC=\${WITH_DOC:-OFF}
122-
ENV WITH_STYLE_CHECK=\${WITH_STYLE_CHECK:-OFF}
123-
12484
ENV HOME /root
12585
ENV LANG en_US.UTF-8
12686
12787
# Use Fix locales to en_US.UTF-8
12888
12989
RUN ${MIRROR_UPDATE}
13090
apt-get update && \
131-
apt-get install -y libgfortran3 ${GPU_DOCKER_PKG} && \
91+
apt-get install -y libgfortran3 libpython2.7 ${GPU_DOCKER_PKG} && \
13292
apt-get clean -y && \
13393
pip install --upgrade pip && \
134-
pip install -U 'protobuf==3.1.0' requests
135-
RUN pip install numpy
94+
pip install -U 'protobuf==3.1.0' requests numpy
13695
# Use different deb file when building different type of images
137-
ADD \$PWD/${DEB_PATH}*.deb /usr/local/opt/paddle/deb/
138-
RUN dpkg --force-all -i /usr/local/opt/paddle/deb/*.deb && rm -f /usr/local/opt/paddle/deb/*.deb
96+
ADD build/*.deb /usr/local/opt/paddle/deb/
13997
140-
ENV PATH="/usr/local/opt/paddle/bin/:${PATH}"
98+
# run paddle version to install python packages first
99+
RUN dpkg -i /usr/local/opt/paddle/deb/*.deb && rm -f /usr/local/opt/paddle/deb/*.deb && paddle version
100+
101+
${DOCKERFILE_GPU_ENV}
141102
# default command shows the paddle version and exit
142103
CMD ["paddle", "version"]
143104
EOF
144-
145-
trap : 0

0 commit comments

Comments
 (0)