附录

飞桨支持的 Nvidia GPU 架构及安装方式

GPU 架构 Compute Capability 对应 GPU 硬件型号 请下载以下 CUDA 版本的飞桨安装包
Fermi sm_20 GeForce 400, 500, 600, GT-630 不支持
Kepler sm_30 GeForce 700, GT-730 不支持
Kepler sm_35 Tesla K40 CUDA10
Kepler sm_37 Tesla K80 CUDA10
Maxwell sm_50 Tesla/Quadro M series CUDA10、CUDA11
Maxwell sm_52 Quadro M6000 , GeForce 900, GTX-970, GTX-980, GTX Titan X CUDA10、CUDA11
Pascal sm_60 Quadro GP100, Tesla P100, DGX-1 CUDA10、CUDA11
Pascal sm_61 GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030 (GP108), GT 1010 (GP108) Titan Xp, Tesla P40, Tesla P4 CUDA10、CUDA11
Volta sm_70 DGX-1 with Volta, Tesla V100, GTX 1180 (GV104), Titan V, Quadro GV100 CUDA10、CUDA11
Turing sm_75 GTX/RTX Turing – GTX 1660 Ti, RTX 2060, RTX 2070, RTX 2080, Titan RTX, Quadro RTX 4000, Quadro RTX 5000, Quadro RTX 6000, Quadro RTX 8000, Quadro T1000/T2000, Tesla T4 CUDA10、CUDA11
Ampere sm_80 NVIDIA A100, GA100, NVIDIA DGX-A100 CUDA11
Ampere sm_86 Tesla GA10x cards, RTX Ampere – RTX 3080, GA102 – RTX 3090, RTX A2000, A3000, RTX A4000, A5000, A6000, NVIDIA A40, GA106 – RTX 3060, GA104 – RTX 3070, GA107 – RTX 3050, RTX A10, RTX A16, RTX A40, A2 Tensor Core GPU CUDA11、CUDA11.2(推荐)



编译依赖表

依赖包名称 版本 说明 安装命令
CMake 3.15, 3.16(推荐),3.17
GCC (Linux Only) 5.4 / 8.2 推荐使用 CentOS 的 devtools2
Clang (MacOS Only) 9.0 及以上 通常使用 MacOS 10.11 及以上的系统对应的 Clang 版本即可
Python(64 bit) 3.6+.x 依赖 libpython3.6+.so 请访问Python 官网
SWIG 最低 2.0 apt install swig yum install swig
wget any apt install wget yum install wget
openblas any 可选
pip >=20.2.2 apt install python-pip yum install python-pip
numpy >=1.12.0 pip install numpy
protobuf >=3.1.0 pip install protobuf
wheel any pip install wheel
patchELF any apt install patchelf 或参见 github patchELF 官方文档
go >=1.8 可选
setuptools >= 28.0.0
unrar brew install unrar (For MacOS), apt-get install unrar (For Ubuntu)



编译选项表

选项 说明 默认值
WITH_GPU 是否支持 CUDA ON
WITH_ROCM 是否支持 ROCM OFF
WITH_AVX 是否编译含有 AVX 指令集的 PaddlePaddle 二进制文件 ON
WITH_PYTHON 是否内嵌 PYTHON 解释器 ON
WITH_TESTING 是否开启单元测试 OFF
WITH_MKL 是否使用 MKL 数学库,如果为否则是用 OpenBLAS ON
WITH_SYSTEM_BLAS 是否使用系统自带的 BLAS OFF
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.4.0 只支持 CPU 对应版本的 PaddlePaddle,具体版本请参见Pypi
paddlepaddle-gpu==[版本号] 例如 paddlepaddle-gpu==2.4.0 默认安装支持 CUDA 10.2 和 cuDNN 7 的对应[版本号]的 PaddlePaddle 安装包

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

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

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



多版本 whl 包列表-Release

