ReleaseBaidu (ERNIE)Baidu (ERNIE)published Mar 27, 2023seen 5d

PaddlePaddle/Paddle-Lite v2.13-rc

PaddlePaddle/Paddle-Lite

Open original ↗

Captured source

source ↗
published Mar 27, 2023seen 5dcaptured 8hhttp 200method plain

v2.13-rc

Repository: PaddlePaddle/Paddle-Lite

Tag: v2.13-rc

Published: 2023-03-27T09:45:56Z

Prerelease: no

Release notes:

Release Notes

重要更新

  • 易用性提升: Windows、Linux、macOS 新增支持 Python 3.9/3.10,提供 x86 平台 Python 3.7/3.8/3.9/3.10 wheel 包,利用 pip install paddlelite==2.13rc0 安装使用;新增 Linux、macOS aarch64 架构的 opt 工具。
  • 性能优化:优化 Transformer 类模型在 Arm CPU 的性能,ERNIE 3.0-Medium,ERNIE 3.0-Mini,ERNIE 3.0-Micro,ERNIE 3.0-Nano INT8 模型在多种机型性能提升 30%~100%。
  • 新硬件支持:MTK APU 新增支持 MT8188 芯片,适配 Picodet 与 TinyPose FP32 模型。

框架升级

  • Windows、Linux、macOS 等系统下支持并提供 Python 3.7/3.8/3.9/3.10 wheel 包。
  • 新增支持外部 API 用于设置自定义 Allocator。 #10013
  • 优化 config.set_model_from_buffer(const char *buffer, size_t length) 实现,buffer 的生命周期由用户侧管理,不再额外拷贝一份,减少内存开销。#10026
  • 支持新量化格式 weight 不量化的算子,如conv2d、conv2d_transpose 等算子如果 weight 没有量化则仍运行浮点后端。 #10093
  • 修复新量化格式对 weight 进行 per-layer 量化的支持。 #10097
  • 简化性能 Profiler 工具输出,增加一键式模型性能 Profile 工具。 #10047 #10064
  • 常量折叠 pass 支持更多数据类型。#9940

性能优化

  • 优化 Arm CPU MaxPoolings1 通用实现和 Conv3x3s1p1在 INT8 精度实现。#9806 #9833

!image

  • 优化 Transformer 类模型在 Arm CPU 的性能。

!image

  • 具体方案(以 ERNIE 3.0-Mini 为例,左侧是经过 PaddleSlim 量化后的模型结构,右侧是 Paddle Lite 针对 Attention 结构算子融合后的结果)

!image

  • QKV 融合优化,根据输入和权重计算Q、K、V矩阵,将 3 个 FC 融合为一个 Gemm。#10027
  • FC 支持 N 方向 bias。#9878
  • FFN 优化,主要是对 FC 算子进行优化,在第一次运行时,对权重矩阵进行重排操作。#10095
  • Gelu 激活函数近似优化。#10020
  • Multi-Head Attention 内存重排,融合多个 Reshape,Transpose 算子。#9878
  • 精度转换算子 Calib 和 Transformer 的 score 归一化系数 消除,融合为 Gemm 算子的 scale 参数。#9878

