Improved
v2.13-rc
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

- 优化 Transformer 类模型在 Arm CPU 的性能。
- 具体方案(以 ERNIE 3.0-Mini 为例,左侧是经过 PaddleSlim 量化后的模型结构,右侧是 Paddle Lite 针对 Attention 结构算子融合后的结果)
- 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
- 具体方案(以 ERNIE 3.0-Mini 为例,左侧是经过 PaddleSlim 量化后的模型结构,右侧是 Paddle Lite 针对 Attention 结构算子融合后的结果)
硬件支持
-
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
- BUG 修复
-
昆仑芯 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
- 特性