Linux 下从源码编译 |
您所在的位置:网站首页 › paddle源码 › Linux 下从源码编译 |
安装步骤¶
在 Linux 的系统下有2种编译方式,推荐使用 Docker 编译。 Docker 环境中已预装好编译 Paddle 需要的各种依赖,相较本机编译环境更简单。 1. 使用 Docker 编译(不提供在 CentOS 6下编译中遇到问题的支持) 2. 本机编译(不提供在 CentOS 6下编译中遇到问题的支持) 使用 docker 编译¶Docker 是一个开源的应用容器引擎。使用 Docker,既可以将 PaddlePaddle 的安装&使用与系统环境隔离,也可以与主机共享 GPU、网络等资源 使用 Docker 编译时,您需要: 1. 在本地主机上安装 Docker 2. 如需在 Linux 开启 GPU 支持,请安装 nvidia-docker请您按照以下步骤编译安装: 1. 请首先选择您希望储存 PaddlePaddle 的路径,然后在该路径下使用以下命令将 PaddlePaddle 的源码从 github 克隆到本地当前目录下名为 Paddle 的文件夹中 git clone https://github.com/PaddlePaddle/Paddle.git2. 进入 Paddle 目录下 cd Paddle3. 拉取 PaddlePaddle 镜像 对于国内用户,因为网络问题下载 docker 比较慢时,可使用百度提供的镜像: CPU 版的 PaddlePaddle: docker pull registry.baidubce.com/paddlepaddle/paddle:latest-devGPU 版的 PaddlePaddle: nvidia-docker pull registry.baidubce.com/paddlepaddle/paddle:latest-dev-cuda11.2-cuDNN8-gcc82如果您的机器不在中国大陆地区,可以直接从 DockerHub 拉取镜像: CPU 版的 PaddlePaddle: docker pull paddlepaddle/paddle:latest-devGPU 版的 PaddlePaddle: nvidia-docker pull paddlepaddle/paddle:latest-dev-cuda11.2-cuDNN8-gcc82上例中,latest-dev-cuda11.2-cuDNN8-gcc82 仅作示意用,表示安装 GPU 版的镜像。如果您还想安装其他 cuda/cuDNN 版本的镜像,可以将其替换成 latest-gpu-cuda10.1-cuDNN7-gcc82-dev、latest-gpu-cuda10.1-cuDNN7-gcc54-dev 等。 您可以访问 DockerHub 获取与您机器适配的镜像。 4. 创建并进入已配置好编译环境的 Docker 容器 编译 CPU 版本的 PaddlePaddle: docker run --name paddle-test -v $PWD:/paddle --network=host --privileged=true -it registry.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash其中参数的意义为: --name paddle-test:为您创建的 Docker 容器命名为 paddle-test; -v $PWD:/paddle: 将当前目录挂载到 Docker 容器中的 /paddle 目录下(Linux 中 PWD 变量会展开为当前路径的绝对路径); --privileged=true: container 内的 root用户 拥有真正的 root 权限 -it: 与宿主机保持交互状态; registry.baidubce.com/paddlepaddle/paddle:latest-dev:使用名为 registry.baidubce.com/paddlepaddle/paddle:latest-dev 的镜像创建 Docker 容器,/bin/bash 进入容器后启动 /bin/bash 命令。编译 GPU 版本的 PaddlePaddle: nvidia-docke run --name paddle-test -v $PWD:/paddle --network=host --privileged=true -it registry.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash注意: 请确保至少为 docker 分配 4g 以上的内存,否则编译过程可能因内存不足导致失败。 5. 进入 Docker 后进入 paddle 目录下 cd /paddle6. 切换到较稳定版本下进行编译 git checkout [分支名]例如: git checkout release/2.37. 创建并进入 /paddle/build 路径下 mkdir -p /paddle/build && cd /paddle/build8. 使用以下命令安装相关依赖 安装 protobuf。 pip3.7 install protobuf注意:以上用 Python3.7 命令来举例,请将上述命令中的 pip3.7 改成对应的版本。 9. 执行 cmake 编译 CPU 版本: cmake .. -DPY_VERSION=3.7 -DWITH_TESTING=OFF -DWITH_MKL=ON -DWITH_GPU=OFF -DON_INFER=ON编译 GPU 版本: cmake .. -DPY_VERSION=3.7 -DWITH_TESTING=OFF -DWITH_MKL=ON -DWITH_GPU=ON -DON_INFER=ON使用 TensorRT: 如果想使用 TensorRT 进行推理,首先需要根据自己的需求下载对应版本的 TensorRT GA build, 下载解压后,在 cmake 中开启 WITH_TENSORRT, 并通过 TENSORRT_ROOT 指定刚刚解压的 TensorRT_lib 的路径。假设下载的 TensorRT lib 解压 目录为 /paddle/nvidia/TensorRT/, cmake 编译指令如下: cmake .. -DPY_VERSION=3.7 -DWITH_TESTING=OFF -DWITH_MKL=ON -DWITH_GPU=ON -DON_INFER=ON \ -DWITH_TENSORRT=ON -DTENSORRT_ROOT=/paddle/nvidia/TensorRT/更多 cmake 参数可以查看 cmake 参数表: 选项 说明 默认值 WITH_GPU 是否支持GPU ON WITH_AVX 是否编译含有AVX指令集的飞桨二进制文件 ON WITH_PYTHON 是否内嵌PYTHON解释器并编译Wheel安装包 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:自动识别当前环境的架构编译 WITH_TENSORRT 是否开启 TensorRT OFF TENSORRT_ROOT TensorRT_lib的路径,该路径指定后会编译 TensorRT 子图功能eg:/paddle/nvidia/TensorRT/ /usr10. 执行编译 make -j4编译飞桨过程中可能会打开很多文件,如果编译过程中显示 “Too many open files” 错误时,请使用指令 ulimit -n 102400 来增大当前进程允许打开的文件数** ulimit -n 102400注意: 编译过程中需要从 github 上下载依赖,请确保您的编译环境能正常从 github 下载代码。 11. 编译成功后可在 dist 目录找到生成的 .whl 包 pip3 install python/dist/[wheel 包名字]12. 推理库编译 make inference_lib_dist -j4编译成功后,所有产出均位于 build 目录下的 paddle_inference_install_dir 目录内。 本机编译¶本机编译与 docker 编译的区别只有环境准备不同, docker 中已经配置好了相关环境,本机编译中,需要用户自己配置编译依赖项。 1. 安装必要的工具 以 Ubuntu 上为例, 安装编译依赖项可通过如下命令: sudo apt-get install gcc g++ make cmake git vim unrar python3 python3-dev python3-pip swig wget libopencv-dev pip3 install numpy protobuf wheel setuptools若需启用 CUDA 加速,需准备 CUDA、cuDNN。请参考 NVIDIA 官网文档了解 CUDA 和 cuDNN 的安装流程和配置方法,请见 CUDA,cuDNN, 版本对应关系如下表所示: CUDA 版本 cuDNN 版本 TensorRT 版本 10.2 7.6 7 11.0 8.0 7 11.2 8.2 8以 CUDA 11.3,cuDNN 8.2 为例配置 CUDA 环境。 # cuda sh cuda_11.3.0_465.19.01_linux.run export PATH=/usr/local/cuda-11.3/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-11.3/${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} # cuDNN tar -xzvf cudnn-11.3-linux-x64-v8.2.1.32.tgz sudo cp -a cuda/include/cuDNN.h /usr/local/cuda/include/ sudo cp -a cuda/lib64/libcuDNN* /usr/local/cuda/lib64/2. 编译 2.1) 下载 Paddle 使用 Git 将飞桨代码克隆到本地,并进入目录,切换到稳定版本(git tag显示的标签名,如 release/2.3)。 飞桨使用 develop 分支进行最新特性的开发,使用 release 分支发布稳定版本。在 GitHub 的 Releases 选项卡中,可以看到飞桨版本的发布记录。 git clone https://github.com/PaddlePaddle/Paddle.git cd Paddle git checkout release/2.32.2)cmake 下面以 GPU 版本为例说明编译命令。其他环境可以参考“ CMake 编译选项表”修改对应的 cmake 选项。比如,若编译 CPU 版本,请将 WITH_GPU 设置为 OFF。 # 创建并进入 build 目录 mkdir build_cuda && cd build_cuda # 执行cmake指令 cmake .. -DPY_VERSION=3 \ -DWITH_TESTING=OFF \ -DWITH_MKL=ON \ -DWITH_GPU=ON \ -DON_INFER=ON \ ..2.3) 使用 make 编译 make -j4更多 cmake 参数可以查看 cmake 参数表: 选项 说明 默认值 WITH_GPU 是否支持GPU ON WITH_AVX 是否编译含有AVX指令集的飞桨二进制文件 ON WITH_PYTHON 是否内嵌PYTHON解释器并编译Wheel安装包 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:自动识别当前环境的架构编译 WITH_TENSORRT 是否开启 TensorRT OFF TENSORRT_ROOT TensorRT_lib的路径,该路径指定后会编译 TensorRT 子图功能eg:/paddle/nvidia/TensorRT/ /usr3. 安装Wheel包 编译成功后可在 dist 目录找到生成的 .whl 包 pip3 install python/dist/[wheel 包名字]4. 编译C++推理库(按需) make inference_lib_dist -j4编译成功后,所有产出均位于 build 目录下的 paddle_inference_install_dir 目录内。 编译飞桨过程中可能会打开很多文件,如果编译过程中显示 “Too many open files” 错误时,请使用指令 ulimit -n 102400 来增大当前进程允许打开的文件数 ulimit -n 1024005. 验证安装 安装完成后你可以使用 python 进入 python 解释器,输入: import paddle paddle.utils.run_check()如果出现 PaddlePaddle is installed successfully!,说明你已成功安装。 恭喜,至此你已完成 Paddle Inference 的编译安装 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |