Skip to content

Commit 270b546

Browse files
authored
Merge pull request #1899 from reyoung/cherry_pick_helin_commits_
Cherry pick helin commits
2 parents f39f122 + 50ab872 commit 270b546

File tree

4 files changed

+125
-126
lines changed

4 files changed

+125
-126
lines changed

doc/getstarted/build_and_install/docker_install_cn.rst

Lines changed: 91 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -4,93 +4,112 @@ PaddlePaddle的Docker容器使用方式
44
PaddlePaddle目前唯一官方支持的运行的方式是Docker容器。因为Docker能在所有主要操作系统(包括Linux,Mac OS X和Windows)上运行。 请注意,您需要更改 `Dockers设置 <https://github.com/PaddlePaddle/Paddle/issues/627>`_ 才能充分利用Mac OS X和Windows上的硬件资源。
55

66

7-
PaddlePaddle发布的docker镜像使用说明
7+
PaddlePaddle发布的Docker镜像使用说明
88
------------------------------
99

10-
对于每一个PaddlePaddle版本,我们都会发布两种Docker镜像:开发镜像、运行镜像。运行镜像包括纯CPU版本和GPU版本以及其对应的非AVX版本。
11-
我们会在 `dockerhub.com <https://hub.docker.com/r/paddledev/paddle/>`_ 提供最新的docker镜像,可以在"tags"标签下找到最新的Paddle镜像版本。
10+
我们把PaddlePaddle的编译环境打包成一个镜像,称为开发镜像,里面涵盖了
11+
PaddlePaddle需要的所有编译工具。把编译出来的PaddlePaddle也打包成一个镜
12+
像,称为生产镜像,里面涵盖了PaddlePaddle运行所需的所有环境。每次
13+
PaddlePaddle发布新版本的时候都会发布对应版本的生产镜像以及开发镜像。运
14+
行镜像包括纯CPU版本和GPU版本以及其对应的非AVX版本。我们会在
15+
`dockerhub.com <https://hub.docker.com/r/paddledev/paddle/>`_ 提供最新
16+
的Docker镜像,可以在"tags"标签下找到最新的Paddle镜像版本。为了方便在国
17+
内的开发者下载Docker镜像,我们提供了国内的镜像服务器供大家使用。如果您
18+
在国内,请把文档里命令中的paddlepaddle/paddle替换成
19+
docker.paddlepaddle.org/paddle。
20+
1221
1. 开发镜像::code:`paddlepaddle/paddle:<version>-dev`
1322

14-
这个镜像包含了Paddle相关的开发工具以及编译和运行环境。用户可以使用开发镜像代替配置本地环境,完成开发,编译,发布,
15-
文档编写等工作。由于不同的Paddle的版本可能需要不同的依赖和工具,所以如果需要自行配置开发环境需要考虑版本的因素。
16-
开发镜像包含了以下工具:
17-
- gcc/clang
18-
- nvcc
19-
- Python
20-
- sphinx
21-
- woboq
22-
- sshd
23-
很多开发者会使用远程的安装有GPU的服务器工作,用户可以使用ssh登录到这台服务器上并执行 :code:`docker exec`进入开发镜像并开始工作,
24-
也可以在开发镜像中启动一个SSHD服务,方便开发者直接登录到镜像中进行开发:
23+
这个镜像包含了Paddle相关的开发工具以及编译和运行环境。用户可以使用开发镜像代替配置本地环境,完成开发,编译,发布,
24+
文档编写等工作。由于不同的Paddle的版本可能需要不同的依赖和工具,所以如果需要自行配置开发环境需要考虑版本的因素。
25+
开发镜像包含了以下工具:
26+
27+
- gcc/clang
28+
- nvcc
29+
- Python
30+
- sphinx
31+
- woboq
32+
- sshd
33+
很多开发者会使用远程的安装有GPU的服务器工作,用户可以使用ssh登录到这台服务器上并执行 :code:`docker exec`进入开发镜像并开始工作,
34+
也可以在开发镜像中启动一个SSHD服务,方便开发者直接登录到镜像中进行开发:
35+
36+
以交互容器方式运行开发镜像:
37+
38+
.. code-block:: bash
39+
40+
docker run -it --rm paddlepaddle/paddle:<version>-dev /bin/bash
41+
42+
或者,可以以后台进程方式运行容器:
43+
44+
.. code-block:: bash
45+
46+
docker run -d -p 2202:22 -p 8888:8888 paddledev/paddle:<version>-dev
2547
26-
以交互容器方式运行开发镜像
48+
然后用密码 :code:`root` SSH进入容器
2749

