diff --git a/doc/COMPILE.md b/doc/COMPILE.md index 51f2cc28ad959603b2f72d4bf32898023b940c08..986a136a8102f5fc154d04461f289b08bb0415ae 100644 --- a/doc/COMPILE.md +++ b/doc/COMPILE.md @@ -1,6 +1,7 @@ # 如何编译PaddleServing -### 编译环境设置 +## 编译环境设置 + - os: CentOS 6u3 - gcc: 4.8.2及以上 - go: 1.9.2及以上 @@ -8,42 +9,116 @@ - cmake:3.2.2及以上 - python:2.7.2及以上 -### 获取代码 +推荐使用Docker准备Paddle Serving编译环境:[CPU Dockerfile.devel](../tools/Dockerfile.devel),[GPU Dockerfile.gpu.devel](../tools/Dockerfile.gpu.devel) + +## 获取代码 ``` python git clone https://github.com/PaddlePaddle/Serving cd Serving && git submodule update --init --recursive ``` -### 编译Server部分 +## PYTHONROOT设置 -#### PYTHONROOT设置 -``` shell +```shell # 例如python的路径为/usr/bin/python,可以设置PYTHONROOT export PYTHONROOT=/usr/ ``` -#### 集成CPU版本Paddle Inference Library +## 编译Server部分 + +### 集成CPU版本Paddle Inference Library + ``` shell -cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DCLIENT_ONLY=OFF .. +mkdir build && cd build +cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DSERVER=ON .. make -j10 ``` -#### 集成GPU版本Paddle Inference Library +可以执行`make install`把目标产出放在`./output`目录下,cmake阶段需添加`-DCMAKE_INSTALL_PREFIX=./output`选项来指定存放路径。 + +### 集成GPU版本Paddle Inference Library + ``` shell -cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DCLIENT_ONLY=OFF -DWITH_GPU=ON .. +mkdir build && cd build +cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DSERVER=ON -DWITH_GPU=ON .. make -j10 ``` -### 编译Client部分 +执行`make install`可以把目标产出放在`./output`目录下。 + +## 编译Client部分 ``` shell -cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DCLIENT_ONLY=ON .. +mkdir build && cd build +cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DCLIENT=ON .. make -j10 ``` -### 安装wheel包 -无论是client端还是server端,编译完成后,安装python/dist/下的whl包即可 +执行`make install`可以把目标产出放在`./output`目录下。 + +## 编译App部分 + +```bash +mkdir build && cd build +cmake -DPYTHON_INCLUDE_DIR=$PYTHONROOT/include/python2.7/ -DPYTHON_LIBRARIES=$PYTHONROOT/lib/libpython2.7.so -DPYTHON_EXECUTABLE=$PYTHONROOT/bin/python -DCMAKE_INSTALL_PREFIX=./output -DAPP=ON .. +make +``` + +## 安装wheel包 + +无论是Client端,Server端还是App部分,编译完成后,安装`python/dist/`下的whl包即可。 + +## 注意事项 + +运行python端Server时,会检查`SERVING_BIN`环境变量,如果想使用自己编译的二进制文件,请将设置该环境变量为对应二进制文件的路径,通常是`export SERVING_BIN=${BUILD_DIR}/core/general-server/serving`。 -### 注意事项 -运行python端server时,会检查`SERVING_BIN`环境变量,如果想使用自己编译的二进制文件,请将设置该环境变量为对应二进制文件的路径,通常是`export SERVING_BIN=${BUILD_PATH}/core/general-server/serving`。 +## CMake选项说明 + +| 编译选项 | 说明 | 默认 | +| :--------------: | :----------------------------------------: | :--: | +| WITH_AVX | Compile Paddle Serving with AVX intrinsics | OFF | +| WITH_MKL | Compile Paddle Serving with MKL support | OFF | +| WITH_GPU | Compile Paddle Serving with NVIDIA GPU | OFF | +| CUDNN_ROOT | Define CuDNN library and header path | | +| CLIENT | Compile Paddle Serving Client | OFF | +| SERVER | Compile Paddle Serving Server | OFF | +| APP | Compile Paddle Serving App package | OFF | +| WITH_ELASTIC_CTR | Compile ELASITC-CTR solution | OFF | +| PACK | Compile for whl | OFF | + +### WITH_GPU选项 + +Paddle Serving通过PaddlePaddle预测库支持在GPU上做预测。WITH_GPU选项用于检测系统上CUDA/CUDNN等基础库,如检测到合适版本,在编译PaddlePaddle时就会编译出GPU版本的OP Kernel。 + +在裸机上编译Paddle Serving GPU版本,需要安装这些基础库: + +- CUDA +- CuDNN +- NCCL2 + +这里要注意的是: + +1. 编译Serving所在的系统上所安装的CUDA/CUDNN等基础库版本,需要兼容实际的GPU设备。例如,Tesla V100卡至少要CUDA 9.0。如果编译时所用CUDA等基础库版本过低,由于生成的GPU代码和实际硬件设备不兼容,会导致Serving进程无法启动,或出现coredump等严重问题。 +2. 运行Paddle Serving的系统上安装与实际GPU设备兼容的CUDA driver,并安装与编译期所用的CUDA/CuDNN等版本兼容的基础库。如运行Paddle Serving的系统上安装的CUDA/CuDNN的版本低于编译时所用版本,可能会导致奇怪的cuda函数调用失败等问题。 + +以下是PaddlePaddle发布版本所使用的基础库版本匹配关系,供参考: + +| | CUDA | CuDNN | NCCL2 | +| :----: | :-----: | :----------------------: | :----: | +| CUDA 8 | 8.0.61 | CuDNN 7.1.2 for CUDA 8.0 | 2.1.4 | +| CUDA 9 | 9.0.176 | CuDNN 7.3.1 for CUDA 9.0 | 2.2.12 | + +### 如何让Paddle Serving编译系统探测到CuDNN库 + +从NVIDIA developer官网下载对应版本CuDNN并在本地解压后,在cmake编译命令中增加`-DCUDNN_ROOT`参数,指定CuDNN库所在路径。 + +### 如何让Paddle Serving编译系统探测到nccl库 + +从NVIDIA developer官网下载对应版本nccl2库并解压后,增加如下环境变量 (以nccl2.1.4为例): + +```shell +export C_INCLUDE_PATH=/path/to/nccl2/cuda8/nccl_2.1.4-1+cuda8.0_x86_64/include:$C_INCLUDE_PATH +export CPLUS_INCLUDE_PATH=/path/to/nccl2/cuda8/nccl_2.1.4-1+cuda8.0_x86_64/include:$CPLUS_INCLUDE_PATH +export LD_LIBRARY_PATH=/path/to/nccl2/cuda8/nccl_2.1.4-1+cuda8.0_x86_64/lib/:$LD_LIBRARY_PATH +``` diff --git a/doc/INSTALL.md b/doc/INSTALL.md deleted file mode 100644 index 26d7bfe22772e114d7d8bd50011a98057cdcb395..0000000000000000000000000000000000000000 --- a/doc/INSTALL.md +++ /dev/null @@ -1,117 +0,0 @@ -# Install - -## 系统需求 - -OS: Linux - -CMake: (验证过的版本:3.2/3.5.2) - -C++编译器 (验证过的版本:GCC 4.8.2/5.4.0) - -python (验证过的版本:2.7) - -Go编译器 (>=1.8 验证过的版本:1.9.2/1.12.0) - -openssl & openssl-devel - -curl-devel - -bzip2-devel - -## 编译 - -推荐使用Docker准备Paddle Serving编译环境。[Docker编译使用说明](./DOCKER.md) - -以下命令将会下载Paddle Serving最新代码,并执行编译。 - -```shell -$ git clone https://github.com/PaddlePaddle/Serving.git -$ cd Serving -$ mkdir build -$ cd build -$ cmake .. -$ make -j4 -$ make install -``` - -`make install`将把目标产出放在/path/to/Paddle-Serving/build/output/目录下,目录结构: - -``` -. -|-- bin # Paddle Serving工具和protobuf编译插件pdcodegen所在目录 -|-- conf -|-- demo # demo总目录 -| |-- client # Demo client端 -| | |-- bert # bert模型客户端 -| | |-- ctr_prediction # CTR prediction模型客户端 -| | |-- dense_format # dense_format客户端 -| | |-- echo # 最简单的echo service客户端 -| | |-- echo_kvdb # local KV读取demo客户端 -| | |-- image_classification # 图像分类任务客户端 -| | |-- int64tensor_format # int64tensor_format示例客户端 -| | |-- sparse_format # sparse_format示例客户端 -| | `-- text_classification # 文本分类任务示例客户端 -| |-- db_func -| |-- db_thread -| |-- kvdb_test -| `-- serving # Demo serving端;该serving可同时响应所有demo client请求 -|-- include # Paddle Serving发布的头文件 -|-- lib # Paddle Serving发布的libs -`-- tool # Paddle Serving发布的工具目录 - -``` - -如要编写新的预测服务,请参考[从零开始写一个预测服务](CREATING.md) - -# CMake编译选项说明 - -| 编译选项 | 说明 | -|----------|------| -| WITH_AVX | For configuring PaddlePaddle. Compile PaddlePaddle with AVX intrinsics | -| WITH_MKL | For configuring PaddlePaddle. Compile PaddlePaddle with MKLML library | -| WITH_GPU | For configuring PaddlePaddle. Compile PaddlePaddle with NVIDIA GPU | -| CUDNN_ROOT| For configuring PaddlePaddle. Define CuDNN library and header path | -| CLINET_ONLY | Compile client libraries and demos only | - -## WITH_GPU选项 - -Paddle Serving通过PaddlePaddle预测库支持在GPU上做预测。WITH_GPU选项用于检测系统上CUDA/CUDNN等基础库,如检测到合适版本,在编译PaddlePaddle时就会编译出GPU版本的OP Kernel。 - -在裸机上编译Paddle Serving GPU版本,需要安装这些基础库: - -- CUDA -- CuDNN -- NCCL2 - -这里要注意的是: -1) 编译Serving所在的系统上所安装的CUDA/CUDNN等基础库版本,需要兼容实际的GPU设备。例如,Tesla V100卡至少要CUDA 9.0。如果编译时所用CUDA等基础库版本过低,由于生成的GPU代码和实际硬件设备不兼容,会导致Serving进程无法启动,或出现coredump等严重问题。 -2) 运行Paddle Serving的系统上安装与实际GPU设备兼容的CUDA driver,并安装与编译期所用的CUDA/CuDNN等版本兼容的基础库。如运行Paddle Serving的系统上安装的CUDA/CuDNN的版本低于编译时所用版本,可能会导致奇怪的cuda函数调用失败等问题。 - -以下是PaddlePaddle发布版本所使用的基础库版本匹配关系,供参考: - -| | CUDA | CuDNN | NCCL2 | -|-|-------|--------------------------|-------| -| CUDA 8 | 8.0.61 | CuDNN 7.1.2 for CUDA 8.0 | 2.1.4 | -| CUDA 9 | 9.0.176 | CuDNN 7.3.1 for CUDA 9.0| 2.2.12 | - -### 如何让Paddle Serving编译系统探测到CuDNN库 - -从NVIDIA developer官网下载对应版本CuDNN并在本地解压后,在cmake编译命令中增加-DCUDNN_ROOT参数,指定CuDNN库所在路径: - -``` -$ pwd -/path/to/paddle-serving - -$ mkdir build && cd build -$ cmake -DWITH_GPU=ON -DCUDNN_ROOT=/path/to/cudnn/cudnn_v7/cuda .. -``` - -### 如何让Paddle Serving编译系统探测到nccl库 - -从NVIDIA developer官网下载对应版本nccl2库并解压后,增加如下环境变量 (以nccl2.1.4为例): - -``` -$ export C_INCLUDE_PATH=/path/to/nccl2/cuda8/nccl_2.1.4-1+cuda8.0_x86_64/include:$C_INCLUDE_PATH -$ export CPLUS_INCLUDE_PATH=/path/to/nccl2/cuda8/nccl_2.1.4-1+cuda8.0_x86_64/include:$CPLUS_INCLUDE_PATH -$ export LD_LIBRARY_PATH=/path/to/nccl2/cuda8/nccl_2.1.4-1+cuda8.0_x86_64/lib/:$LD_LIBRARY_PATH -```