docker_install_cn.rst 5.6 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


7 8
通过Docker容器开发PaddlePaddle
------------------------------
Z
zhangjinchao01 已提交
9

10
开发人员可以在Docker中开发PaddlePaddle。这样开发人员可以以一致的方式在不同的平台上工作 - Linux,Mac OS X和Windows。
Z
zhangjinchao01 已提交
11

12 13 14
1. 将开发环境构建为Docker镜像
   
   .. code-block:: bash
Z
zhangjinchao01 已提交
15

16 17 18
      git clone --recursive https://github.com/PaddlePaddle/Paddle
      cd Paddle
      docker build -t paddle:dev -f paddle/scripts/docker/Dockerfile .
Z
zhangjinchao01 已提交
19

20

21
   请注意,默认情况下,:code:`docker build` 不会将源码导入到镜像中并编译它。如果我们想这样做,需要设置一个参数:
22

23
   .. code-block:: bash
24

25
      docker build -t paddle:dev -f paddle/scripts/docker/Dockerfile --build-arg BUILD_AND_INSTALL=ON .
26 27


28
2. 运行开发环境
29

30 31 32
   当我们编译好了 :code:`paddle:dev`, 我们可以在docker容器里做开发,源代码可以通过挂载本地文件来被载入Docker的开发环境里面:
   
   .. code-block:: bash
33

34
      docker run -d -p 2202:22 -v $PWD:/paddle paddle:dev
Z
zhangjinchao01 已提交
35

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

38 39 40
   请注意, :code:`paddle:dev` 的默认入口是 :code:`sshd` 。以上的 :code:`docker run` 命令其实会启动一个在2202端口监听的SSHD服务器。这样,我们就能SSH进入我们的开发容器了:
   
   .. code-block:: bash
Z
zhangjinchao01 已提交
41

42
      ssh root@localhost -p 2202
Z
zhangjinchao01 已提交
43

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

46 47 48 49 50
   当在容器里面的时候,可以用脚本 :code:`paddle/scripts/docker/build.sh` 来编译、安装与测试PaddlePaddle:
   
   .. code-block:: bash
		      
      /paddle/paddle/scripts/docker/build.sh
Z
zhangjinchao01 已提交
51

52 53 54
   以上指令会在 :code:`/paddle/build` 中编译PaddlePaddle。通过以下指令可以运行单元测试:
   
   .. code-block:: bash
Z
zhangjinchao01 已提交
55

56 57
      cd /paddle/build
      ctest
Z
zhangjinchao01 已提交
58

59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
4. 在Docker容器中运行PaddlePaddle书籍

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

   PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nodebook。
   如果您想要更深入了解deep learning,PaddlePaddle书籍一定是您最好的选择。
   
   当您进入容器内之后,只用运行以下命令:

   .. code-block:: bash
		   
      jupyter notebook

   然后在浏览器中输入以下网址:
      
   .. code-block:: text

      http://localhost:8888/

   就这么简单,享受您的旅程!
Z
zhangjinchao01 已提交
79

80 81
纯CPU和GPU的docker镜像
----------------------
Z
zhangjinchao01 已提交
82

83
对于每一个PaddlePaddle版本,我们都会发布两个Docker镜像:纯CPU的和GPU的。我们通过设置 `dockerhub.com <https://hub.docker.com/r/paddledev/paddle/>`_ 自动运行以下两个命令:
Z
zhangjinchao01 已提交
84

85
.. code-block:: bash
Z
zhangjinchao01 已提交
86

87 88
   docker build -t paddle:cpu -f paddle/scripts/docker/Dockerfile --build-arg BUILD_AND_INSTALL=ON .
   docker build -t paddle:gpu -f paddle/scripts/docker/Dockerfile.gpu --build-arg BUILD_AND_INSTALL=ON .
Z
zhangjinchao01 已提交
89

90
以交互容器方式运行纯CPU的镜像:
Z
zhangjinchao01 已提交
91

92
.. code-block:: bash
Z
zhangjinchao01 已提交
93

94
    docker run -it --rm paddledev/paddle:0.10.0rc1-cpu /bin/bash
Z
zhangjinchao01 已提交
95

96
或者,可以以后台进程方式运行容器:
Z
zhangjinchao01 已提交
97

98
.. code-block:: bash
Z
zhangjinchao01 已提交
99

100
    docker run -d -p 2202:22 paddledev/paddle:0.10.0rc1-cpu
L
liaogang 已提交
101

102
然后用密码 :code:`root` SSH进入容器:
L
liaogang 已提交
103

104
.. code-block:: bash
L
liaogang 已提交
105

106
    ssh -p 2202 root@localhost
L
liaogang 已提交
107

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


111
以上方法在GPU镜像里也能用-只是请不要忘记按装CUDA驱动,以及告诉Docker:
L
liaogang 已提交
112

113
.. code-block:: bash
Z
zhangjinchao01 已提交
114

115 116
    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 {}:{}')
117
    docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:0.10.0rc1-gpu
Z
zhangjinchao01 已提交
118 119


120 121
非AVX镜像
---------
Z
zhangjinchao01 已提交
122

123
纯CPU镜像以及GPU镜像都会用到AVX指令集,但是2008年之前生产的旧电脑不支持AVX。以下指令能检查Linux电脑是否支持AVX:
Z
zhangjinchao01 已提交
124 125


126
.. code-block:: bash
Z
zhangjinchao01 已提交
127

128
   if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
Z
zhangjinchao01 已提交
129

130
如果输出是No,我们就需要手动编译一个非AVX版本的镜像:
Z
zhangjinchao01 已提交
131

132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
.. code-block:: bash

   cd ~
   git clone https://github.com/PaddlePaddle/Paddle.git
   cd Paddle
   docker build --build-arg WITH_AVX=OFF -t paddle:cpu-noavx -f paddle/scripts/docker/Dockerfile .
   docker build --build-arg WITH_AVX=OFF -t paddle:gpu-noavx -f paddle/scripts/docker/Dockerfile.gpu .


文档
----

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

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

.. code-block:: bash

151
   docker run -d --name paddle-cpu-doc paddle:0.10.0rc1-cpu
152 153 154
   docker run -d --volumes-from paddle-cpu-doc -p 8088:80 nginx

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