Skip to content

v2.13-rc

Latest
Compare
Choose a tag to compare
@hong19860320 hong19860320 released this 27 Mar 09:45
· 16 commits to release/v2.13 since this release
102697b

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