From 775b32ed99a374453011210f11d9406c41c65c2c Mon Sep 17 00:00:00 2001 From: nhzlx Date: Thu, 11 Oct 2018 13:34:28 +0800 Subject: [PATCH] fix comments --- .../howto/inference/paddle_tensorrt_infer.md | 74 ++++++++++--------- 1 file changed, 38 insertions(+), 36 deletions(-) diff --git a/doc/fluid/user_guides/howto/inference/paddle_tensorrt_infer.md b/doc/fluid/user_guides/howto/inference/paddle_tensorrt_infer.md index 2ccc42ada..5042d1349 100644 --- a/doc/fluid/user_guides/howto/inference/paddle_tensorrt_infer.md +++ b/doc/fluid/user_guides/howto/inference/paddle_tensorrt_infer.md @@ -1,42 +1,44 @@ -# Paddle inference with TensorRT +# 使用Paddle TensorRT预测 -NVIDIA TensorRT 是一个高性能的深度学习预测库,可为深度学习推理应用程序提供低延迟和高吞吐量。Paddle 1.0 采用了子图的形式对TensorRT进行了初步集成,即我们可以使用该模块来提升Paddle模型的预测性能。该模块依旧在持续开发中,目前已支持的模型有: AlexNet, MobileNet, ResNet50, VGG19, ResNext, MobileNet-SSD等。在这篇文档中,我们将会对Paddle-TensorRT库的获取,使用,以及原理进行相关介绍。 +NVIDIA TensorRT 是一个高性能的深度学习预测库,可为深度学习推理应用程序提供低延迟和高吞吐量。Paddle 1.0 采用了子图的形式对TensorRT进行了初步集成,即我们可以使用该模块来提升Paddle模型的预测性能。该模块依旧在持续开发中,目前已支持的模型有:AlexNet, MobileNet, ResNet50, VGG19, ResNext, MobileNet-SSD等。在这篇文档中,我们将会对Paddle-TensorRT库的获取、使用和原理进行介绍。 ## 获取Paddle预测库 **一:使用Docker编译预测库** -1. 下载Paddle -``` -git clone https://github.com/PaddlePaddle/Paddle.git -``` - -2. 获取docker镜像 -``` -nvidia-docker run --name paddle_trt -v $PWD/Paddle:/Paddle -it registry.baidu.com/paddlepaddle/paddle:latest-dev /bin/bash -``` -3. 编译Paddle TensorRT - -```shell -# 在docker容器中执行以下操作 -cd /Paddle -mkdir build -cd build -cmake .. \ - -DWITH_FLUID_ONLY=ON \ - -DWITH_CONTRIB=OFF \ - -DWITH_MKL=OFF \ - -DWITH_MKLDNN=OFF \ - -DWITH_TESTING=ON \ - -DCMAKE_BUILD_TYPE=Release \ - -DWITH_PYTHON=OFF - -# 编译 -make -j 10 -# 生成预测库 -make inference_lib_dist -j -``` +1. 下载Paddle + + ``` + git clone https://github.com/PaddlePaddle/Paddle.git + ``` +2. 获取docker镜像 + + ``` + nvidia-docker run --name paddle_trt -v $PWD/Paddle:/Paddle -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash + ``` + +3. 编译Paddle TensorRT + + ``` + # 在docker容器中执行以下操作 + cd /Paddle + mkdir build + cd build + cmake .. \ + -DWITH_FLUID_ONLY=ON \ + -DWITH_CONTRIB=OFF \ + -DWITH_MKL=OFF \ + -DWITH_MKLDNN=OFF \ + -DWITH_TESTING=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DWITH_PYTHON=OFF + + # 编译 + make -j 10 + # 生成预测库 + make inference_lib_dist -j + ``` ## Paddle TensorRT使用 @@ -106,17 +108,17 @@ int main() { 编译过程可以参照[`这里。`](https://github.com/PaddlePaddle/Paddle/tree/develop/paddle/fluid/inference/api/demo_ci) ## 子图运行原理 - PaddlePaddle采用子图的形式对TensorRT进行集成,当模型加载后,神经网络可以表示为由变量和运算节点组成的计算图。Paddle TensorRT实现的功能是能够对整个图进行扫描,发现图中可以使用TensorRT优化的子图,并使用TensorRT节点替换它们。在模型的推断期间,如果遇到TensorRT节点,Paddle会调用TensoRT库对该节点进行优化, 其他的节点调用Paddle的原生实现。TensorRT在推断期间能够进行Op的横向和纵向融合,过滤掉冗余的op,并对特定平台下的特定的Op选择合适的kenel等进行优化, 能够加快模型的预测速度。 - 下图使用一个简单的模型展示了这个过程。我们可以在原始模型网络中看到,绿色节点表示可以被TensorRT支持的节点,红色节点表示网络中的变量,黄色表示Paddle只能被Paddle原生实现执行的节点。那些在原始网络中的绿色节点被提取出来汇集成子图,并由一个TensorRT节点代替,成为转换网络中的block-25 节点。 在网络运行过程中,如果遇到该节点,Paddle将调用TensorRT库来对其执行。 + PaddlePaddle采用子图的形式对TensorRT进行集成,当模型加载后,神经网络可以表示为由变量和运算节点组成的计算图。Paddle TensorRT实现的功能是能够对整个图进行扫描,发现图中可以使用TensorRT优化的子图,并使用TensorRT节点替换它们。在模型的推断期间,如果遇到TensorRT节点,Paddle会调用TensoRT库对该节点进行优化,其他的节点调用Paddle的原生实现。TensorRT在推断期间能够进行Op的横向和纵向融合,过滤掉冗余的Op,并对特定平台下的特定的Op选择合适的kenel等进行优化,能够加快模型的预测速度。 + 下图使用一个简单的模型展示了这个过程。我们可以在原始模型网络中看到,绿色节点表示可以被TensorRT支持的节点,红色节点表示网络中的变量,黄色表示Paddle只能被Paddle原生实现执行的节点。那些在原始网络中的绿色节点被提取出来汇集成子图,并由一个TensorRT节点代替,成为转换网络中的block-25 节点。在网络运行过程中,如果遇到该节点,Paddle将调用TensorRT库来对其执行。 **原始网络**

- +

**转换的网络**

- +

-- GitLab