Skip to content

v2.9

Compare
Choose a tag to compare
@Superjomn Superjomn released this 18 May 13:52
· 2145 commits to develop since this release
306d09d

Release Notes

重要更新

  • 推理库体积大幅压缩及提升opt转换工具易用性
  • 大幅提升Windows编译效率
  • 增加ARM CPU armv8.2 fp16指令支持
  • 大幅优化opencl性能
  • 新增支持基于Intel FPGA海云捷迅开发板

框架升级

  • 重点Feature:

    • 支持FP16低精度运行

      • 推理速度提升30%、内存消耗降低30%
      • 当前只支持部分高端Android机型(高通865、高通835、kirin990)
    • 根据模型压缩库功能: 使用说明

      • 根据模型信息压缩预测库体积
        • 图片
      • 一键化脚本
        • cd Paddle-Lite && ./lite/tools/build_android_by_models.sh /models
      • 格式化产出: 转化后模型 + opt 工具 + 压缩后的预测库
        • 图片
    • 模型支持Embedding量化

      • Embedding权重支持int8/16存储,有效减小模型存储体积。
      • 图片
  • opt 工具易用性升级

    • 自动识别模型格式(可识别以下几种格式)
      • [格式1] __model__ + var1 + var2 + etc.
      • [格式2] model + var1 + var2 + etc.
      • [格式3] model.pdmodel + model.pdiparam
      • [格式4] model + params
      • [格式5] model + weights
    • 简化提示信息
      • 常规模式:加载信息 + 转化信息
        • 图片
      • DEBUG 模式: 通过设置环境变量 GLOG 可以进入DEBUG模型、打印更详细的中间信息
    • 可查看优化后模型结构:
      • opt --optimize_out_type=protobuf
      • 用netron 查看转化后的模型结构
  • 源码编译

    • 支持更多的NDK版本: 支持 r16b ~ r20c
    • windows编译:编译耗时大幅降低,减少约60%
    • Docker : 更新Docker镜像(TODO)、Docker镜像体积降低30%
  • 其他

    • 输入格式检查:自动检查模型输入 shape\precision 信息是否正确
    • 支持获得int64类型的输出 #5832

新增算子

  • correlation
  • polygon_box_transform
  • roi_perspective_transform
  • scatter_nd_add

硬件&性能增强

ARM CPU

  1. 新增OP
  • 新增 int8 matmul OP,支持CRNN量化模型;#5986
  • 新增 matmul+elementwise_add fusion OP,以提高部分动转静模型的性能;#5979
  1. FP16 特性支持
  • 仅在armv8.2 架构手机(如小米8、小米9等)上支持ARMv8 FP16模型推理
  • 新增10+ FP16 OP算子,如:GEMM、Convolution、Pooling、Softmax、Fc 等
  • 已跑通分类模型如mobilenetv1、mobilenetv2、resentv1等模型;
    详细性能数据如下图:
    图片
  1. FP32性能优化:
  • GEMM V8性能优化,对mobilenetv1 性能有5%左右提升; PR5957
    详细性能数据如下图:
    图片

OpenCL

  • 新增 op: sqrt, square, rsqrt, matmul #5791
  • 增强 conv2d_1x1,通过在线预计算选择最优分块方式,大部分模型普遍有10%-25%的性能提升 #6067 #5904
  • 增强 conv2d_3x3,通过对 filter 数据重排,resnet50 在大部分手机上有 5%-60% 的性能提升 #5618
  • 新增 5 个 pass:
    • 通过 pass 精简模型结构,提高了 SSD 模型速度,adreno gpu 加速明显(855、865上有 1 倍加速),mali gpu 加速效果稍小(kirin990 和 rk3399 上分别有 25% 和 14% 的加速)#5930 #5965
    • 新增 flatten_contiguous_range + fc 融合 pass,Paddle2.0 模型 mobilenetv1 在大部分手机上有 5%-10% 的性能提升 #6057
    • 新增 conv + prelu 融合 pass,mtcnn_det3 模型在骁龙 865 上有 20% 的性能提升 #5461
    • 新增 fc + prelu 融合 pass #5468
    • 开启 elementwise + act pass #5791
  • 实现layout_cast对 5 维 tensor 的支持 #5777
  • 新增定期刷新命令队列接口,默认关闭 #5905

X86

  • 新增elementwise_mod #5472
  • 支持bool/int32为输入的cast,支持int32 slice #5511
  • 新增reduce_max #5633
  • 新增reduce_prod #5692
  • 新增gru_unit #5739
  • 支持int32/int64 elementwise_mul #5852
  • 新增instance_norm#5860
  • 新增 elementwise_max, elementwise_min #5862
  • 修复var_conv2d缺少COLUMN/ROW输入注册的问题 #5880
  • 支持int32/int64 concat #5887
  • 新增 grid_sample #5895
  • 支持int32/int64 slice;新增elementwise_div #5898
  • 修复concat在axis<0时的计算问题 #5917
  • 新增elementwise_pow, sqrt #5928

Host

  • 新增increment #5472
  • 新增tril_triu #5507
  • 新增polygon_box_transform #5627
  • 新增beam_search_decoder #5670
  • 新增roi_perspective_transform #5680
  • 新增sequence_expand #5685
  • 新增pad2d #5694
  • 新增lod_reset #5710
  • 新增distribute_fpn_proposals,collect_fpn_proposals #5760
  • 新增topk #5758
  • 新增beam_search #5759
  • multiclass_nms支持PolyIoU #5773
  • 新增split #5796
  • 新增assign_value#5828
  • 新增correlation #5865
  • 新增sequence_pad #5867
  • 新增sequence_mask #5871

昆仑 XPU

  • 支持int32 slice #5488
  • 支持int32/int64为输入的reshape2 #5511
  • 支持int32 elementwise_add #5539
  • 支持带sub_block的模型预测 #5725
  • 支持CxxConfig支持预测带sub_block的模型 #5776
  • 支持tensor_array类型 #5815
  • 修复L3 cache可能分配不正确的问题 #5868
  • elementwise类算子支持x的维度数小于y的维度数 #5906
  • 修复arm下编译问题 #5997

RK NPU

  • 新增norm op bridge #5926
  • 新增ssd模型prior_box离线处理pass,针对SSD系列模型,Rockchip NPU、HuaweiKirinNPU、OpenCL均能获得性能提升 #5788
    图片
    图片
  • 新增支持全量化模型的异构计算 #5591

硬件支持

Bug fix

  • 修复 OpenCL conv+prelu 融合带来结果异常的问题 #5793
  • 修复 OpenCL bilinear_interp结果错误问题 #5482
  • 修复 kirin970 armv7 OpenCL运行报错问题 #5791
  • 修复 armlinux 编译mobile_full demo报错问题 #6068
  • 修复expand的输入为ExpandTimes和expand_times_tensor时dim错误的bug #5488
  • 修复opt打印支持算子的格式问题 #5600
  • 修复从内存加载模型的问题 #6004
  • 修复不支持UInt8类型变量的问题#6032
  • 修复int8 GEMM LeakyRelu和Relu6计算错误;#5986
  • 修复group_norm不对齐paddlepaddle API的计算错误;#5683

文档更新