docker_install_cn.rst 7.3 KB
Newer Older
1 2
PaddlePaddle的Docker容器使用方式
================================
Z
zhangjinchao01 已提交
3

4
PaddlePaddle目前唯一官方支持的运行的方式是Docker容器。因为Docker能在所有主要操作系统(包括Linux,Mac OS X和Windows)上运行。 请注意,您需要更改 `Dockers设置 <https://github.com/PaddlePaddle/Paddle/issues/627>`_ 才能充分利用Mac OS X和Windows上的硬件资源。
Z
zhangjinchao01 已提交
5 6


Y
yi.wu 已提交
7
PaddlePaddle发布的docker镜像使用说明
L
liaogang 已提交
8
------------------------------
Z
zhangjinchao01 已提交
9

Y
yi.wu 已提交
10
对于每一个PaddlePaddle版本,我们都会发布两种Docker镜像:开发镜像、运行镜像。运行镜像包括纯CPU版本和GPU版本以及其对应的非AVX版本。
Y
update  
yi.wu 已提交
11 12
我们会在 `dockerhub.com <https://hub.docker.com/r/paddledev/paddle/>`_ 提供最新的docker镜像,可以在"tags"标签下找到最新的Paddle镜像版本。
1. 开发镜像::code:`paddlepaddle/paddle:<version>-dev`
Z
zhangjinchao01 已提交
13

Y
yi.wu 已提交
14 15 16 17 18 19 20 21 22 23 24
    这个镜像包含了Paddle相关的开发工具以及编译和运行环境。用户可以使用开发镜像代替配置本地环境,完成开发,编译,发布,
    文档编写等工作。由于不同的Paddle的版本可能需要不同的依赖和工具,所以如果需要自行配置开发环境需要考虑版本的因素。
    开发镜像包含了以下工具:
    - gcc/clang
    - nvcc
    - Python
    - sphinx
    - woboq
    - sshd
    很多开发者会使用远程的安装有GPU的服务器工作,用户可以使用ssh登录到这台服务器上并执行 :code:`docker exec`进入开发镜像并开始工作,
    也可以在开发镜像中启动一个SSHD服务,方便开发者直接登录到镜像中进行开发:
Z
zhangjinchao01 已提交
25

Y
yi.wu 已提交
26
    以交互容器方式运行开发镜像:
Z
zhangjinchao01 已提交
27

Y
yi.wu 已提交
28
    .. code-block:: bash
29

Y
yi.wu 已提交
30
        docker run -it --rm paddledev/paddle:<version>-dev /bin/bash
31

Y
yi.wu 已提交
32
    或者,可以以后台进程方式运行容器:
33

Y
yi.wu 已提交
34
    .. code-block:: bash
35

Y
yi.wu 已提交
36
        docker run -d -p 2202:22 -p 8888:8888 paddledev/paddle:<version>-dev
37

Y
yi.wu 已提交
38
    然后用密码 :code:`root` SSH进入容器:
39

Y
yi.wu 已提交
40
    .. code-block:: bash
41

Y
yi.wu 已提交
42
        ssh -p 2202 root@localhost
Z
zhangjinchao01 已提交
43

Y
yi.wu 已提交
44
    SSH方式的一个优点是我们可以从多个终端进入容器。比如,一个终端运行vi,另一个终端运行Python。另一个好处是我们可以把PaddlePaddle容器运行在远程服务器上,并在笔记本上通过SSH与其连接。
Z
zhangjinchao01 已提交
45

Y
yi.wu 已提交
46 47 48 49 50
2. 运行镜像:根据CPU、GPU和非AVX区分了如下4个镜像:
    - GPU/AVX::code:`paddlepaddle/paddle:<version>-gpu`
    - GPU/no-AVX::code:`paddlepaddle/paddle:<version>-gpu-noavx`
    - CPU/AVX::code:`paddlepaddle/paddle:<version>`
    - CPU/no-AVX::code:`paddlepaddle/paddle:<version>-noavx`
L
liaogang 已提交
51

Y
yi.wu 已提交
52
    纯CPU镜像以及GPU镜像都会用到AVX指令集,但是2008年之前生产的旧电脑不支持AVX。以下指令能检查Linux电脑是否支持AVX:
L
liaogang 已提交
53

Y
yi.wu 已提交
54
    .. code-block:: bash
L
liaogang 已提交
55

Y
yi.wu 已提交
56
       if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
Z
zhangjinchao01 已提交
57

Y
yi.wu 已提交
58
    如果输出是No,就需要选择使用no-AVX的镜像
Z
zhangjinchao01 已提交
59

