@ -4,16 +4,26 @@ PaddlePaddle的Docker容器使用方式
PaddlePaddle目前唯一官方支持的运行的方式是Docker容器。因为Docker能在所有主要操作系统( 包括Linux, Mac OS X和Windows) 上运行。 请注意,您需要更改 `Dockers设置 <https://github.com/PaddlePaddle/Paddle/issues/627> `_ 才能充分利用Mac OS X和Windows上的硬件资源。
PaddlePaddle发布的d ocker镜像使用说明
PaddlePaddle发布的D ocker镜像使用说明
------------------------------
对于每一个PaddlePaddle版本, 我们都会发布两种Docker镜像: 开发镜像、运行镜像。运行镜像包括纯CPU版本和GPU版本以及其对应的非AVX版本。
我们会在 `dockerhub.com <https://hub.docker.com/r/paddledev/paddle/> `_ 提供最新的docker镜像, 可以在"tags"标签下找到最新的Paddle镜像版本。
我们把PaddlePaddle的编译环境打包成一个镜像, 称为开发镜像, 里面涵盖了
PaddlePaddle需要的所有编译工具。把编译出来的PaddlePaddle也打包成一个镜
像, 称为生产镜像, 里面涵盖了PaddlePaddle运行所需的所有环境。每次
PaddlePaddle发布新版本的时候都会发布对应版本的生产镜像以及开发镜像。运
行镜像包括纯CPU版本和GPU版本以及其对应的非AVX版本。我们会在
`dockerhub.com <https://hub.docker.com/r/paddledev/paddle/> `_ 提供最新
的Docker镜像, 可以在"tags"标签下找到最新的Paddle镜像版本。为了方便在国
内的开发者下载Docker镜像, 我们提供了国内的镜像服务器供大家使用。如果您
在国内, 请把文档里命令中的paddlepaddle/paddle替换成
docker.paddlepaddle.org/paddle。
1. 开发镜像::code: `paddlepaddle/paddle:<version>-dev`
这个镜像包含了Paddle相关的开发工具以及编译和运行环境。用户可以使用开发镜像代替配置本地环境, 完成开发, 编译, 发布,
文档编写等工作。由于不同的Paddle的版本可能需要不同的依赖和工具, 所以如果需要自行配置开发环境需要考虑版本的因素。
开发镜像包含了以下工具:
- gcc/clang
- nvcc
- Python
@ -27,7 +37,7 @@ PaddlePaddle发布的docker镜像使用说明
.. code-block :: bash
docker run -it --rm paddledev /paddle:<version> -dev /bin/bash
docker run -it --rm paddlepad dl e/paddle:<version> -dev /bin/bash
或者,可以以后台进程方式运行容器:
@ -43,7 +53,8 @@ PaddlePaddle发布的docker镜像使用说明
SSH方式的一个优点是我们可以从多个终端进入容器。比如, 一个终端运行vi, 另一个终端运行Python。另一个好处是我们可以把PaddlePaddle容器运行在远程服务器上, 并在笔记本上通过SSH与其连接。
2. 运行镜像: 根据CPU、GPU和非AVX区分了如下4个镜像:
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>`
@ -72,25 +83,33 @@ PaddlePaddle发布的docker镜像使用说明
export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:<version> -gpu
3. 使用运行镜像发布你的AI程序
3. 运行以及发布您的AI程序
假设您已经完成了一个AI训练的python程序 :code: `a.py` ,这个程序是您在开发机上使用开发镜像完成开发。此时您可以运行这个命令在开发机上进行测试运行:
.. code-block :: bash
docker run -it -v $PWD:/work paddle /work/a.py
如果要使用GPU, 请运行:
.. code-block :: bash
nvidia-docker run -it -v $PWD:/work paddle /work/a.py
这里`a.py` 包含的所有依赖假设都可以在Paddle的运行容器中。如果需要包含更多的依赖、或者需要发布您的应用的镜像, 可以编写`Dockerfile` 使用`FROM paddledev/paddle:<version>`
创建和发布自己的AI程序镜像。
运行PaddlePaddle书籍
运行PaddlePaddle Book
---------------------
Jupyter Notebook是一个开源的web程序, 大家可以通过它制作和分享带有代码、公式、图表、文字的交互式文档。用户可以通过网页浏览文档。
PaddlePaddle书籍 是为用户和开发者制作的一个交互式的Jupyter Nodebook。
如果您想要更深入了解deep learning, PaddlePaddle书籍 一定是您最好的选择。
PaddlePaddle Book 是为用户和开发者制作的一个交互式的Jupyter Nodebook。
如果您想要更深入了解deep learning, PaddlePaddle Book 一定是您最好的选择。
我们提供可以直接运行PaddlePaddle书籍的d ocker镜像, 直接运行:
我们提供可以直接运行PaddlePaddle Book的D ocker镜像, 直接运行:
.. code-block :: bash
@ -109,53 +128,44 @@ PaddlePaddle书籍是为用户和开发者制作的一个交互式的Jupyter Nod
开发人员可以在Docker开发镜像中开发PaddlePaddle。这样开发人员可以以一致的方式在不同的平台上工作 - Linux, Mac OS X和Windows。
1. 构建开发镜像
1. 制作PaddlePaddle开发镜像
PaddlePaddle每次发布新版本都会发布对应的开发镜像供开发者直接使用。这里介绍如生成造这个开发镜像。
生成Docker镜像的方式有两个, 一个是直接把一个容器转换成镜像, 另一个是创建Dockerfile并运行docker build指令按照Dockerfile生成镜像。第一个方法的好处是简单快捷, 适合自己实验, 可以快速迭代。第二个方法的好处是Dockerfile可以把整个生成流程描述很清楚, 其他人很容易看懂镜像生成过程, 持续集成系统也可以简单地复现这个过程。我们采用第二个方法。Dockerfile位于PaddlePaddle repo的根目录。生成生产镜像只需要运行:
.. code-block :: bash
git clone --recursive https://github.com/PaddlePaddle/Paddle
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
docker build -t paddle:dev .
docker build这个命令的-t指定了生成的镜像的名字, 这里我们用paddle:dev。到此, PaddlePaddle开发镜像就被构建完毕了。
请注意,默认情况下,:code: `docker build` 不会将源码导入到镜像中并编译它。如果我们想这样做,需要构建完开发镜像,然后执行:
2. 制作PaddlePaddle生产镜像
.. code-block :: bash
docker run -v $PWD:/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=ON" -e "TEST=OFF" paddle:dev
2. 运行开发环境
当我们编译好了 :code: `paddle:dev` , 我们可以在docker容器里做开发, 源代码可以通过挂载本地文件来被载入Docker的开发环境里面:
生产镜像的生成分为两步,第一步是运行:
.. code-block :: bash
docker run -d -p 2202:22 -v $PWD:/paddle paddle:dev sshd
docker run -v $(pwd):/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=OFF" -e "WITH_TEST=ON" paddle:dev
以上代码会启动一个带有PaddlePaddle开发环境的docker容器, 源代码会被挂载到 :code: `/paddle` 。
以上命令会编译PaddlePaddle, 生成运行程序, 以及生成创建生产镜像的Dockerfile。所有生成的的文件都在build目录下。“WITH_GPU”控制生成的生产镜像是否支持GPU, “WITH_AVX”控制生成的生产镜像是否支持AVX, ”WITH_TEST“控制是否生成单元测试。
以上的 :code: `docker run` 命令其实会启动一个在2202端口监听的SSHD服务器。这样, 我们就能SSH进入我们的开发容器了 :
第二步是运行 :
.. code-block :: bash
ssh root@localhost -p 2202
docker build -t paddle:prod -f build/Dockerfile ./build
3. 在Docker开发环境中编译与安装PaddlPaddle代码
以上命令会按照生成的Dockerfile把生成的程序拷贝到生产镜像中并做相应的配置, 最终生成名为paddle:prod的生产镜像。
当在容器里面的时候,可以用脚本 :code: `paddle/scripts/docker/build.sh` 来编译、安装与测试PaddlePaddle:
3. 运行单元测试
.. code-block :: bash
/paddle/paddle/scripts/docker/build.sh
以上指令会在 :code: `/paddle/build` 中编译PaddlePaddle。通过以下指令可以运行单元测试:
运行以下指令:
.. code-block :: bash
cd /paddle/build
ctest
docker run -it -v $(pwd):/paddle paddle:dev bash -c "cd /paddle/build && ctest"
文档
----