Skip to content

Latest commit

 

History

History
294 lines (231 loc) · 13.5 KB

high_performance_inference.md

File metadata and controls

294 lines (231 loc) · 13.5 KB

简体中文 | English

PaddleX 高性能推理指南

在实际生产环境中,许多应用对部署策略的性能指标(尤其是响应速度)有着较严苛的标准,以确保系统的高效运行与用户体验的流畅性。为此,PaddleX 提供高性能推理插件,旨在对模型推理及前后处理进行深度性能优化,实现端到端流程的显著提速。本文档将首先介绍高性能推理插件的安装和使用方式,然后列举目前支持使用高性能推理插件的产线与模型。

1.高性能推理插件的安装与使用

使用高性能推理插件前,请确保您已经按照PaddleX本地安装教程 完成了PaddleX的安装,且按照PaddleX产线命令行使用说明或PaddleX产线Python脚本使用说明跑通了产线的基本推理。

1.1 安装高性能推理插件

在下表中根据处理器架构、操作系统、设备类型、Python 版本等信息,找到对应的安装指令并在部署环境中执行:

处理器架构 操作系统 设备类型 Python 版本 安装指令
x86-64 Linux CPU
3.8 curl -s https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/deploy/paddlex_hpi/install_script/latest/install_paddlex_hpi.py | python3.8 - --arch x86_64 --os linux --device cpu --py 38
3.9 curl -s https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/deploy/paddlex_hpi/install_script/latest/install_paddlex_hpi.py | python3.9 - --arch x86_64 --os linux --device cpu --py 39
3.10 curl -s https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/deploy/paddlex_hpi/install_script/latest/install_paddlex_hpi.py | python3.10 - --arch x86_64 --os linux --device cpu --py 310
GPU (CUDA 11.8 + cuDNN 8.6) 3.8 curl -s https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/deploy/paddlex_hpi/install_script/latest/install_paddlex_hpi.py | python3.8 - --arch x86_64 --os linux --device gpu_cuda118_cudnn86 --py 38
3.9 curl -s https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/deploy/paddlex_hpi/install_script/latest/install_paddlex_hpi.py | python3.9 - --arch x86_64 --os linux --device gpu_cuda118_cudnn86 --py 39
3.10 curl -s https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/deploy/paddlex_hpi/install_script/latest/install_paddlex_hpi.py | python3.10 - --arch x86_64 --os linux --device gpu_cuda118_cudnn86 --py 310
  • 当设备类型为 GPU 时,请使用与环境匹配的 CUDA 和 cuDNN 版本对应的安装指令,否则,将无法正常使用高性能推理插件。
  • 对于 Linux 系统,使用 Bash 执行安装指令。
  • 当设备类型为 CPU 时,安装的高性能推理插件仅支持使用 CPU 进行推理;对于其他设备类型,安装的高性能推理插件则支持使用 CPU 或其他设备进行推理。

1.2 获取序列号与激活

飞桨AI Studio星河社区-人工智能学习与实训社区 页面的“开源模型产线部署序列号咨询与获取”部分选择“立即获取”,如下图所示:

选择需要部署的产线,并点击“获取”。之后,可以在页面下方的“开源产线部署SDK序列号管理”部分找到获取到的序列号:

使用序列号完成激活后,即可使用高性能推理插件。PaddleX 提供离线激活和在线激活两种方式(均只支持 Linux 系统):

  • 联网激活:在使用推理 API 或 CLI 时,通过参数指定序列号及联网激活,使程序自动完成激活。
  • 离线激活:按照序列号管理界面中的指引(点击“操作”中的“离线激活”),获取机器的设备指纹,并将序列号与设备指纹绑定以获取证书,完成激活。使用这种激活方式,需要手动将证书存放在机器的 ${HOME}/.baidu/paddlex/licenses 目录中(如果目录不存在,需要创建目录),并在使用推理 API 或 CLI 时指定序列号。 请注意:每个序列号只能绑定到唯一的设备指纹,且只能绑定一次。这意味着用户如果使用不同的机器部署模型,则必须为每台机器准备单独的序列号。

1.3 启用高性能推理插件

