-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Thinner docker image #1598
Thinner docker image #1598
Changes from all commits
a6eec02
f66fd44
1b269db
12a3af1
3298d30
c1d5aaa
1ab419a
653c981
0b4d456
e8d33be
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,11 @@ | ||
FROM ubuntu:14.04 | ||
# A image for building paddle binaries | ||
# Use cuda devel base image for both cpu and gpu environment | ||
FROM nvidia/cuda:7.5-cudnn5-devel-ubuntu14.04 | ||
MAINTAINER PaddlePaddle Authors <[email protected]> | ||
|
||
ARG DEBIAN_FRONTEND=noninteractive | ||
ARG UBUNTU_MIRROR | ||
RUN /bin/bash -c 'if [[ -n ${UBUNTU_MIRROR} ]]; then sed -i 's#http://archive.ubuntu.com#${UBUNTU_MIRROR}#g' /etc/apt/sources.list; fi' | ||
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' | ||
|
||
# ENV variables | ||
ARG BUILD_WOBOQ | ||
|
@@ -18,10 +20,8 @@ ENV WITH_GPU=OFF | |
ENV WITH_AVX=${WITH_AVX:-ON} | ||
ENV WITH_DOC=${WITH_DOC:-OFF} | ||
ENV WITH_STYLE_CHECK=${WITH_STYLE_CHECK:-OFF} | ||
ENV DOCKER_BUILD=TRUE | ||
|
||
ENV HOME /root | ||
|
||
# Add bash enhancements | ||
COPY ./paddle/scripts/docker/root/ /root/ | ||
|
||
|
@@ -50,9 +50,7 @@ RUN curl -sSL https://cmake.org/files/v3.4/cmake-3.4.1.tar.gz | tar -xz && \ | |
cd cmake-3.4.1 && ./bootstrap && make -j `nproc` && make install && \ | ||
cd .. && rm -rf cmake-3.4.1 | ||
|
||
COPY . /paddle/ | ||
RUN cd /paddle/ && git submodule update --init --recursive | ||
RUN /paddle/paddle/scripts/docker/build.sh | ||
RUN apt-get install -y swig | ||
|
||
VOLUME ["/usr/share/nginx/html/data", "/usr/share/nginx/html/paddle"] | ||
|
||
|
@@ -63,9 +61,5 @@ RUN sed -ri 's/^PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config | |
RUN sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config | ||
EXPOSE 22 | ||
|
||
# Jupyter Notebook: Paddle book | ||
EXPOSE 8888 | ||
|
||
COPY ./paddle/scripts/docker/entrypoint /opt/bin/ | ||
|
||
CMD ["/opt/bin/entrypoint"] | ||
# development image default do build work | ||
CMD ["bash", "/paddle/paddle/scripts/docker/build.sh"] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,6 @@ | ||
#!/bin/bash | ||
set -e | ||
ARCH=$(uname -i) | ||
apt-get update | ||
apt-get install -y dh-make | ||
cd ~ | ||
|
@@ -8,28 +9,35 @@ mkdir -p ~/dist/cpu | |
mkdir -p ~/dist/cpu-noavx | ||
mkdir -p ~/dist/gpu-noavx | ||
cd paddle | ||
mkdir build | ||
|
||
# clean build dir and third_party dir cache | ||
rm -rf build third_party | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 不删除build文件夹有坏处吗?好处应该可以加速build过程。好像make可以自动追踪什么文件被改变了,感觉不会有问题? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 之前编译遇到不删除build和thirdparty,导致protobuf的依赖没被cmake找到。或许可以只删除CmakeCache? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 明白了,没事,这个不影响merge。 |
||
mkdir -p build | ||
cd build | ||
cmake .. -DWITH_GPU=OFF -DWITH_SWIG_PY=ON -DWITH_AVX=ON | ||
cmake .. -DWITH_GPU=OFF -DWITH_SWIG_PY=ON -DWITH_AVX=ON -DWITH_SWIG_PY=ON -DWITH_STYLE_CHECK=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 这里这些变量都写死了,那如果要支持 GPU怎么办呢? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 这个脚本是会用 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 另外,后文说到要去掉 paddle/scripts/deb 目录。那这个文件是不是就不需要了? |
||
make -j `nproc` | ||
# FIXME(typhoonzero): add ARCH gpu noavx flag to CPACK_SYSTEM_NAME. Why -D not affect anything? | ||
cpack -D CPACK_GENERATOR='DEB' .. | ||
mv *.deb ~/dist/cpu | ||
|
||
rm -rf * | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 不是很了解cpack怎么工作的,这里和以后的几处 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 根据 #1625 ,考虑直接去掉paddle/scripts/deb目录了,使用docker目录下的build.sh完成 |
||
cmake .. -DWITH_GPU=ON -DWITH_SWIG_PY=ON -DWITH_AVX=ON -DCUDNN_ROOT=/usr/ | ||
ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so /usr/lib/libcudnn.so | ||
cmake .. -DWITH_GPU=ON -DWITH_SWIG_PY=ON -DWITH_AVX=ON -DCUDNN_ROOT=/usr/ -DWITH_SWIG_PY=ON -DWITH_STYLE_CHECK=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON | ||
make -j `nproc` | ||
cpack -D CPACK_GENERATOR='DEB' .. | ||
mv *.deb ~/dist/gpu | ||
|
||
|
||
rm -rf * | ||
cmake .. -DWITH_GPU=OFF -DWITH_SWIG_PY=ON -DWITH_AVX=OFF | ||
rm -f /usr/lib/libcudnn.so | ||
cmake .. -DWITH_GPU=OFF -DWITH_SWIG_PY=ON -DWITH_AVX=OFF -DWITH_SWIG_PY=ON -DWITH_STYLE_CHECK=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON | ||
make -j `nproc` | ||
cpack -D CPACK_GENERATOR='DEB' .. | ||
mv *.deb ~/dist/cpu-noavx | ||
|
||
rm -rf * | ||
cmake .. -DWITH_GPU=ON -DWITH_SWIG_PY=ON -DWITH_AVX=OFF -DCUDNN_ROOT=/usr/ | ||
ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so /usr/lib/libcudnn.so | ||
cmake .. -DWITH_GPU=ON -DWITH_SWIG_PY=ON -DWITH_AVX=OFF -DCUDNN_ROOT=/usr/ -DWITH_SWIG_PY=ON -DWITH_STYLE_CHECK=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON | ||
make -j `nproc` | ||
cpack -D CPACK_GENERATOR='DEB' .. | ||
mv *.deb ~/dist/gpu-noavx |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,7 +7,32 @@ function abort(){ | |
|
||
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 | ||
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 | ||
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. | ||
|
@@ -17,8 +42,11 @@ if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then | |
fi | ||
|
||
mkdir -p /paddle/build # -p means no error if exists | ||
cd /paddle/build | ||
# clean local cmake and third_party cache | ||
cd /paddle/build && rm -rf * && rm -rf ../third_party | ||
if [ ${DELETE_BUILD_CACHE} == 'ON' ]; then | ||
rm -rf * && rm -rf ../third_party | ||
fi | ||
cmake .. \ | ||
-DWITH_DOC=${WITH_DOC:-OFF} \ | ||
-DWITH_GPU=${WITH_GPU:-OFF} \ | ||
|
@@ -29,9 +57,15 @@ if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then | |
-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 | ||
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 | ||
|
@@ -65,4 +99,46 @@ if [[ ${BUILD_AND_INSTALL:-OFF} == 'ON' ]]; then | |
fi | ||
fi | ||
|
||
# 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 | ||
FROM ${BASE_IMAGE} | ||
MAINTAINER PaddlePaddle Authors <[email protected]> | ||
|
||
# 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 clean -y && \ | ||
pip install --upgrade pip && \ | ||
pip install -U 'protobuf==3.1.0' requests | ||
RUN pip install 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 | ||
|
||
ENV PATH="/usr/local/opt/paddle/bin/:${PATH}" | ||
# default command shows the paddle version and exit | ||
CMD ["paddle", "version"] | ||
EOF | ||
|
||
trap : 0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
什么时候会调用这个脚本呢?我看Dockerfile里调用的是 paddle/scripts/docker/build.sh 。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
考虑在别的PR中删除"deb"这个目录了 @helinwang