28-
.. code-block:: bash
50+
.. code-block:: bash
2951
30-
docker run -it --rm paddledev/paddle:<version>-dev /bin/bash
52+
ssh -p 2202 root@localhost
3153
32-
或者,可以以后台进程方式运行容器:
54+
SSH方式的一个优点是我们可以从多个终端进入容器。比如,一个终端运行vi,另一个终端运行Python。另一个好处是我们可以把PaddlePaddle容器运行在远程服务器上,并在笔记本上通过SSH与其连接。
3355

34-
.. code-block:: bash
56+
2. 生产镜像:根据CPU、GPU和非AVX区分了如下4个镜像:
3557

36-
docker run -d -p 2202:22 -p 8888:8888 paddledev/paddle:<version>-dev
58+
- GPU/AVX::code:`paddlepaddle/paddle:<version>-gpu`
59+
- GPU/no-AVX::code:`paddlepaddle/paddle:<version>-gpu-noavx`
60+
- CPU/AVX::code:`paddlepaddle/paddle:<version>`
61+
- CPU/no-AVX::code:`paddlepaddle/paddle:<version>-noavx`
3762

38-
然后用密码 :code:`root` SSH进入容器
63+
纯CPU镜像以及GPU镜像都会用到AVX指令集,但是2008年之前生产的旧电脑不支持AVX。以下指令能检查Linux电脑是否支持AVX
3964

40-
.. code-block:: bash
65+
.. code-block:: bash
4166
42-
ssh -p 2202 root@localhost
67+
if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
4368
44-
SSH方式的一个优点是我们可以从多个终端进入容器。比如,一个终端运行vi,另一个终端运行Python。另一个好处是我们可以把PaddlePaddle容器运行在远程服务器上,并在笔记本上通过SSH与其连接。
69+
如果输出是No,就需要选择使用no-AVX的镜像
4570

46-
2. 运行镜像:根据CPU、GPU和非AVX区分了如下4个镜像:
47-
- GPU/AVX::code:`paddlepaddle/paddle:<version>-gpu`
48-
- GPU/no-AVX::code:`paddlepaddle/paddle:<version>-gpu-noavx`
49-
- CPU/AVX::code:`paddlepaddle/paddle:<version>`
50-
- CPU/no-AVX::code:`paddlepaddle/paddle:<version>-noavx`
71+
以上方法在GPU镜像里也能用,只是请不要忘记提前在物理机上安装GPU最新驱动。
72+
为了保证GPU驱动能够在镜像里面正常运行,我们推荐使用[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)来运行镜像。
5173

52-
纯CPU镜像以及GPU镜像都会用到AVX指令集,但是2008年之前生产的旧电脑不支持AVX。以下指令能检查Linux电脑是否支持AVX:
74+
.. code-block:: bash
5375
54-
.. code-block:: bash
76+
nvidia-docker run -it --rm paddledev/paddle:0.10.0rc1-gpu /bin/bash
5577
56-
if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
78+
注意: 如果使用nvidia-docker存在问题,你也许可以尝试更老的方法,具体如下,但是我们并不推荐这种方法。:
5779

58-
如果输出是No,就需要选择使用no-AVX的镜像
80+
.. code-block:: bash
5981
60-
以上方法在GPU镜像里也能用,只是请不要忘记提前在物理机上安装GPU最新驱动。
61-
为了保证GPU驱动能够在镜像里面正常运行,我们推荐使用[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)来运行镜像。
82+
export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
83+
export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
84+
docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:<version>-gpu
6285
63-
.. code-block:: bash
86+
3. 运行以及发布您的AI程序
6487

