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 计时函数,降低耗时波动
新增接口
CxxConfig
和MobileConfig
新增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 ,官方验证了如下模型
文档更新
- 更新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库里的情况