版本说明 cp36-cp36m cp37-cp37m cp38-cp38 cp39-cp39 cp310-cp310
cpu-mkl-avx paddlepaddle-2.4.0-cp36-cp36m-linux_x86_64.whl paddlepaddle-2.4.0-cp37-cp37m-linux_x86_64.whl paddlepaddle-2.4.0-cp38-cp38-linux_x86_64.whl paddlepaddle-2.4.0-cp39-cp39-linux_x86_64.whl paddlepaddle-2.4.0-cp310-cp310-linux_x86_64.whl
cpu-openblas-avx - - paddlepaddle-2.4.0-cp38-cp38-linux_x86_64.whl - -
cpu-mkl-noavx - - paddlepaddle-2.4.0-cp38-cp38-linux_x86_64.whl - -
cpu-openblas-noavx - - paddlepaddle-2.4.0-cp38-cp38-linux_x86_64.whl - -
cuda10.2-cudnn7-mkl-gcc8.2-avx paddlepaddle_gpu-2.4.0-cp36-cp36m-linux_x86_64.whl paddlepaddle_gpu-2.4.0-cp37-cp37m-linux_x86_64.whl paddlepaddle_gpu-2.4.0-cp38-cp38-linux_x86_64.whl paddlepaddle_gpu-2.4.0-cp39-cp39-linux_x86_64.whl paddlepaddle_gpu-2.4.0-cp310-cp310-linux_x86_64.whl
cuda10.2-cudnn7-mkl-gcc8.2-noavx - - paddlepaddle_gpu-2.4.0-cp38-cp38-linux_x86_64.whl - -
cuda11.2-cudnn8.1-mkl-gcc8.2-avx paddlepaddle_gpu-2.4.0.post112-cp36-cp36m-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post112-cp37-cp37m-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post112-cp38-cp38-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post112-cp39-cp39-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post112-cp310-cp310-linux_x86_64.whl
cuda11.6-cudnn8.4-mkl-gcc8.2-avx paddlepaddle_gpu-2.4.0.post116-cp36-cp36m-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post116-cp37-cp37m-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post116-cp38-cp38-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post116-cp39-cp39-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post116-cp310-cp310-linux_x86_64.whl
cuda11.7-cudnn8.4-mkl-gcc8.2-avx paddlepaddle_gpu-2.4.0.post117-cp36-cp36m-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post117-cp37-cp37m-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post117-cp38-cp38-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post117-cp39-cp39-linux_x86_64.whl paddlepaddle_gpu-2.4.0.post117-cp310-cp310-linux_x86_64.whl
macos-cpu-openblas paddlepaddle-2.4.0-cp36-cp36m-macosx_10_6_intel.whl paddlepaddle-2.4.0-cp37-cp37m-macosx_10_6_intel.whl paddlepaddle-2.4.0-cp38-cp38-macosx_10_14_x86_64.whl paddlepaddle-2.4.0-cp39-cp39-macosx_10_14_x86_64.whl paddlepaddle-2.4.0-cp310-cp310-macosx_10_14_universal2.whl
macos-cpu-openblas-noavx paddlepaddle-2.4.0-cp36-cp36m-macosx_10_6_intel.whl paddlepaddle-2.4.0-cp37-cp37m-macosx_10_6_intel.whl paddlepaddle-2.4.0-cp38-cp38-macosx_10_14_x86_64.whl paddlepaddle-2.4.0-cp39-cp39-macosx_10_14_x86_64.whl paddlepaddle-2.4.0-cp310-cp310-macosx_10_14_universal2.whl
macos-cpu-openblas-m1 - - paddlepaddle-2.4.0-cp38-cp38-macosx_11_0_arm64.whl paddlepaddle-2.4.0-cp39-cp39-macosx_11_0_arm64.whl paddlepaddle-2.4.0-cp310-cp310-macosx_11_0_arm64.whl
win-cpu-mkl-avx paddlepaddle-2.4.0-cp36-cp36m-win_amd64.whl paddlepaddle-2.4.0-cp37-cp37m-win_amd64.whl paddlepaddle-2.4.0-cp38-cp38-win_amd64.whl paddlepaddle-2.4.0-cp39-cp39-win_amd64.whl paddlepaddle-2.4.0-cp310-cp310-win_amd64.whl
win-cpu-mkl-noavx - - paddlepaddle-2.4.0-cp38-cp38-win_amd64.whl - -
win-cpu-openblas-avx - - paddlepaddle-2.4.0-cp38-cp38-win_amd64.whl - -
win-cpu-openblas-noavx - - paddlepaddle-2.4.0-cp38-cp38-win_amd64.whl - -
win-cuda10.2-cudnn7-mkl-vs2017-avx paddlepaddle_gpu-2.4.0-cp36-cp36m-win_amd64.whl paddlepaddle_gpu-2.4.0-cp37-cp37m-win_amd64.whl paddlepaddle_gpu-2.4.0-cp38-cp38-win_amd64.whl paddlepaddle_gpu-2.4.0-cp39-cp39-win_amd64.whl paddlepaddle_gpu-2.4.0-cp310-cp310-win_amd64.whl
win-cuda10.2-cudnn7-mkl-vs2017-noavx - paddlepaddle_gpu-2.4.0-cp37-cp37m-win_amd64.whl paddlepaddle_gpu-2.4.0-cp38-cp38-win_amd64.whl - -
win-cuda11.2-cudnn8.2-mkl-vs2017-avx paddlepaddle_gpu-2.4.0.post112-cp36-cp36m-win_amd64.whl paddlepaddle_gpu-2.4.0.post112-cp37-cp37m-win_amd64.whl paddlepaddle_gpu-2.4.0.post112-cp38-cp38-win_amd64.whl paddlepaddle_gpu-2.4.0.post112-cp39-cp39-win_amd64.whl paddlepaddle_gpu-2.4.0.post112-cp310-cp310-win_amd64.whl
win-cuda11.6-cudnn8.4-mkl-vs2017-avx paddlepaddle_gpu-2.4.0.post116-cp36-cp36m-win_amd64.whl paddlepaddle_gpu-2.4.0.post116-cp37-cp37m-win_amd64.whl paddlepaddle_gpu-2.4.0.post116-cp38-cp38-win_amd64.whl paddlepaddle_gpu-2.4.0.post116-cp39-cp39-win_amd64.whl paddlepaddle_gpu-2.4.0.post116-cp310-cp310-win_amd64.whl