在启用高性能插件前,请确保当前环境的 LD_LIBRARY_PATH 没有指定 TensorRT 的共享库目录,因为插件中已经集成了 TensorRT,避免 TensorRT 版本冲突导致插件无法正常使用。

对于 PaddleX CLI,指定 --use_hpip,并设置序列号,即可启用高性能推理插件。如果希望进行联网激活,在第一次使用序列号时,需指定 --update_license,以通用图像分类产线为例:

paddlex \
    --pipeline image_classification \
    --input https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg \
    --device gpu:0 \
+   --use_hpip \
+   --serial_number {序列号}

# 如果希望进行联网激活
paddlex \
    --pipeline image_classification \
    --input https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg \
    --device gpu:0 \
+   --use_hpip \
+   --serial_number {序列号}
+   --update_license

对于 PaddleX Python API,启用高性能推理插件的方法类似。仍以通用图像分类产线为例:

from paddlex import create_pipeline

pipeline = create_pipeline(
    pipeline="image_classification",
+   use_hpip=True,
+   serial_number="{序列号}",
)

output = pipeline.predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_image_classification_001.jpg")

启用高性能推理插件得到的推理结果与未启用插件时一致。对于部分模型,在首次启用高性能推理插件时,可能需要花费较长时间完成推理引擎的构建。PaddleX 将在推理引擎的第一次构建完成后将相关信息缓存在模型目录,并在后续复用缓存中的内容以提升初始化速度。

1.4 修改高性能推理配置

PaddleX 为每个模型提供默认的高性能推理配置,并将其存储在模型的配置文件中。由于实际部署环境的多样性,使用默认配置可能无法在特定环境中获取理想的性能,甚至可能出现推理失败的情况。对于默认配置无法满足要求的情形,可以通过如下方式,尝试更换模型的推理后端:

  1. 找到模型目录中的 inference.yml 文件,定位到其中的 Hpi 字段;

  2. 修改 selected_backends 的值。具体而言,selected_backends 可能被设置如下:

    selected_backends:
        cpu: paddle_infer
        gpu: onnx_runtime
    

    其中每一项均按照 {设备类型}: {推理后端名称} 的格式填写,默认选用在官方测试环境中推理耗时最短的后端。supported_backends 中记录了官方测试环境中模型支持的推理后端,可供参考。 目前所有可选的推理后端如下:

    • paddle_infer:标准的 Paddle Inference 推理引擎。支持 CPU 和 GPU。
    • paddle_tensorrtPaddle-TensorRT,Paddle 官方出品的高性能深度学习推理库,采用子图的形式对 TensorRT 进行了集成,以实现进一步优化加速。仅支持 GPU。
    • openvinoOpenVINO,Intel 提供的深度学习推理工具,优化了多种 Intel 硬件上的模型推理性能。仅支持 CPU。
    • onnx_runtimeONNX Runtime,跨平台、高性能的推理引擎。支持 CPU 和 GPU。
    • tensorrtTensorRT,NVIDIA 提供的高性能深度学习推理库,针对 NVIDIA GPU 进行优化以提升速度。仅支持 GPU。

    以下是目前的官方测试环境的部分关键信息:

    • CPU:Intel Xeon Gold 5117
    • GPU:NVIDIA Tesla T4
    • CUDA版本:11.8
    • cuDNN版本:8.6
    • Docker 镜像:registry.baidubce.com/paddlepaddle/paddle:latest-dev-cuda11.8-cudnn8.6-trt8.5-gcc82

2、支持使用高性能推理插件的产线与模型

