Skip to content

Commit 1bca3cf

Browse files
authored
Merge pull request #1685 from typhoonzero/fix1676
Update docker build and install doc
2 parents 57d9b54 + b8c3364 commit 1bca3cf

File tree

2 files changed

+157
-125
lines changed

2 files changed

+157
-125
lines changed

doc/getstarted/build_and_install/docker_install_cn.rst

Lines changed: 72 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -4,133 +4,146 @@ 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-
纯CPU和GPU的docker镜像使用说明
7+
PaddlePaddle发布的docker镜像使用说明
88
------------------------------
99

10-
对于每一个PaddlePaddle版本,我们都会发布两个Docker镜像:纯CPU的和GPU的
11-
我们通过设置 `dockerhub.com <https://hub.docker.com/r/paddledev/paddle/>`_ 自动生成最新的docker镜像:
12-
`paddledev/paddle:0.10.0rc1-cpu` 和 `paddledev/paddle:0.10.0rc1-gpu`。
10+
对于每一个PaddlePaddle版本,我们都会发布两种Docker镜像:开发镜像、运行镜像。运行镜像包括纯CPU版本和GPU版本以及其对应的非AVX版本
11+
我们会在 `dockerhub.com <https://hub.docker.com/r/paddledev/paddle/>`_ 提供最新的docker镜像,可以在"tags"标签下找到最新的Paddle镜像版本。
12+
1. 开发镜像::code:`paddlepaddle/paddle:<version>-dev`
1313

14-
以交互容器方式运行纯CPU的镜像:
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服务,方便开发者直接登录到镜像中进行开发:
1525
16-
.. code-block:: bash
26+
以交互容器方式运行开发镜像:
1727
18-
docker run -it --rm paddledev/paddle:0.10.0rc1-cpu /bin/bash
28+
.. code-block:: bash
1929
20-
或者,可以以后台进程方式运行容器:
30+
docker run -it --rm paddledev/paddle:<version>-dev /bin/bash
2131
22-
.. code-block:: bash
32+
或者,可以以后台进程方式运行容器:
2333
24-
docker run -d -p 2202:22 -p 8888:8888 paddledev/paddle:0.10.0rc1-cpu
34+
.. code-block:: bash
2535
26-
然后用密码 :code:`root` SSH进入容器:
36+
docker run -d -p 2202:22 -p 8888:8888 paddledev/paddle:<version>-dev
2737
28-
.. code-block:: bash
38+
然后用密码 :code:`root` SSH进入容器:
2939

30-
ssh -p 2202 root@localhost
40+
.. code-block:: bash
3141
32-
SSH方式的一个优点是我们可以从多个终端进入容器。比如,一个终端运行vi,另一个终端运行Python。另一个好处是我们可以把PaddlePaddle容器运行在远程服务器上,并在笔记本上通过SSH与其连接。
42+
ssh -p 2202 root@localhost
3343
44+
SSH方式的一个优点是我们可以从多个终端进入容器。比如,一个终端运行vi,另一个终端运行Python。另一个好处是我们可以把PaddlePaddle容器运行在远程服务器上,并在笔记本上通过SSH与其连接。
3445