65-
nvidia-docker run -it --rm paddledev/paddle:0.10.0rc1-gpu /bin/bash
88+
假设您已经完成了一个AI训练的python程序 :code:`a.py`,这个程序是您在开发机上使用开发镜像完成开发。此时您可以运行这个命令在开发机上进行测试运行:
6689

67-
注意: 如果使用nvidia-docker存在问题,你也许可以尝试更老的方法,具体如下,但是我们并不推荐这种方法。:
90+
.. code-block:: bash
6891
69-
.. code-block:: bash
92+
docker run -it -v $PWD:/work paddle /work/a.py
7093
71-
export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
72-
export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
73-
docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:<version>-gpu
94+
如果要使用GPU,请运行:
7495

75-
3. 使用运行镜像发布你的AI程序
76-
假设您已经完成了一个AI训练的python程序 :code:`a.py`,这个程序是您在开发机上使用开发镜像完成开发。此时您可以运行这个命令在开发机上进行测试运行:
96+
.. code-block:: bash
7797
78-
.. code-block:: bash
98+
nvidia-docker run -it -v $PWD:/work paddle /work/a.py
7999
80-
docker run -it -v $PWD:/work paddle /work/a.py
81100
82-
这里`a.py`包含的所有依赖假设都可以在Paddle的运行容器中。如果需要包含更多的依赖、或者需要发布您的应用的镜像,可以编写`Dockerfile`使用`FROM paddledev/paddle:<version>`
83-
创建和发布自己的AI程序镜像。
101+
这里`a.py`包含的所有依赖假设都可以在Paddle的运行容器中。如果需要包含更多的依赖、或者需要发布您的应用的镜像,可以编写`Dockerfile`使用`FROM paddledev/paddle:<version>`
102+
创建和发布自己的AI程序镜像。
84103

85-
运行PaddlePaddle书籍
104+
运行PaddlePaddle Book
86105
---------------------
87106

88107
Jupyter Notebook是一个开源的web程序,大家可以通过它制作和分享带有代码、公式、图表、文字的交互式文档。用户可以通过网页浏览文档。
89108

90-
PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nodebook。
91-
如果您想要更深入了解deep learning,PaddlePaddle书籍一定是您最好的选择
109+
PaddlePaddle Book是为用户和开发者制作的一个交互式的Jupyter Nodebook。
110+
如果您想要更深入了解deep learning,PaddlePaddle Book一定是您最好的选择
92111

93-
我们提供可以直接运行PaddlePaddle书籍的docker镜像,直接运行:
112+
我们提供可以直接运行PaddlePaddle Book的Docker镜像,直接运行:
94113

95114
.. code-block:: bash
96115
@@ -109,53 +128,44 @@ PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nod
109128

110129
开发人员可以在Docker开发镜像中开发PaddlePaddle。这样开发人员可以以一致的方式在不同的平台上工作 - Linux,Mac OS X和Windows。
111130

112-
1. 构建开发镜像
131+
1. 制作PaddlePaddle开发镜像
113132

114-
.. code-block:: bash
133+
PaddlePaddle每次发布新版本都会发布对应的开发镜像供开发者直接使用。这里介绍如生成造这个开发镜像。
134+
生成Docker镜像的方式有两个,一个是直接把一个容器转换成镜像,另一个是创建Dockerfile并运行docker build指令按照Dockerfile生成镜像。第一个方法的好处是简单快捷,适合自己实验,可以快速迭代。第二个方法的好处是Dockerfile可以把整个生成流程描述很清楚,其他人很容易看懂镜像生成过程,持续集成系统也可以简单地复现这个过程。我们采用第二个方法。Dockerfile位于PaddlePaddle repo的根目录。生成生产镜像只需要运行:
115135

116-
git clone --recursive https://github.com/PaddlePaddle/Paddle
136+
.. code-block:: bash
137+
138+
git clone https://github.com/PaddlePaddle/Paddle.git
117139
cd Paddle
118140
docker build -t paddle:dev .
119141
142+
docker build这个命令的-t指定了生成的镜像的名字,这里我们用paddle:dev。到此,PaddlePaddle开发镜像就被构建完毕了。
120143

