Skip to content

v2.8

Compare
Choose a tag to compare
@Superjomn Superjomn released this 31 Mar 04:30
· 25 commits to release/v2.8 since this release
cf63b77

Lite v2.8 Release Notes

Release Notes

Paddle-Lite v2.8 全面支持 Paddle 2.0 模型推理,并对框架进行了内存开销优化和稳定性改进。同时,ARM CPU, OpenCL 性能相对前一版本有较大提升,增加 XPU / NPU 图优化策略,并丰富了算子类型。

框架升级

  • 重点Feature:增加 “算子版本控制方法“

    • 算子版本控制方法:
      • 为算子(op)注册版本,对算子定义的修改会导致版本号提升
      • 向下兼容:高版本支持兼容低版本
    • 与PaddlePaddle API定义兼容:
      • Paddle-Lite上算子定义与 Paddle1.7/1.8/2.0 API 定义兼容
  • 源码编译

    • Arm移动端编译(Android/iOS/ArmLinux): 耗时降低约 50%
    • x86 编译(macOS/windows/Ubuntu):
      • 支持静态链接 Intel MKL 库
      • windows支持 MD_DynamicRelease 编译选项
    • 适配低版本Android:armv7 最低支持 Android API Level 16, armv8 最低支持 Android API Level 21
  • 模型转换工具(opt)

    • 支持离线量化功能:原始模型体积可以压缩50%~75%,详情参考使用文档
  • 初始化过程

    • 内存优化:初始化过程内存峰值降低50%
    • 模型加载: 增加数据校验,使加载过程更稳定
  • 其他:优化 Windows x86 计时函数,降低耗时波动

新增接口

  • C++ API 接口:新增 set_x86_math_num_threads ,可以设置 x86 上 MKL 底层计算的线程数

  • Python API 接口: 新增 tensor.numpytensor.from_numpy

    • tensor.numpy() : 将Tensor 中的数据转化为 numpy.array
    • tensor.from_numpy():从 numpy.array 数据对象创建 Tensor
  • NN硬件相关 API 接口:新增 set_subgraph_model_cache_buffers 接口

新增算子

  • bilinear_interp_v2
  • nearest_interp_v2
  • elementwise_min
  • elementwise_floordiv
  • flatten_contiguous_range
  • layout_once
  • lod_array_length
  • sync_batch_norm
  • fusion_elementwise_min_activation
  • multiclass_nms3
  • linspace
  • argsort
  • topk_v2
  • where
  • meshgrid
  • tile
  • cumsum
  • gather_nd
  • gather_tree
  • reduce_min

支持Paddle2.0 模型

对应支持 PaddlePaddle v2.0 ,官方验证了如下模型

image

文档更新

硬件&性能增强

ARM CPU

  • ARM CPU支持LSTM/GRU量化的模型
  • ARM CPU支持动态图量化训练功能产出的量化模型
  • ARM CPU支持RNN OP算子
  • ARM CPU 对卷积类算子做了性能优化,与上个版本相比FP32 模型性能有5%-10%提升:
    • 优化A53 处理器上卷积-GEMM 矩阵乘kernel的实现;
    • 优化其他卷积kernel的实现,如Im2col_GEMM 、conv_3x3s2_direct 等卷积算子;
  • ARM CPU支持高版本NDK编译
  • ARMLinux支持使用环境变量CC和CXX设置C编译器和C++编译器
  • ARM CPU INT8性能提升:
    • 基于NDK17在armv7下支持dot指令,在ARMv8.2架构下,GEMM性能有大幅提升(实测A76有150%-270%提升)
    • 重构GEMV INT8实现,在各架构下均有较大提升,平均提升100+%-200+%
  • ARM CPU 使用Intrinsic优化box_coder,增加对paddle fastrcnn和maskrcnn模型的支持
  • ARM CPU相对于上一个版本,绝大部分模型性能均有较大提升

image
image

OpenCL

  • OpenCL 的多平台支持:新增支持 Windows/macOS 平台,可利用 PC 端的集成显卡或独立显卡提高预测速度
  • OpenCL 的多精度运行执行:新增支持 fp32 精度,主要用于对精度要求较高的应用场景
  • OpenCL op 支持范围:新增 reduce_mean, hard_swish, prelu, batch_normclipyolo_box, shape, slice
  • OpenCL op 通用性增强算子:transposeconv2d
  • OpenCL 在线auto-tune新增2种online-auto-tune策略CL_TUNE_RAPIDCL_TUNE_NORMAL,更快调优模型性能;
  • OpenCL 增加对Buffer和Imaeg2D的内存边界检查,在用户输入尺寸较大导致运行失败情况下会有友好的提示;
  • OpenCL 增加scale-activation、conv-scale、conv-hard sigmoid、instance_norm-relu 融合,可以对包含该结构的模型有性能提升如Yolov3-Mobilenetv3;
  • OpenCL depthwise_conv2d3x3 强化:支持 stride 不一致时的计算

v2.8 版本与 v2.7 版本相比,绝大部分模型都有性能提升

1
2

昆仑 XPU

  • XPU增强conv2d的融合,新增多种模式的xpu_conv2d的融合
  • XPU增强pool2d:支持adaptive参数,支持全部类型的 padding
  • XPU增强 multi_encoder的融合:支持融合slice
  • XPU新增softmaxtopk的融合

RK NPU

  • Rockchip NPU新增reshape, flatten, scale, pad2d, transpose 等 op bridge,修复act, concat, batch norm 等 op bridge 中的问题
  • 针对Rockchip NPU全量化模型,新增pass实现多输入op(如concat)的输入、输出scale的一致性约束
  • Rockchip NPU新增支持Resnet-50和度目业务模型(CV检测和识别类)
  • Rockchip NPU支持离线模型缓存,支持从内存读入缓存后的模型,满足模型加、解密的业务要求
    已支持的MobileNetV1和ResNet-50全量化模型分别在TB-RK1808S0 AI计算棒、RK1808 EVB开发板和RV1109开发板的CPU和NPU性能(耗时)对比如下

image

硬件支持

Bug fix

  • 修复了 X86 在Windows上的预测库编译错误以及X86 Demo编译错误,以及Win32编译修复
  • 修复 ARM CPU sequence_convpool2x2 pool1x1小概率报错问题
  • 修复 ARM CPU conv_depthwise、conv_winogradtranspose`在模型输入shape变化情况下,小概率报错问题。
  • 修复 OpenCL avg pool2dinstance_normelementwise_add计算结果错误的问题
  • 修复 OpenCL concat 多输入情况下的内存泄露问题
  • 修复 windows 开启 profile 后crash问题
  • 修复compare OP推理输出shape的错误
  • 修复unstack在融合后出现输出tensor数量错误的问题
  • 修复对Android7.0(含)以上版本的检查部分手机厂商如魅族系统限制库使用的系统库,在使用cpu模型会挂在cpu+gpu库里的情况