35-
以上方法在GPU镜像里也能用-只是请不要忘记按装CUDA驱动,以及告诉Docker:
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`
3651

37-
.. code-block:: bash
52+
纯CPU镜像以及GPU镜像都会用到AVX指令集,但是2008年之前生产的旧电脑不支持AVX。以下指令能检查Linux电脑是否支持AVX:
3853

39-
export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
40-
export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
41-
docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:0.10.0rc1-gpu
54+
.. code-block:: bash
4255
56+
if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
4357
44-
运行PaddlePaddle书籍
45-
---------------------
58+
如果输出是No,就需要选择使用no-AVX的镜像
4659

47-
Jupyter Notebook是一个开源的web程序,大家可以通过它制作和分享带有代码、公式、图表、文字的交互式文档。用户可以通过网页浏览文档。
60+
注意:在运行GPU版本的镜像时 安装CUDA驱动,以及告诉Docker:
4861

49-
PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nodebook。
50-
如果您想要更深入了解deep learning,PaddlePaddle书籍一定是您最好的选择。
62+
.. code-block:: bash
5163
52-
当您进入容器内之后,只用运行以下命令:
64+
export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
65+
export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
66+
docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:<version>-gpu
5367
54-
.. code-block:: bash
55-
56-
jupyter notebook
68+
3. 使用运行镜像发布你的AI程序
69+
假设您已经完成了一个AI训练的python程序 :code:`a.py`,这个程序是您在开发机上使用开发镜像完成开发。此时您可以运行这个命令在开发机上进行测试运行:
5770

58-
然后在浏览器中输入以下网址:
59-
60-
.. code-block:: text
71+
.. code-block:: bash
6172
62-
http://localhost:8888/
73+
docker run -it -v $PWD:/work paddle /work/a.py
6374
64-
就这么简单,享受您的旅程!
75+
这里`a.py`包含的所有依赖假设都可以在Paddle的运行容器中。如果需要包含更多的依赖、或者需要发布您的应用的镜像,可以编写`Dockerfile`使用`FROM paddledev/paddle:<version>`
76+
创建和发布自己的AI程序镜像。
6577

78+
运行PaddlePaddle书籍
79+
---------------------
6680

67-
非AVX镜像
68-
---------
81+
Jupyter Notebook是一个开源的web程序,大家可以通过它制作和分享带有代码、公式、图表、文字的交互式文档。用户可以通过网页浏览文档。
82+
83+
PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nodebook。
84+
如果您想要更深入了解deep learning,PaddlePaddle书籍一定是您最好的选择。
6985

70-
纯CPU镜像以及GPU镜像都会用到AVX指令集,但是2008年之前生产的旧电脑不支持AVX。以下指令能检查Linux电脑是否支持AVX
86+
我们提供可以直接运行PaddlePaddle书籍的docker镜像,直接运行
7187

7288
.. code-block:: bash
7389
74-
if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
90+
docker run -p 8888:8888 paddlepaddle/book
7591
76-
如果输出是No,我们就需要手动编译一个非AVX版本的镜像
92+
然后在浏览器中输入以下网址
7793

78-
.. code-block:: bash
94+
.. code-block:: text
7995
80-
cd ~
81-
git clone https://github.com/PaddlePaddle/Paddle.git
82-
cd Paddle
83-
docker build --build-arg WITH_AVX=OFF -t paddle:cpu-noavx -f paddle/scripts/docker/Dockerfile .
84-
docker build --build-arg WITH_AVX=OFF -t paddle:gpu-noavx -f paddle/scripts/docker/Dockerfile.gpu .
96+
http://localhost:8888/
8597
98+
就这么简单,享受您的旅程!
8699

87100
通过Docker容器开发PaddlePaddle
88101
------------------------------
89102

90-
开发人员可以在Docker中开发PaddlePaddle。这样开发人员可以以一致的方式在不同的平台上工作 - Linux,Mac OS X和Windows。
103+
开发人员可以在Docker开发镜像中开发PaddlePaddle。这样开发人员可以以一致的方式在不同的平台上工作 - Linux,Mac OS X和Windows。
104+
105+
1. 构建开发镜像
91106

92-
1. 将开发环境构建为Docker镜像
93-
94107
.. code-block:: bash
95108
96109
git clone --recursive https://github.com/PaddlePaddle/Paddle
97110
cd Paddle
98-
docker build -t paddle:dev -f paddle/scripts/docker/Dockerfile .
111+
docker build -t paddle:dev .
99112
100113
101-
请注意,默认情况下,:code:`docker build` 不会将源码导入到镜像中并编译它。如果我们想这样做,需要设置一个参数
114+
请注意,默认情况下,:code:`docker build` 不会将源码导入到镜像中并编译它。如果我们想这样做,需要构建完开发镜像,然后执行
102115

103116
.. code-block:: bash
104117
105-
docker build -t paddle:dev -f paddle/scripts/docker/Dockerfile --build-arg BUILD_AND_INSTALL=ON .
118+
docker run -v $PWD:/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=ON" -e "TEST=OFF" paddle:dev
106119
107120
108121
2. 运行开发环境
109122

110123
当我们编译好了 :code:`paddle:dev`, 我们可以在docker容器里做开发,源代码可以通过挂载本地文件来被载入Docker的开发环境里面:
111-
124+
112125
.. code-block:: bash
113126
114-
docker run -d -p 2202:22 -v $PWD:/paddle paddle:dev
127+
docker run -d -p 2202:22 -v $PWD:/paddle paddle:dev sshd
115128
116129
以上代码会启动一个带有PaddlePaddle开发环境的docker容器,源代码会被挂载到 :code:`/paddle` 。
117130

118-
请注意, :code:`paddle:dev` 的默认入口是 :code:`sshd` 。以上的 :code:`docker run` 命令其实会启动一个在2202端口监听的SSHD服务器。这样,我们就能SSH进入我们的开发容器了:
119-
131+
以上的 :code:`docker run` 命令其实会启动一个在2202端口监听的SSHD服务器。这样,我们就能SSH进入我们的开发容器了:
132+
120133
.. code-block:: bash
121134
122135
ssh root@localhost -p 2202
123136
124137
3. 在Docker开发环境中编译与安装PaddlPaddle代码
125138

126139
当在容器里面的时候,可以用脚本 :code:`paddle/scripts/docker/build.sh` 来编译、安装与测试PaddlePaddle:
127-
140+
128141
.. code-block:: bash
129-
142+
130143
/paddle/paddle/scripts/docker/build.sh
131144
132145
以上指令会在 :code:`/paddle/build` 中编译PaddlePaddle。通过以下指令可以运行单元测试:
133-
146+
134147
.. code-block:: bash
135148
136149
cd /paddle/build
@@ -140,14 +153,14 @@ PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nod
140153
文档
141154
----
142155

143-
Paddle的Docker镜像带有一个通过 `woboq code browser
156+
Paddle的Docker开发镜像带有一个通过 `woboq code browser
144157
<https://github.com/woboq/woboq_codebrowser>`_ 生成的HTML版本的C++源代码,便于用户浏览C++源码。
145158

146159
只要在Docker里启动PaddlePaddle的时候给它一个名字,就可以再运行另一个Nginx Docker镜像来服务HTML代码:
147160

148161
.. code-block:: bash
149162
150-
docker run -d --name paddle-cpu-doc paddle:0.10.0rc1-cpu
163+
docker run -d --name paddle-cpu-doc paddle:<version>-dev
151164
docker run -d --volumes-from paddle-cpu-doc -p 8088:80 nginx
152165
153166
接着我们就能够打开浏览器在 http://localhost:8088/paddle/ 浏览代码。

0 commit comments

Comments
 (0)