模型产线 产线模块 具体模型
通用图像分类 图像分类 ResNet18
ResNet34
moreResNet50
ResNet101
ResNet152
ResNet18_vd
ResNet34_vd
ResNet50_vd
ResNet101_vd
ResNet152_vd
ResNet200_vd
PP-LCNet_x0_25
PP-LCNet_x0_35
PP-LCNet_x0_5
PP-LCNet_x0_75
PP-LCNet_x1_0
PP-LCNet_x1_5
PP-LCNet_x2_0
PP-LCNet_x2_5
PP-LCNetV2_small
PP-LCNetV2_base
PP-LCNetV2_large
MobileNetV3_large_x0_35
MobileNetV3_large_x0_5
MobileNetV3_large_x0_75
MobileNetV3_large_x1_0
MobileNetV3_large_x1_25
MobileNetV3_small_x0_35
MobileNetV3_small_x0_5
MobileNetV3_small_x0_75
MobileNetV3_small_x1_0
MobileNetV3_small_x1_25
ConvNeXt_tiny
ConvNeXt_small
ConvNeXt_base_224
ConvNeXt_base_384
ConvNeXt_large_224
ConvNeXt_large_384
MobileNetV1_x0_25
MobileNetV1_x0_5
MobileNetV1_x0_75
MobileNetV1_x1_0
MobileNetV2_x0_25
MobileNetV2_x0_5
MobileNetV2_x1_0
MobileNetV2_x1_5
MobileNetV2_x2_0
SwinTransformer_tiny_patch4_window7_224
SwinTransformer_small_patch4_window7_224
SwinTransformer_base_patch4_window7_224
SwinTransformer_base_patch4_window12_384
SwinTransformer_large_patch4_window7_224
SwinTransformer_large_patch4_window12_384
PP-HGNet_small
PP-HGNet_tiny
PP-HGNet_base
PP-HGNetV2-B0
PP-HGNetV2-B1
PP-HGNetV2-B2
PP-HGNetV2-B3
PP-HGNetV2-B4
PP-HGNetV2-B5
PP-HGNetV2-B6
CLIP_vit_base_patch16_224
CLIP_vit_large_patch14_224
通用目标检测 目标检测 PP-YOLOE_plus-S
PP-YOLOE_plus-M
morePP-YOLOE_plus-L
PP-YOLOE_plus-X
YOLOX-N
YOLOX-T
YOLOX-S
YOLOX-M
YOLOX-L
YOLOX-X
YOLOv3-DarkNet53
YOLOv3-ResNet50_vd_DCN
YOLOv3-MobileNetV3
RT-DETR-R18
RT-DETR-R50
RT-DETR-L
RT-DETR-H
RT-DETR-X
PicoDet-S
PicoDet-L
通用语义分割 语义分割 Deeplabv3-R50
Deeplabv3-R101
moreDeeplabv3_Plus-R50
Deeplabv3_Plus-R101
PP-LiteSeg-T
OCRNet_HRNet-W48
OCRNet_HRNet-W18
SeaFormer_tiny
SeaFormer_small
SeaFormer_base
SeaFormer_large
SegFormer-B0
SegFormer-B1
SegFormer-B2
SegFormer-B3
SegFormer-B4
SegFormer-B5
通用实例分割 实例分割 Mask-RT-DETR-L
Mask-RT-DETR-H
通用OCR 文本检测 PP-OCRv4_server_det
PP-OCRv4_mobile_det
文本识别 PP-OCRv4_server_rec
PP-OCRv4_mobile_rec
ch_RepSVTR_rec
ch_SVTRv2_rec
印章文本识别 版面区域分析 PicoDet-S_layout_3cls
PicoDet-S_layout_17cls
morePicoDet-L_layout_3cls
PicoDet-L_layout_17cls
RT-DETR-H_layout_3cls
RT-DETR-H_layout_17cls
印章文本检测 PP-OCRv4_server_seal_det
PP-OCRv4_mobile_seal_det
文本识别 PP-OCRv4_mobile_rec
PP-OCRv4_server_rec
通用表格识别 版面区域检测 PicoDet_layout_1x
表格识别 SLANet
SLANet_plus
文本检测 PP-OCRv4_server_det
PP-OCRv4_mobile_det
文本识别 PP-OCRv4_server_rec
PP-OCRv4_mobile_rec
ch_RepSVTR_rec
ch_SVTRv2_rec
文档场景信息抽取v3 表格识别 SLANet
SLANet_plus
版面区域检测 PicoDet_layout_1x
文本检测 PP-OCRv4_server_det
PP-OCRv4_mobile_det
文本识别 PP-OCRv4_server_rec
PP-OCRv4_mobile_rec
ch_RepSVTR_rec
ch_SVTRv2_rec
印章文本检测 PP-OCRv4_server_seal_det
PP-OCRv4_mobile_seal_det
文本图像矫正 UVDoc
文档图像方向分类 PP-LCNet_x1_0_doc_ori