121-
请注意,默认情况下,:code:`docker build` 不会将源码导入到镜像中并编译它。如果我们想这样做,需要构建完开发镜像,然后执行:
122-
123-
.. code-block:: bash
124-
125-
docker run -v $PWD:/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=ON" -e "TEST=OFF" paddle:dev
126-
127-
128-
2. 运行开发环境
144+
2. 制作PaddlePaddle生产镜像
129145

130-
当我们编译好了 :code:`paddle:dev`, 我们可以在docker容器里做开发,源代码可以通过挂载本地文件来被载入Docker的开发环境里面
146+
生产镜像的生成分为两步,第一步是运行
131147

132148
.. code-block:: bash
149+
150+
docker run -v $(pwd):/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=OFF" -e "WITH_TEST=ON" paddle:dev
133151
134-
docker run -d -p 2202:22 -v $PWD:/paddle paddle:dev sshd
152+
以上命令会编译PaddlePaddle,生成运行程序,以及生成创建生产镜像的Dockerfile。所有生成的的文件都在build目录下。“WITH_GPU”控制生成的生产镜像是否支持GPU,“WITH_AVX”控制生成的生产镜像是否支持AVX,”WITH_TEST“控制是否生成单元测试。
135153

136-
以上代码会启动一个带有PaddlePaddle开发环境的docker容器,源代码会被挂载到 :code:`/paddle` 。
137-
138-
以上的 :code:`docker run` 命令其实会启动一个在2202端口监听的SSHD服务器。这样,我们就能SSH进入我们的开发容器了:
154+
第二步是运行:
139155

140156
.. code-block:: bash
157+
158+
docker build -t paddle:prod -f build/Dockerfile ./build
141159
142-
ssh root@localhost -p 2202
160+
以上命令会按照生成的Dockerfile把生成的程序拷贝到生产镜像中并做相应的配置,最终生成名为paddle:prod的生产镜像。
143161

144-
3. 在Docker开发环境中编译与安装PaddlPaddle代码
162+
3. 运行单元测试
145163

146-
当在容器里面的时候,可以用脚本 :code:`paddle/scripts/docker/build.sh` 来编译、安装与测试PaddlePaddle
164+
运行以下指令
147165

148166
.. code-block:: bash
149-
150-
/paddle/paddle/scripts/docker/build.sh
151-
152-
以上指令会在 :code:`/paddle/build` 中编译PaddlePaddle。通过以下指令可以运行单元测试:
153-
154-
.. code-block:: bash
155-
156-
cd /paddle/build
157-
ctest
158-
167+
168+
docker run -it -v $(pwd):/paddle paddle:dev bash -c "cd /paddle/build && ctest"
159169
160170
文档
161171
----

doc/getstarted/build_and_install/docker_install_en.rst

Lines changed: 32 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,20 @@ Docker is simple as long as we understand a few basic concepts:
5353
Usage of CPU-only and GPU Images
5454
----------------------------------
5555

56-
For each version of PaddlePaddle, we release two types of Docker images:
57-
development image and production image. Production image includes
58-
CPU-only version and a CUDA GPU version and their no-AVX versions. We
59-
put the docker images on `dockerhub.com
56+
We package PaddlePaddle's compile environment into a Docker image,
57+
called the develop image, it contains all compiling tools that
58+
PaddlePaddle needs. We package compiled PaddlePaddle program into a
59+
Docker image as well, called the production image, it contains all
60+
runtime environment that running PaddlePaddle needs. For each version
61+
of PaddlePaddle, we release both of them. Production image includes
62+
CPU-only version and a CUDA GPU version and their no-AVX versions.
63+
64+
We put the docker images on `dockerhub.com
6065
<https://hub.docker.com/r/paddledev/paddle/>`_. You can find the
61-
latest versions under "tags" tab at dockerhub.com
66+
latest versions under "tags" tab at dockerhub.com. If you are in
67+
China, you can use our Docker image registry mirror to speed up the
68+
download process. To use it, please replace all paddlepaddle/paddle in
69+
the commands to docker.paddlepaddle.org/paddle.
6270

6371
1. Production images, this image might have multiple variants:
6472

@@ -179,59 +187,40 @@ Develop PaddlePaddle or Train Model Using C++ API
179187
We will be using PaddlePaddle development image since it contains all
180188
compiling tools and dependencies.
181189

