diff --git a/doc/getstarted/build_and_install/docker_install.rst b/doc/getstarted/build_and_install/docker_install.rst index 5f272aabd7c2213b89f6a6b42be34c9c492d89bd..fefa337f835bebeecc26a452612feb8b252d3eb2 100644 --- a/doc/getstarted/build_and_install/docker_install.rst +++ b/doc/getstarted/build_and_install/docker_install.rst @@ -1,81 +1,83 @@ -Using and Building Docker Images -================================ +PaddlePaddle in Docker Containers +================================= -We release PaddlePaddle in the form of `Docker `_ images on `dockerhub.com `_. Running as Docker containers is currently the only officially-supported way to running PaddlePaddle. +Docker container is currently the only officially-supported way to +running PaddlePaddle. This is reasonable as Docker now runs on all +major operating systems including Linux, Mac OS X, and Windows. +Please be aware that you will need to change `Dockers settings +`_ to make full use +of your hardware resource on Mac OS X and Windows. -Run Docker images ------------------ -For each version of PaddlePaddle, we release 4 variants of Docker images: +CPU-only and GPU Images +----------------------- -+-----------------+-------------+-------+ -| | CPU AVX | GPU | -+=================+=============+=======+ -| cpu | yes | no | -+-----------------+-------------+-------+ -| cpu-noavx | no | no | -+-----------------+-------------+-------+ -| gpu | yes | yes | -+-----------------+-------------+-------+ -| gpu-noavx | no | yes | -+-----------------+-------------+-------+ +For each version of PaddlePaddle, we release 2 Docker images, a +CPU-only one and a CUDA GPU one. We do so by configuring +`dockerhub.com `_ +automatically runs the following commands: -We run the following command on Linux to check if the CPU supports :code:`AVX`. +.. code-block:: base -.. code-block:: bash + docker build -t paddle:cpu-noavx -f paddle/scripts/docker/Dockerfile . + docker build -t paddle:gpu-noavx -f paddle/scripts/docker/Dockerfile.gpu . - if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi -On Mac OS X, we need to run +To run the CPU-only image as an interactive container: .. code-block:: bash - sysctl -a | grep machdep.cpu.leaf7_features - + docker run -it --rm paddledev/paddle:cpu-latest /bin/bash -Once we determine the proper variant, we can cope with the Docker image tag name by appending the version number. For example, the following command runs the AVX-enabled image of the most recent version: +or, we can run it as a daemon container .. code-block:: bash - docker run -it --rm paddledev/paddle:cpu-latest /bin/bash + docker run -d -p 2202:22 paddledev/paddle:cpu-latest -To run a GPU-enabled image, you need to install CUDA and let Docker knows about it: +and SSH to this container using password :code:`root`: .. code-block:: bash - 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 {}:{}') - docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:gpu-latest - -The default entry point of all our Docker images starts the OpenSSH server. To run PaddlePaddle and to expose OpenSSH port to 2202 on the host computer: + ssh -p 2202 root@localhost -.. code-block:: bash +An advantage of using SSH is that we can connect to PaddlePaddle from +more than one terminals. For example, one terminal running vi and +another one running Python interpreter. Another advantage is that we +can run the PaddlePaddle container on a remote server and SSH to it +from a laptop. - docker run -d -p 2202:22 paddledev/paddle:cpu-latest -Then we can login to the container using username :code:`root` and password :code:`root`: +Above methods work with the GPU image too -- just please don't forget +to install CUDA driver and let Docker knows about it: .. code-block:: bash - ssh -p 2202 root@localhost + 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 {}:{}') + docker run ${CUDA_SO} ${DEVICES} -it paddledev/paddle:gpu-latest -Build Docker images -------------------- +Non-AVX Images +-------------- -Developers might want to build Docker images from their local commit or from a tagged version. Suppose that your local repo is at :code:`~/work/Paddle`, the following steps builds a cpu variant from your current work: +Please be aware that the CPU-only and the GPU images both use the AVX +instruction set, but old computers produced before 2008 do not support +AVX. The following command checks if your Linux computer supports +AVX: .. code-block:: bash - cd ~/Paddle - ./paddle/scripts/docker/generates.sh # Use m4 to generate Dockerfiles for each variant. - docker build -t paddle:latest -f ./paddle/scripts/docker/Dockerfile.cpu + if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi + -As a release engineer, you might want to build Docker images for a certain version and publish them to dockerhub.com. You can do this by switching to the right Git tag, or create a new tag, before running `docker build`. For example, the following commands build Docker images for v0.9.0: +If it doesn't, we will need to build non-AVX images manually from +source code: .. code-block:: bash - cd ~/Paddle - git checkout tags/v0.9.0 - ./paddle/scripts/docker/generates.sh # Use m4 to generate Dockerfiles for each variant. - docker build -t paddle:cpu-v0.9.0 -f ./paddle/scripts/docker/Dockerfile.cpu + cd ~ + git clone github.com/PaddlePaddle/Paddle + 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 .