L
liaogang 已提交
60 61
    以上方法在GPU镜像里也能用,只是请不要忘记提前在物理机上安装GPU最新驱动。
    为了保证GPU驱动能够在镜像里面正常运行,我们推荐使用[nvidia-docker](https://github.com/NVIDIA/nvidia-docker)来运行镜像。
Z
zhangjinchao01 已提交
62

L
liaogang 已提交
63
    .. code-block:: bash
Z
zhangjinchao01 已提交
64

L
liaogang 已提交
65
        nvidia-docker run -it --rm paddledev/paddle:0.10.0rc1-gpu /bin/bash
Z
zhangjinchao01 已提交
66

L
liaogang 已提交
67
    注意: 如果使用nvidia-docker存在问题,你也许可以尝试更老的方法,具体如下,但是我们并不推荐这种方法。:
Z
zhangjinchao01 已提交
68

Y
yi.wu 已提交
69
    .. code-block:: bash
70

Y
yi.wu 已提交
71 72
        export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
        export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
Y
update  
yi.wu 已提交
73
        docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:<version>-gpu
74

Y
yi.wu 已提交
75 76
3. 使用运行镜像发布你的AI程序
    假设您已经完成了一个AI训练的python程序 :code:`a.py`,这个程序是您在开发机上使用开发镜像完成开发。此时您可以运行这个命令在开发机上进行测试运行:
77

Y
yi.wu 已提交
78
    .. code-block:: bash
79

Y
yi.wu 已提交
80
        docker run -it -v $PWD:/work paddle /work/a.py
81

Y
yi.wu 已提交
82 83
    这里`a.py`包含的所有依赖假设都可以在Paddle的运行容器中。如果需要包含更多的依赖、或者需要发布您的应用的镜像,可以编写`Dockerfile`使用`FROM paddledev/paddle:<version>`
    创建和发布自己的AI程序镜像。
84

Y
yi.wu 已提交
85 86
运行PaddlePaddle书籍
---------------------
87

Y
yi.wu 已提交
88
Jupyter Notebook是一个开源的web程序,大家可以通过它制作和分享带有代码、公式、图表、文字的交互式文档。用户可以通过网页浏览文档。
Z
zhangjinchao01 已提交
89

Y
yi.wu 已提交
90 91
PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nodebook。
如果您想要更深入了解deep learning,PaddlePaddle书籍一定是您最好的选择。
Z
zhangjinchao01 已提交
92

Y
yi.wu 已提交
93
我们提供可以直接运行PaddlePaddle书籍的docker镜像,直接运行:
Z
zhangjinchao01 已提交
94

95
.. code-block:: bash
Z
zhangjinchao01 已提交
96

Y
update  
yi.wu 已提交
97
    docker run -p 8888:8888 paddlepaddle/book
Z
zhangjinchao01 已提交
98

Y
yi.wu 已提交
99
然后在浏览器中输入以下网址:
Z
zhangjinchao01 已提交
100

Y
yi.wu 已提交
101
.. code-block:: text
Z
zhangjinchao01 已提交
102

Y
yi.wu 已提交
103
    http://localhost:8888/
Z
zhangjinchao01 已提交
104

Y
yi.wu 已提交
105
就这么简单,享受您的旅程!
Z
zhangjinchao01 已提交
106

107 108
通过Docker容器开发PaddlePaddle
------------------------------
Z
zhangjinchao01 已提交
109

Y
yi.wu 已提交
110 111 112
开发人员可以在Docker开发镜像中开发PaddlePaddle。这样开发人员可以以一致的方式在不同的平台上工作 - Linux,Mac OS X和Windows。

1. 构建开发镜像
L
liaogang 已提交
113

114
   .. code-block:: bash
L
liaogang 已提交
115

116 117
      git clone --recursive https://github.com/PaddlePaddle/Paddle
      cd Paddle
Y
yi.wu 已提交
118
      docker build -t paddle:dev .
L
liaogang 已提交
119 120


Y
update  
yi.wu 已提交
121
   请注意,默认情况下,:code:`docker build` 不会将源码导入到镜像中并编译它。如果我们想这样做,需要构建完开发镜像,然后执行:
L
liaogang 已提交
122

123
   .. code-block:: bash
L
liaogang 已提交
124

Y
yi.wu 已提交
125
      docker run -v $PWD:/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=ON" -e "TEST=OFF" paddle:dev
L
liaogang 已提交
126

Z
zhangjinchao01 已提交
127

128
2. 运行开发环境
Z
zhangjinchao01 已提交
129

130
   当我们编译好了 :code:`paddle:dev`, 我们可以在docker容器里做开发,源代码可以通过挂载本地文件来被载入Docker的开发环境里面:
Y
yi.wu 已提交
131

132
   .. code-block:: bash
Z
zhangjinchao01 已提交
133

Y
yi.wu 已提交
134
      docker run -d -p 2202:22 -v $PWD:/paddle paddle:dev sshd
Z
zhangjinchao01 已提交
135

136
   以上代码会启动一个带有PaddlePaddle开发环境的docker容器,源代码会被挂载到 :code:`/paddle` 。
Z
zhangjinchao01 已提交
137

Y
yi.wu 已提交
138 139
   以上的 :code:`docker run` 命令其实会启动一个在2202端口监听的SSHD服务器。这样,我们就能SSH进入我们的开发容器了:

140
   .. code-block:: bash
Z
zhangjinchao01 已提交
141

142
      ssh root@localhost -p 2202
Z
zhangjinchao01 已提交
143

144
3. 在Docker开发环境中编译与安装PaddlPaddle代码
Z
zhangjinchao01 已提交
145

146
   当在容器里面的时候,可以用脚本 :code:`paddle/scripts/docker/build.sh` 来编译、安装与测试PaddlePaddle:
Y
yi.wu 已提交
147

148
   .. code-block:: bash
Y
yi.wu 已提交
149

150
      /paddle/paddle/scripts/docker/build.sh
Z
zhangjinchao01 已提交
151

152
   以上指令会在 :code:`/paddle/build` 中编译PaddlePaddle。通过以下指令可以运行单元测试:
Y
yi.wu 已提交
153

154
   .. code-block:: bash
155

156 157
      cd /paddle/build
      ctest
158 159 160 161 162


文档
----

Y
yi.wu 已提交
163
Paddle的Docker开发镜像带有一个通过 `woboq code browser
164 165 166 167 168 169
<https://github.com/woboq/woboq_codebrowser>`_ 生成的HTML版本的C++源代码,便于用户浏览C++源码。

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

.. code-block:: bash

Y
yi.wu 已提交
170
   docker run -d --name paddle-cpu-doc paddle:<version>-dev
171 172 173
   docker run -d --volumes-from paddle-cpu-doc -p 8088:80 nginx

接着我们就能够打开浏览器在 http://localhost:8088/paddle/ 浏览代码。