182-
Let's clone PaddlePaddle repo first:
190+
1. Build PaddlePaddle develop image
183191

184-
.. code-block:: bash
185-
186-
git clone https://github.com/PaddlePaddle/Paddle.git && cd Paddle
187-
188-
Mount both workspace folder and paddle code folder into docker
189-
container, so we can access them inside docker container. There are
190-
two ways of using PaddlePaddle development docker image:
191-
192-
- run interactive bash directly
192+
Use following command to build PaddlePaddle develop image:
193193

194-
.. code-block:: bash
195-
196-
# use nvidia-docker instead of docker if you need to use GPU
197-
docker run -it -v ~/workspace:/workspace -v $(pwd):/paddle paddlepaddle/paddle:0.10.0rc2-dev /bin/bash
198-
# now we are inside docker container
194+
.. code-block:: bash
199195
200-
- or, we can run it as a daemon container
196+
git clone https://github.com/PaddlePaddle/Paddle.git && cd Paddle
197+
docker build -t paddle:dev .
201198
202-
.. code-block:: bash
199+
2. Build PaddlePaddle production image
203200

204-
# use nvidia-docker instead of docker if you need to use GPU
205-
docker run -d -p 2202:22 -p 8888:8888 -v ~/workspace:/workspace -v $(pwd):/paddle paddlepaddle/paddle:0.10.0rc2-dev /usr/sbin/sshd -D
201+
There are two steps for building production image, the first step is to run:
206202

207-
and SSH to this container using password :code:`root`:
208-
209-
.. code-block:: bash
203+
.. code-block:: bash
210204
211-
ssh -p 2202 root@localhost
205+
docker run -v $(pwd):/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=OFF" -e "WITH_TEST=ON" paddle:dev
212206
213-
An advantage is that we can run the PaddlePaddle container on a
214-
remote server and SSH to it from a laptop.
207+
The above command will compile PaddlePaddle and create a Dockerfile for building production image. All the generated files are in the build directory. "WITH_GPU" controls if the generated production image supports GPU. "WITH_AVX" controls if the generated production image supports AVX. "WITH_TEST" controls if the unit test will be generated.
215208

216-
When developing PaddlePaddle, you can edit PaddlePaddle source code
217-
from outside of docker container using your favoriate editor. To
218-
compile PaddlePaddle, run inside container:
209+
The second step is to run:
219210

220-
.. code-block:: bash
211+
.. code-block:: bash
221212
222-
WITH_GPU=OFF WITH_AVX=ON WITH_TEST=ON bash /paddle/paddle/scripts/docker/build.sh
213+
docker build -t paddle:prod -f build/Dockerfile ./build
223214
224-
This builds everything about Paddle in :code:`/paddle/build`. And we
225-
can run unit tests there:
215+
The above command will generate the production image by copying the compiled PaddlePaddle program into the image.
226216

227-
.. code-block:: bash
217+
3. Run unit test
228218

229-
cd /paddle/build
230-
ctest
219+
Following command will run unit test:
231220

232-
When training model using C++ API, we can edit paddle program in
233-
~/workspace outside of docker. And build from /workspace inside of
234-
docker.
221+
.. code-block:: bash
222+
223+
docker run -it -v $(pwd):/paddle paddle:dev bash -c "cd /paddle/build && ctest"
235224
236225
PaddlePaddle Book
237226
------------------

paddle/scripts/docker/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ Users can specify the following Docker build arguments with either "ON" or "OFF"
119119
The following command builds the production image:
120120

121121
```bash
122-
docker build -t paddle -f build/Dockerfile .
122+
docker build -t paddle -f build/Dockerfile ./build
123123
```
124124

125125
This production image is minimal -- it includes binary `paddle`, the shared library `libpaddle.so`, and Python runtime.

paddle/scripts/docker/build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ fi
9999

100100
cat >> /paddle/build/Dockerfile <<EOF
101101
# Use different deb file when building different type of images
102-
ADD build/*.deb /
102+
ADD *.deb /
103103
# run paddle version to install python packages first
104104
RUN apt-get update &&\
105105
apt-get install -y python-pip && pip install -U pip && \

0 commit comments

Comments
 (0)