@@ -4,133 +4,153 @@ PaddlePaddle的Docker容器使用方式
4
4
PaddlePaddle目前唯一官方支持的运行的方式是Docker容器。因为Docker能在所有主要操作系统(包括Linux,Mac OS X和Windows)上运行。 请注意,您需要更改 `Dockers设置 <https://github.com/PaddlePaddle/Paddle/issues/627 >`_ 才能充分利用Mac OS X和Windows上的硬件资源。
5
5
6
6
7
- 纯CPU和GPU的docker镜像使用说明
7
+ PaddlePaddle发布的docker镜像使用说明
8
8
------------------------------
9
9
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 `
13
13
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服务,方便开发者直接登录到镜像中进行开发:
15
25
16
- .. code-block :: bash
26
+ 以交互容器方式运行开发镜像:
17
27
18
- docker run -it --rm paddledev/paddle:0.10.0rc1-cpu /bin/ bash
28
+ .. code-block:: bash
19
29
20
- 或者,可以以后台进程方式运行容器:
30
+ docker run -it --rm paddledev/paddle:<version>-dev /bin/bash
21
31
22
- .. code-block :: bash
32
+ 或者,可以以后台进程方式运行容器:
23
33
24
- docker run -d -p 2202:22 -p 8888:8888 paddledev/paddle:0.10.0rc1-cpu
34
+ .. code-block:: bash
25
35
26
- 然后用密码 :code: ` root ` SSH进入容器:
36
+ docker run -d -p 2202:22 -p 8888:8888 paddledev/paddle:<version>-dev
27
37
28
- .. code-block :: bash
38
+ 然后用密码 : code:`root ` SSH进入容器:
29
39
30
- ssh -p 2202 root@localhost
40
+ .. code-block :: bash
31
41
32
- SSH方式的一个优点是我们可以从多个终端进入容器。比如,一个终端运行vi,另一个终端运行Python。另一个好处是我们可以把PaddlePaddle容器运行在远程服务器上,并在笔记本上通过SSH与其连接。
42
+ ssh -p 2202 root@localhost
33
43
44
+ SSH方式的一个优点是我们可以从多个终端进入容器。比如,一个终端运行vi,另一个终端运行Python。另一个好处是我们可以把PaddlePaddle容器运行在远程服务器上,并在笔记本上通过SSH与其连接。
34
45
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 `
36
51
37
- .. code-block :: bash
52
+ 纯CPU镜像以及GPU镜像都会用到AVX指令集,但是2008年之前生产的旧电脑不支持AVX。以下指令能检查Linux电脑是否支持AVX:
38
53
39
- export CUDA_SO=" $( \l s /usr/lib64/libcuda* | xargs -I{} echo ' -v {}:{}' ) $( \l s /usr/lib64/libnvidia* | xargs -I{} echo ' -v {}:{}' ) "
40
- export DEVICES=$( \l s /dev/nvidia* | xargs -I{} echo ' --device {}:{}' )
41
- docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:0.10.0rc1-gpu
54
+ .. code-block :: bash
42
55
56
+ if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
43
57
44
- 运行PaddlePaddle书籍
45
- ---------------------
58
+ 如果输出是No,就需要选择使用no-AVX的镜像
46
59
47
- Jupyter Notebook是一个开源的web程序,大家可以通过它制作和分享带有代码、公式、图表、文字的交互式文档。用户可以通过网页浏览文档。
60
+ 以上方法在GPU镜像里也能用,只是请不要忘记提前在物理机上安装GPU最新驱动。
61
+ 为了保证GPU驱动能够在镜像里面正常运行,我们推荐使用[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)来运行镜像。
48
62
49
- PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nodebook。
50
- 如果您想要更深入了解deep learning,PaddlePaddle书籍一定是您最好的选择。
63
+ .. code-block :: bash
51
64
52
- 当您进入容器内之后,只用运行以下命令:
65
+ nvidia-docker run -it --rm paddledev/paddle:0.10.0rc1-gpu /bin/bash
53
66
54
- .. code-block :: bash
55
-
56
- jupyter notebook
67
+ 注意: 如果使用nvidia-docker存在问题,你也许可以尝试更老的方法,具体如下,但是我们并不推荐这种方法。:
57
68
58
- 然后在浏览器中输入以下网址:
59
-
60
- .. code-block :: text
69
+ .. code-block :: bash
61
70
62
- http://localhost:8888/
71
+ export CUDA_SO=" $( \l s /usr/lib64/libcuda* | xargs -I{} echo ' -v {}:{}' ) $( \l s /usr/lib64/libnvidia* | xargs -I{} echo ' -v {}:{}' ) "
72
+ export DEVICES=$( \l s /dev/nvidia* | xargs -I{} echo ' --device {}:{}' )
73
+ docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:< version> -gpu
63
74
64
- 就这么简单,享受您的旅程!
75
+ 3. 使用运行镜像发布你的AI程序
76
+ 假设您已经完成了一个AI训练的python程序 :code: `a.py `,这个程序是您在开发机上使用开发镜像完成开发。此时您可以运行这个命令在开发机上进行测试运行:
65
77
78
+ .. code-block :: bash
66
79
67
- 非AVX镜像
68
- ---------
80
+ docker run -it -v $PWD :/work paddle /work/a.py
69
81
70
- 纯CPU镜像以及GPU镜像都会用到AVX指令集,但是2008年之前生产的旧电脑不支持AVX。以下指令能检查Linux电脑是否支持AVX:
82
+ 这里`a.py`包含的所有依赖假设都可以在Paddle的运行容器中。如果需要包含更多的依赖、或者需要发布您的应用的镜像,可以编写`Dockerfile`使用`FROM paddledev/paddle:<version>`
83
+ 创建和发布自己的AI程序镜像。
71
84
72
- .. code-block :: bash
85
+ 运行PaddlePaddle书籍
86
+ ---------------------
73
87
74
- if cat /proc/cpuinfo | grep -i avx ; then echo Yes ; else echo No ; fi
88
+ Jupyter Notebook是一个开源的web程序,大家可以通过它制作和分享带有代码、公式、图表、文字的交互式文档。用户可以通过网页浏览文档。
75
89
76
- 如果输出是No,我们就需要手动编译一个非AVX版本的镜像:
90
+ PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nodebook。
91
+ 如果您想要更深入了解deep learning,PaddlePaddle书籍一定是您最好的选择。
92
+
93
+ 我们提供可以直接运行PaddlePaddle书籍的docker镜像,直接运行:
77
94
78
95
.. code-block :: bash
79
96
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 .
97
+ docker run -p 8888:8888 paddlepaddle/book
85
98
99
+ 然后在浏览器中输入以下网址:
100
+
101
+ .. code-block :: text
102
+
103
+ http://localhost:8888/
104
+
105
+ 就这么简单,享受您的旅程!
86
106
87
107
通过Docker容器开发PaddlePaddle
88
108
------------------------------
89
109
90
- 开发人员可以在Docker中开发PaddlePaddle。这样开发人员可以以一致的方式在不同的平台上工作 - Linux,Mac OS X和Windows。
110
+ 开发人员可以在Docker开发镜像中开发PaddlePaddle。这样开发人员可以以一致的方式在不同的平台上工作 - Linux,Mac OS X和Windows。
111
+
112
+ 1. 构建开发镜像
91
113
92
- 1. 将开发环境构建为Docker镜像
93
-
94
114
.. code-block :: bash
95
115
96
116
git clone --recursive https://github.com/PaddlePaddle/Paddle
97
117
cd Paddle
98
- docker build -t paddle:dev -f paddle/scripts/docker/Dockerfile .
118
+ docker build -t paddle:dev .
99
119
100
120
101
- 请注意,默认情况下,:code: `docker build ` 不会将源码导入到镜像中并编译它。如果我们想这样做,需要设置一个参数 :
121
+ 请注意,默认情况下,:code: `docker build ` 不会将源码导入到镜像中并编译它。如果我们想这样做,需要构建完开发镜像,然后执行 :
102
122
103
123
.. code-block :: bash
104
124
105
- docker build -t paddle:dev -f paddle/scripts/docker/Dockerfile --build-arg BUILD_AND_INSTALL =ON .
125
+ docker run -v $PWD :/paddle -e " WITH_GPU=OFF " -e " WITH_AVX =ON" -e " TEST=OFF " paddle:dev
106
126
107
127
108
128
2. 运行开发环境
109
129
110
130
当我们编译好了 :code: `paddle:dev `, 我们可以在docker容器里做开发,源代码可以通过挂载本地文件来被载入Docker的开发环境里面:
111
-
131
+
112
132
.. code-block :: bash
113
133
114
- docker run -d -p 2202:22 -v $PWD :/paddle paddle:dev
134
+ docker run -d -p 2202:22 -v $PWD :/paddle paddle:dev sshd
115
135
116
136
以上代码会启动一个带有PaddlePaddle开发环境的docker容器,源代码会被挂载到 :code: `/paddle ` 。
117
137
118
- 请注意, :code: ` paddle:dev ` 的默认入口是 :code: ` sshd ` 。 以上的 :code: `docker run ` 命令其实会启动一个在2202端口监听的SSHD服务器。这样,我们就能SSH进入我们的开发容器了:
119
-
138
+ 以上的 :code: `docker run ` 命令其实会启动一个在2202端口监听的SSHD服务器。这样,我们就能SSH进入我们的开发容器了:
139
+
120
140
.. code-block :: bash
121
141
122
142
ssh root@localhost -p 2202
123
143
124
144
3. 在Docker开发环境中编译与安装PaddlPaddle代码
125
145
126
146
当在容器里面的时候,可以用脚本 :code: `paddle/scripts/docker/build.sh ` 来编译、安装与测试PaddlePaddle:
127
-
147
+
128
148
.. code-block :: bash
129
-
149
+
130
150
/paddle/paddle/scripts/docker/build.sh
131
151
132
152
以上指令会在 :code: `/paddle/build ` 中编译PaddlePaddle。通过以下指令可以运行单元测试:
133
-
153
+
134
154
.. code-block :: bash
135
155
136
156
cd /paddle/build
@@ -140,14 +160,14 @@ PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nod
140
160
文档
141
161
----
142
162
143
- Paddle的Docker镜像带有一个通过 `woboq code browser
163
+ Paddle的Docker开发镜像带有一个通过 `woboq code browser
144
164
<https://github.com/woboq/woboq_codebrowser> `_ 生成的HTML版本的C++源代码,便于用户浏览C++源码。
145
165
146
166
只要在Docker里启动PaddlePaddle的时候给它一个名字,就可以再运行另一个Nginx Docker镜像来服务HTML代码:
147
167
148
168
.. code-block :: bash
149
169
150
- docker run -d --name paddle-cpu-doc paddle:0.10.0rc1-cpu
170
+ docker run -d --name paddle-cpu-doc paddle:< version > -dev
151
171
docker run -d --volumes-from paddle-cpu-doc -p 8088:80 nginx
152
172
153
173
接着我们就能够打开浏览器在 http://localhost:8088/paddle/ 浏览代码。
0 commit comments