硬件支持

  • CPU
  • 特性
  • 新增 Arm Android 端硬件浮点性能评估工具。#10075
  • 算子、模型
  • Arm 端新增 viterbi_decode 算子。 #10066 #10101
  • 新增 Armv7 后端 FP16 精度 elementwise div kernel,修复 FP16 类型转换代码错误。 #10050
  • Arm 端新增 Linear_interp/Linear_interp_v2 实现。 #9983
  • Host 端新增 Pad 算子。 #10081
  • Host 端新增 unique 算子。 #9819 #9908 #9928
  • Host 端新增 empty、ceil 算子。 #10092
  • Host 端新增 bitwise_and、bitwise_or、bitwise_xor、bitwise_not 算子。 #10062
  • Host 端新增 temporal_shift 算子。 #10010
  • Host 端新增 atan2、log1p 算子。 #10114
  • BUG 修复
  • 修复 cast 算子 fp16_to_int32 转换错误。 #10082
  • 修复 Arm 后端 depthwise 卷积汇编错误。 #10001
  • 修复 scale_fuse_activation_pass 和 conv_fuse_scale_pass 对激活函数设置不正确的问题。 #9983
  • 修复 Arm 端 FP16 精度 global_avg_pooling 计算溢出的问题。 #9770
  • 修复 Arm gemv 内存越界问题。 #9910
  • 修复 winograd fp16 内存越界问题。 #9729
  • OpenCL
  • BUG 修复
  • 修复 remove_scale1_pass 的融合错误问题。 #9882
  • 修复 Mali GPU input shape n > 1 conv1x1 计算错误。 #9958
  • 修复 OpenCL precision FP16 精度设置的错误。 #98273
  • 修复 yolo_box 算子 boxes and scores 未清除导致后一轮的结果中混杂了前次的计算结果。 #9793
  • yolo_box 算子支持 FP16 精度。 #9767
  • 昆仑芯 XPU
  • 特性
  • 重构了 XPU thread_local 的实现。 #9817
  • 算子、模型
  • 新增 spatial_transformer 融合算子。 #10054
  • 新增 GEGLU 融合算子。 #10038
  • 新增 multi-head self/cross attention 融合算子。 #10037
  • silu/sin/cos/slice 算子支持 FP16 数据类型。 #10025
  • 新增 group_norm + silu 融合算子。 #10022
  • 优化 D2H/H2D 性能。 #9987
  • 新增 mask_adaptive 算子以及相关融合 pass。 #9970
  • 新增 conv2d_scale 融合 pass。 #9946
  • vitstr/maskocr 支持 dynamic reshape的图 pattern,bn 支持 FP16,conv2d 融合支持 gelu 激活。 #9942
  • 昆仑2、昆仑3 平台上使能 __xpu__conv2d_transpose_fuse_pass 融合 pass。 #9890
  • 更换 multiclass_nms 绑定的 xdnn 算子,放宽了部分参数的限制。 #9862
  • 优化 PPYOLO_dcn_2x 模型性能。 #9849 #9850
  • roformer 模型的 squeeze2/reshape2 算子融合优化。 #9810
  • 修改昆仑1上 gru_unit 算子以支持 pre_hidden 参数。 #9797
  • matmul 增加 int8 数据类型支持。 #9764
  • 新增 __xpu__quick_gelu 算子支持,并且会与 __xpu__multi_encoder 算子进行融合,优化针对 ViT 模型。 #9755
  • multi_encoder 算子支持没有 mask 输入的实现。 #9712
  • 新增 select_input kernel 实现,修复 box_coder 算子计算错误。 #9711
  • 新增 adaptive_seqlen_v2_fuse_pass ,并增加对 mask datatype 的支持。 #9710
  • sequence_mask kernel 新增 INT64 类型支持。 #9650
  • BUG 修复
  • 修复 argmax,strided_slice 在开启 L3 cache 和 auto-tune 导致模型推理失败的问题。 #10125 #10129
  • 修复 python + xpu 编译报错的问题。 #9961
  • 修复 sequence_pool/dequence_pad。 #9892
  • 修复 set_stream 设置错误的问题。 #9842 #9947
  • 修复了 calib 算子反量化 maxptr 传递 size 错误的问题。 #9700
  • 昇腾 NPU
  • 特性
  • 修复在 Lite + Python 下,昇腾出现 GIL 冲突导致程序无法运行错误。 #9768
  • 优化获取 CANN 版本的 CMake 代码,并新增 CANN > 6.0.0 的支持。 #9885
  • 将运行时无法获取 CANN 版本改为 WARNING,以不影响正常运行。 #9860
  • 新增 elementwise ops 的 INT64 数据类型的常量折叠。 #9859
  • 优化对 slice、stride_slice 和 elementwise ops 的动态 shape 推导逻辑。 #10076
  • 算子、模型
  • 新增 cos、sin、silu、elementwise_floor、sqrt、fill_zeros_like、rsqrt、roll、reduce_max 等算子。 #9768 #9972 #9976 #10138
  • 优化 group_normalization 和 layer_normalization IR 映射实现,性能有较大提升。 #9869
  • 新增 matmul 对于输入 y 维度为1时的支持。 #9972
  • 将 adaptive_pool2d 转换为 pool2d,以解决 CANN >= 6.0.0 时内部 Pass 错误问题。 #10143
  • BUG 修复
  • 修复 meshgrid 算子 shape 推导 和 IR 映射存在的错误。 #9935 #9940
  • 修复 pool2d 的 auto_pad 值获取错误问题。 #9972
  • 修复 adaptive_max_pool2d 在 5.1.rc1 的 CANN 无法使用的问题。 #10140
  • 文档
  • 修复昇腾部署文档关于硬件支持和容器创建命令的描述错误。 #9995
  • 高通 QNN
  • 特性
  • 新增适配高通 QNN 2.5。
  • 支持设置 VTCM 大小以提升性能。
  • 算子、模型
  • 新增 where、sum、square、sqrt、lookup_table、gather、logical_and、logical_not、pow、strided_slice 等算子。
  • 新增 ERNIE 3.0 全量化模型、ViT 模型。
  • BUG 修复
  • 解决模型 5-D 算子不支持的问题,通过 pass 实现 5-D 到 4-D 算子等价转换。
  • 修复 matmul + elementwise_add + softmax 融合的内存越界问题。
  • 芯原 TIM-VX
  • 特性
  • 新增支持 YOLOv8、PP-LiteSeg、PP-HumanSeg-Lite 常量折叠。
  • 算子、模型
  • 新增 abs、argmax、argmin、cast、exp、instance_norm、layer_norm、log、prelu、gelu、equal、not_equal、expand_v2、greater_than、greater_equal、less_than、less_equal、stack、calib、gather、floor、square、unstack、pow、strided_slice、fill_constant、fill_any_like、norm、logical_not、logical_and、sum、where、softplus、logsoftmax、assign、floor_div、sin、lookup_table、lookup_table_v2、meshgrid 等算子。
  • 新增模型(全量化模型)
  • 检测:YOLOv6、YOLOv7、YOLOv8、PP-YOLOE-Plus
  • 分类:PPLCNetV2、PPHGNet_tiny、EfficientNetB0
  • 分割:PP-LiteSeg、PP-HumanSeg-Lite
  • 联发科 APU
  • 特性
  • 新增支持 MT8188 芯片,适配 Neuron Adapter 6.0。
  • 新增支持 FP32 模型使用 FP16 计算。
  • 算子、模型
  • 新增 channel_shuffle、hard_swish、resize_linear、resize_nearest、split、sigmoid 算子。
  • 新增 Picodet、TinyPose 模型。

| 输入尺寸 | 耗时(ms)| |-- | -- | --| |Picodet FP32 | 1,3,192,192 | 11 | ||1,3,320,320 | 15 | |TinyPose FP32 | 1,3,128,96 | 4.95 | ||1,3,256,192 | 18.5 |