github PaddlePaddle/Paddle-Lite v2.8-rc

latest releases: v2.13-rc, v2.12, v2.12-rc...
3 years ago

Release Notes

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

框架升级

  • OPT 工具新增离线模型压缩功能,通过量化算法转化模型参数,原始模型体积可以降低50%~75%,详情参考使用文档
  • 加强模型加载时内存复用,初始化过程中内存占用峰值下降近50%。(#4917, #4973, #5064)
  • 增加模型校验,模型加载过程更加稳定
  • 增加算子版本控制方法,算子版本升级到与Paddle2.0一致,整体上提升Paddle 模型兼容能力
    • 增加算子版本的注册机制,对算子版本进行定义与兼容约束
    • 通过框架间算子版本的对齐,确保不同框架中同一算子版本的定义和行为一致,从而增强框架整体的健壮性。
  • 扩宽 Android 版本的支持范围:armv7 上可最低支持到 Android API Level 16, armv8 上可最低支持到 Android API Level 21
  • 编译优化,X86 支持MAC/Linux/Windows平台上的Intel MKL静态链接编译选项,减少MKL动态库体积(仅剩libiomp5为动态库),支持Windows平台上的MD_DynamicRelease编译选项
  • 优化 Windows x86 计时函数,降低耗时波动

新增接口

  • CxxConfigMobileConfig新增 set_x86_math_num_threads 接口来设置 X86 上 MKL 底层计算的线程数
  • NN硬件新增 set_subgraph_model_cache_buffers 接口支持从内存设置子图缓存产物,使用方法可参考Rockchip NPU Demo
  • 新增Python API接口: Tensor 与 numpy.array 相互转换的接口
    • tensor.numpy() : 将Tensor 中的数据转化为 numpy.array
    • tensor.from_numpy():从 numpy.array 数据对象创建 Tensor

新增算子

  • 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

支持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库里的情况

Don't miss a new Paddle-Lite release

NewReleases is sending notifications on new releases.