附录

编译依赖表

依赖包名称版本说明安装命令
CMake3.10, 3.11, 3.15, 3.16(推荐),3.173.12/3.13/3.14 版本存在官方Bug,请跳过该版本
GCC (Linux Only)4.8 / 5.4推荐使用CentOS的devtools2
Clang (MacOS Only)9.0及以上通常使用MacOS 10.11及以上的系统对应的Clang版本即可
Python(64 bit)2.7.x. 或 3.5+.x依赖libpython2.7.so 或 libpython3.5+.soapt install python-dev yum install python-devel 如果安装python3请访问Python 官网
SWIG最低 2.0apt install swig yum install swig
wgetanyapt install wget yum install wget
openblasany可选
pip>=20.2.2apt install python-pip yum install python-pip
numpy>=1.12.0pip install numpy
protobuf>=3.1.0pip install protobuf
wheelanypip install wheel
patchELFanyapt install patchelf 或参见github patchELF 官方文档
go>=1.8可选
setuptools>= 28.0.0
unrarbrew install unrar (For MacOS), apt-get install unrar (For Ubuntu)

编译选项表

选项说明默认值
WITH_GPU是否支持GPUON
WITH_AVX是否编译含有AVX指令集的PaddlePaddle二进制文件ON
WITH_PYTHON是否内嵌PYTHON解释器ON
WITH_TESTING是否开启单元测试OFF
WITH_MKL是否使用MKL数学库,如果为否则是用OpenBLASON
WITH_SYSTEM_BLAS是否使用系统自带的BLASOFF
WITH_DISTRIBUTE是否编译带有分布式的版本OFF
WITH_BRPC_RDMA是否使用BRPC RDMA作为RPC协议OFF
ON_INFER是否打开预测优化OFF
CUDA_ARCH_NAME是否只针对当前CUDA架构编译All:编译所有可支持的CUDA架构 可选:Auto 自动识别当前环境的架构编译
TENSORRT_ROOT指定TensorRT路径Windows下默认值为’/‘,Linux下默认值为 ‘/usr/‘

BLAS

PaddlePaddle支持 MKLOpenBlAS 两种BLAS库。默认使用MKL。如果使用MKL并且机器含有AVX2指令集,还会下载MKL-DNN数学库,详细参考这里

如果关闭MKL,则会使用OpenBLAS作为BLAS库。

CUDA/cuDNN

PaddlePaddle在编译时/运行时会自动找到系统中安装的CUDA和cuDNN库进行编译和执行。 使用参数 -DCUDA_ARCH_NAME=Auto 可以指定开启自动检测SM架构,加速编译。

PaddlePaddle可以使用cuDNN v5.1之后的任何一个版本来编译运行,但尽量请保持编译和运行使用的cuDNN是同一个版本。 我们推荐使用最新版本的cuDNN。

编译选项的设置

PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。cmake编译时,首先在系统路径( /usr/lib/usr/local/lib )中搜索这几个库,同时也会读取相关路径变量来进行搜索。 通过使用-D命令可以设置,例如:

cmake .. -DWITH_GPU=ON -DWITH_TESTING=OFF -DCUDNN_ROOT=/opt/cudnnv5

注意:这几个编译选项的设置,只在第一次cmake的时候有效。如果之后想要重新设置,推荐清理整个编译目录( rm -rf )后,再指定。

安装包列表

版本号版本说明
paddlepaddle==[版本号] 例如 paddlepaddle==2.0.0只支持CPU对应版本的PaddlePaddle,具体版本请参见Pypi
paddlepaddle-gpu==[版本号] 例如 paddlepaddle-gpu==2.0.0默认安装支持CUDA 10.0和cuDNN 7的对应[版本号]的PaddlePaddle安装包

您可以在 Release History 中找到PaddlePaddle-gpu的各个发行版本。

其中postXX 对应的是CUDA和cuDNN的版本,postXX之前的数字代表Paddle的版本

需要注意的是,命令中 paddlepaddle-gpu==2.0.0 在windows环境下,会默认安装支持CUDA 10.2和cuDNN 7的对应[版本号]的PaddlePaddle安装包

多版本whl包列表-Release

