v2.8
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.numpy
和tensor.from_numpy
tensor.numpy()
: 将Tensor 中的数据转化为numpy.array
tensor.from_numpy()
:从numpy.array
数据对象创建 Tensor
-
NN硬件相关 API 接口:新增
set_subgraph_model_cache_buffers
接口- 支持从内存设置子图缓存产物,使用方法可参考Rockchip NPU Demo
新增算子
- 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 ,官方验证了如下模型
文档更新
- 更新X86 MKL静态库支持以及Windows编译相关文档 PaddleLite使用X86预测部署
- 新增动态离线量化完整示例
- 更新XPU文档,提供xpu_toolchain的下载
- 更新Rockchip NPU文档,demo增加Resnet-50模型的支持,提供一键全量化PaddleSlim-quant-demo 用于生成适用于Rockchip NPU的全量化MobileNetV1和Resnet-50模型
硬件&性能增强
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相对于上一个版本,绝大部分模型性能均有较大提升
OpenCL
- OpenCL 的多平台支持:新增支持 Windows/macOS 平台,可利用 PC 端的集成显卡或独立显卡提高预测速度
- OpenCL 的多精度运行执行:新增支持 fp32 精度,主要用于对精度要求较高的应用场景
- OpenCL op 支持范围:新增
reduce_mean
,hard_swish
,prelu
,batch_norm
,clip
,yolo_box
,shape
,slice
- OpenCL op 通用性增强算子:
transpose
,conv2d
; - OpenCL 在线auto-tune新增2种online-auto-tune策略
CL_TUNE_RAPID
、CL_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 版本相比,绝大部分模型都有性能提升
昆仑 XPU
- XPU增强
conv2d
的融合,新增多种模式的xpu_conv2d
的融合 - XPU增强
pool2d
:支持adaptive参数,支持全部类型的padding
- XPU增强
multi_encoder
的融合:支持融合slic
e - XPU新增
softmax
和topk
的融合
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性能(耗时)对比如下
硬件支持
- 新增Imagination NNA 芯片的支持,增加文档和demo
Bug fix
- 修复了 X86 在Windows上的预测库编译错误以及X86 Demo编译错误,以及Win32编译修复
- 修复 ARM CPU
sequence_conv
、pool2x2
pool1x1
小概率报错问题 - 修复 ARM CPU
conv_depthwise、
conv_winograd、
transpose`在模型输入shape变化情况下,小概率报错问题。 - 修复 OpenCL
avg pool2d
、instance_norm
、elementwise_add
计算结果错误的问题 - 修复 OpenCL concat 多输入情况下的内存泄露问题
- 修复 windows 开启 profile 后crash问题
- 修复
compare
OP推理输出shape的错误 - 修复unstack在融合后出现输出tensor数量错误的问题
- 修复对Android7.0(含)以上版本的检查部分手机厂商如魅族系统限制库使用的系统库,在使用cpu模型会挂在cpu+gpu库里的情况