表格说明

  • 纵轴

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

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

  • 横轴

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

37:python tag,指 python3.7,类似的还有“36”、“38”、“39”等

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: 类似’py36’, ‘py37’, ‘py38’, ‘py39’,用于标明对应的 python 版本

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

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



多版本 whl 包列表-develop

版本说明 cp37-cp37m cp38-cp38 cp39-cp39 cp310-cp310
linux-cpu-mkl-avx paddlepaddle-latest-cp37-cp37m-linux_x86_64.whl paddlepaddle-latest-cp38-cp38-linux_x86_64.whl paddlepaddle-latest-cp39-cp39-linux_x86_64.whl paddlepaddle-latest-cp310-cp310-linux_x86_64.whl
linux-cpu-openblas-avx - paddlepaddle-latest-cp38-cp38-linux_x86_64.whl - -
cuda10.2-cudnn7-mkl paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl paddlepaddle_gpu-latest-cp39-cp39-linux_x86_64.whl paddlepaddle_gpu-latest-cp310-cp310-linux_x86_64.whl
cuda11.2-cudnn8.1-mkl paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl paddlepaddle_gpu-latest-cp39-cp39-linux_x86_64.whl paddlepaddle_gpu-latest-cp310-cp310-linux_x86_64.whl
cuda11.6-cudnn8.4-mkl paddlepaddle_gpu-latest-cp37-cp37m-linux_x86_64.whl paddlepaddle_gpu-latest-cp38-cp38-linux_x86_64.whl paddlepaddle_gpu-latest-cp39-cp39-linux_x86_64.whl paddlepaddle_gpu-latest-cp310-cp310-linux_x86_64.whl
mac-cpu paddlepaddle-cp37-cp37m-macosx_10_6_intel.whl paddlepaddle-cp38-cp38-macosx_10_14_x86_64.whl paddlepaddle-cp39-cp39-macosx_10_14_x86_64.whl paddlepaddle-cp310-cp310-macosx_10_14_universal2.whl
win-cpu-mkl-avx paddlepaddle-latest-cp36-cp36m-win_amd64.whl paddlepaddle-latest-cp37-cp37m-win_amd64.whl paddlepaddle-latest-cp38-cp38-win_amd64.whl paddlepaddle-latest-cp39-cp39-win_amd64.whl
win-cpu-mkl-noavx - - paddlepaddle-latest-cp38-cp38-win_amd64.whl -
win-cpu-openblas-avx - - paddlepaddle-latest-cp38-cp38-win_amd64.whl -
win-cpu-openblas-noavx - - paddlepaddle-latest-cp38-cp38-win_amd64.whl -
win-cuda10.2-cudnn7-mkl-vs2017-avx paddlepaddle_gpu-latest-cp36-cp36m-win_amd64.whl paddlepaddle_gpu-latest-cp37-cp37m-win_amd64.whl paddlepaddle_gpu-latest-cp38-cp38-win_amd64.whl paddlepaddle_gpu-latest-cp39-cp39-win_amd64.whl
win-cuda10.2-cudnn7-mkl-vs2017-noavx - paddlepaddle_gpu-latest-cp37-cp37m-win_amd64.whl paddlepaddle_gpu-latest-cp38-cp38-win_amd64.whl -
win-cuda11.2-cudnn8.2-mkl-vs2017-avx paddlepaddle_gpu-latest-cp36-cp36m-win_amd64.whl paddlepaddle_gpu-latest-cp37-cp37m-win_amd64.whl paddlepaddle_gpu-latest-cp38-cp38-win_amd64.whl paddlepaddle_gpu-latest-cp39-cp39-win_amd64.whl



在 Docker 中执行 PaddlePaddle 训练程序

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

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

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

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

docker run -it -v $PWD:/work registry.baidubce.com/paddlepaddle/paddle /bin/bash
cd /work
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 镜像,直接运行:

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

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

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

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

http://localhost:8888/



使用 Docker 执行 GPU 训练

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

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

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

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 registry.baidubce.com/paddlepaddle/paddle:latest-gpu