版本说明cp27-cp27mucp27-cp27mcp35-cp35mcp36-cp36mcp37-cp37mcp38-cp38
cpu-mklpaddlepaddle-2.0.0-cp27-cp27mu-linux_x86_64.whl-paddlepaddle-2.0.0-cp35-cp35m-linux_x86_64.whlpaddlepaddle-2.0.0-cp36-cp36m-linux_x86_64.whlpaddlepaddle-2.0.0-cp37-cp37m-linux_x86_64.whlpaddlepaddle-2.0.0-cp38-cp38-linux_x86_64.whl
cuda9.0_cudnn7-mklpaddlepaddle_gpu-2.0.0.post90-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-2.0.0.post90-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post90-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post90-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post90-cp38-cp38-linux_x86_64.whl
cuda10.0_cudnn7-mklpaddlepaddle_gpu-2.0.0.post100-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-2.0.0.post100-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post100-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post100-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post100-cp38-cp38-linux_x86_64.whl
cuda10.1_cudnn7-mklpaddlepaddle_gpu-2.0.0.post101-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-2.0.0.post101-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post101-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post101-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post101-cp38-cp38-linux_x86_64.whl
cuda10.2_cudnn7-mklpaddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-2.0.0-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0-cp38-cp38-linux_x86_64.whl
cuda11.0-cudnn8-mklpaddlepaddle_gpu-2.0.0.post110-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-2.0.0.post110-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post110-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post110-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-2.0.0.post110-cp38-cp38-linux_x86_64.whl
cuda10.0-cudnn7.6-trt6.0.1.5---paddlepaddle_gpu-2.0.0.post100-cp36-cp36m-linux_x86_64.whl--
cuda10.1-cudnn7.6-trt6.0.1.5paddlepaddle_gpu-2.0.0.post101-cp27-cp27mu-linux_x86_64.whl--paddlepaddle_gpu-2.0.0.post101-cp36-cp36m-linux_x86_64.whl--
cuda10.2-cudnn8.0-trt7.1.3paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_x86_64.whl--paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_x86_64.whl--
2.0.0-nv-jetson-jetpack4.3-allpaddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl--paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl--
2.0.0-nv-jetson-jetpack4.3-nanopaddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl--paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl--
2.0.0-nv-jetson-jetpack4.3-tx2paddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl--paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl--
2.0.0-nv-jetson-jetpack4.3-xavierpaddlepaddle_gpu-2.0.0-cp27-cp27mu-linux_aarch64.whl--paddlepaddle_gpu-2.0.0-cp36-cp36m-linux_aarch64.whl--
win-cpu-mkl-avx-paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whlpaddlepaddle-2.0.0-cp35-cp35m-win_amd64.whlpaddlepaddle-2.0.0-cp36-cp36m-win_amd64.whlpaddlepaddle-2.0.0-cp37-cp37m-win_amd64.whlpaddlepaddle-2.0.0-cp38-cp38-win_amd64.whl
win-cpu-mkl-noavx-paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl----
win-cpu-openblas-avx-paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl-paddlepaddle-2.0.0-cp36-cp36m-win_amd64.whl--
win-cpu-openblas-noavx-paddlepaddle-2.0.0-cp27-cp27m-win_amd64.whl----
win-cuda9.0-cudnn7-mkl-avx-paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl
win-cuda9.0-cudnn7-mkl-noavx-paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl----
win-cuda9.0-cudnn7-openblas-avx-paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl-paddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whl--
win-cuda9.0-cudnn7-openblas-noavx-paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl----
win-cuda10.0-cudnn7-mkl-avx-paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl
win-cuda10.0-cudnn7-mkl-noavx-paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl----
win-cuda10.1-cudnn7-mkl-avx-paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl
win-cuda10.1-cudnn7-mkl-noavx-paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl----
win-cuda10.2-cudnn7-mkl-avx-paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whl
win-cuda10.2-cudnn7-mkl-noavx-paddlepaddle_gpu-2.0.0-cp27-cp27m-win_amd64.whl----
win-cuda11.0-cudnn8-mkl-avx--paddlepaddle_gpu-2.0.0-cp35-cp35m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp36-cp36m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp37-cp37m-win_amd64.whlpaddlepaddle_gpu-2.0.0-cp38-cp38m-win_amd64.whl
mac-cpu-paddlepaddle-2.0.0-cp27-cp27m-macosx_10_6_intel.whlpaddlepaddle-2.0.0-cp35-cp35m-macosx_10_6_intel.whlpaddlepaddle-2.0.0-cp36-cp36m-macosx_10_6_intel.whlpaddlepaddle-2.0.0-cp37-cp37m-macosx_10_6_intel.whlpaddlepaddle-2.0.0-cp38-cp38-macosx_10_14_x86_64.whl

表格说明

  • 纵轴

cpu-mkl: 支持CPU训练和预测,使用Intel mkl数学库

cuda10_cudnn7-mkl: 支持GPU训练和预测,使用Intel mkl数学库

  • 横轴

一般是类似于“cp27-cp27mu”的形式,其中:

27:python tag,指python2.7,类似的还有“35”、“36”、“37”等

mu:指unicode版本python,若为m则指非unicode版本python

  • 安装包命名规则

每个安装包都有一个专属的名字,它们是按照Python的官方规则 来命名的,形式如下:

{distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl

其中build tag可以缺少,其他部分不能缺少

distribution: wheel名称version: 版本,例如0.14.0 (要求必须是数字格式)

python tag: 类似’py27’, ‘py2’, ‘py3’,用于标明对应的python版本

abi tag: 类似’cp33m’, ‘abi3’, ‘none’

platform tag: 类似 ‘linux_x86_64’, ‘any’

多版本whl包列表-dev

版本说明cp27-cp27mucp27-cp27mcp35-cp35mcp36-cp36mcp37-cp37mcp38-cp38
cpu-mklpaddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl-paddlepaddle-latest-cp35-cp35m-linux_x86_64.whlpaddlepaddle-latest-cp36-cp36m-linux_x86_64.whlpaddlepaddle-latest-cp37-cp37m-linux_x86_64.whlpaddlepaddle-latest-cp38-cp38-linux_x86_64.whl
cpu-openblaspaddlepaddle-latest-cp27-cp27mu-linux_x86_64.whl-paddlepaddle-latest-cp35-cp35m-linux_x86_64.whlpaddlepaddle-latest-cp36-cp36m-linux_x86_64.whlpaddlepaddle-latest-cp37-cp37m-linux_x86_64.whlpaddlepaddle-latest-cp38-cp38-linux_x86_64.whl
cuda9-cudnn7-openblaspaddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl
cuda9-cudnn7-mklpaddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl
cuda10.0-cudnn7-mklpaddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl

多版本whl包列表(gcc8.2)-develop

版本说明cp27-cp27mucp27-cp27mcp35-cp35mcp36-cp36mcp37-cp37mcp38-cp38
cuda10.1-cudnn7-mklpaddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp38-cp38m-linux_x86_64.whl
cuda10.2-cudnn7-mklpaddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl
cuda11.0-cudnn8-mklpaddlepaddle_gpu-latest-cp27-cp27mu-linux_x86_64.whl-paddlepaddle_gpu-latest-cp35-cp35m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp36-cp36m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whlpaddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl

在Docker中执行PaddlePaddle训练程序

假设您已经在当前目录(比如在/home/work)编写了一个PaddlePaddle的程序: train.py (可以参考 PaddlePaddleBook 编写),就可以使用下面的命令开始执行训练:

  1. cd /home/work
  1. docker run -it -v $PWD:/work hub.baidubce.com/paddlepaddle/paddle /work/train.py

上述命令中,-it 参数说明容器已交互式运行;-v $PWD:/work 指定将当前路径(Linux中PWD变量会展开为当前路径的绝对路径)挂载到容器内部的:/work 目录: hub.baidubce.com/paddlepaddle/paddle 指定需要使用的容器; 最后/work/train.py为容器内执行的命令,即运行训练程序。

当然,您也可以进入到Docker容器中,以交互式的方式执行或调试您的代码:

  1. docker run -it -v $PWD:/work hub.baidubce.com/paddlepaddle/paddle /bin/bash
  1. cd /work
  1. python train.py

注:PaddlePaddle Docker镜像为了减小体积,默认没有安装vim,您可以在容器中执行 apt-get install -y vim 安装后,在容器中编辑代码。

使用Docker启动PaddlePaddle Book教程

使用Docker可以快速在本地启动一个包含了PaddlePaddle官方Book教程的Jupyter Notebook,可以通过网页浏览。 PaddlePaddle Book是为用户和开发者制作的一个交互式的Jupyter Notebook。 如果您想要更深入了解deep learning,可以参考PaddlePaddle Book。 大家可以通过它阅读教程,或者制作和分享带有代码、公式、图表、文字的交互式文档。

我们提供可以直接运行PaddlePaddle Book的Docker镜像,直接运行:

  1. docker run -p 8888:8888 hub.baidubce.com/paddlepaddle/book

国内用户可以使用下面的镜像源来加速访问:

  1. docker run -p 8888:8888 hub.baidubce.com/paddlepaddle/book

然后在浏览器中输入以下网址:

  1. http://localhost:8888/

就这么简单,享受您的旅程!如有其他问题请参见FAQ

使用Docker执行GPU训练

为了保证GPU驱动能够在镜像里面正常运行,我们推荐使用 nvidia-docker来运行镜像。 请不要忘记提前在物理机上安装GPU最新驱动。

  1. nvidia-docker run -it -v $PWD:/work hub.baidubce.com/paddlepaddle/paddle:latest-gpu /bin/bash

注: 如果没有安装nvidia-docker,可以尝试以下的方法,将CUDA库和Linux设备挂载到Docker容器内:

  1. export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') \
  2. $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
  3. export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
  4. docker run ${CUDA_SO} \
  5. ${DEVICES} -it hub.baidubce.com/paddlepaddle/paddle:latest-gpu