Paddle Lite Versions Save

PaddlePaddle High Performance Deep Learning Inference Engine for Mobile and Edge (飞桨高性能深度学习端侧推理引擎)

v2.8-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库里的情况

v2.7.1

3 years ago

Release Notes

此版本主要为各类增强和问题修复

功能与性能增强

  • 支持更多的XPU算子:conv2d_transpose,transpose,density_prior_box,prior_box,sequence_unpad,lrn,topk,relu6,hard_sigmoid,hard_swish,leaky_relu,softsign,bilinear_interp,nearest_interp,box_coder,split,im2sequence,reshape,flatten,flatten2。PR4897PR4926
  • 更新部分XPU算子的实现接口。PR4897
  • XPU支持fc算子的int31实现。PR4922
  • 增强XPU conv算子的fuse功能:支持带bias的conv融合;支持depthwise_conv的融合;支持激活为hard_sigmoid的融合。PR4926

问题修复

  • 修复int8 调用m=1 sgemv 模型在V7 运行crash问题,PR4887
  • 修复2x2s2p0 pooling 性能问题,PR4930

v2.7

3 years ago

Release Notes

框架升级

  • 本版本主要面向 PaddlePaddle 1.8x 及以前的推理模型

  • 注意, MobileConfig 对应的模型格式有变化,必须使用对应版本的 opt 重新转化模型

  • 升级执行期模型数据结构,显著提升移动端预测初始化速度,同时也降低了模型存储体积

  • 移动端模型存储格式从自建格式 NaiveBuffer 修改为 flatbuffers

  • 执行期内存消耗最高降低60%

    • 优化内存消耗过大算子(#3949
    • 删除内存中冗余ProgramDesc结构(#3976#3984
    • Tensor内存改为动态按需分配(#3948
    • 优化内存复用方法(#4246)
  • 移动端模型体积裁剪

    • opt工具删除模型中的冗余信息(#4042#4052
    • opt转化前采用动态离线量化方法,模型权重压缩为Int8或者Int16,模型体积可以至少减少50%,提升量化模型加载的速度#4308
  • 增强精度 profile 工具,可以通过环境变量控制是否将每层 op 的 output tensor 结果写入到手机目录文件中,方便精度调试 PR4255

  • MobileConfig::SetArmL3CacheSize :补充四种设置ARM CPU 下 L3 Cache 初始内存大小的方法 (#4402)

enum class L3CacheSetMethod {
  kDeviceL3Cache = 0, // Use the system L3 Cache size, best performance.
  kDeviceL2Cache = 1, // Use the system L2 Cache size, trade off performance
                      // with less memory consumption.
  kAbsolute = 2,      // Use the external setting.
};
struct MobileConfig {
  // ...
  // danger area
  void
  SetArmL3CacheSize(L3CacheSetMethod method = L3CacheSetMethod::kDeviceL3Cache,
                    int absolute_val) {}
  // ...
};
  • 支持gcn模型:#4444
  • 支持车牌识别OCR模型: #4205

文档更新

  • 更新 XPU 在 x86 平台的编译文档,修正 opt 工具对 XPU 优化的描述
  • 丰富Huawei Kirin(SoC) NPU、MediaTek APU和Rockchip NPU的文档,提供用户能快速验证的样例

功能与性能增强

  • 在V7架构上,针对a53 arch 增加6x8gemm优化,提高模型在低端机的性能
  • 优化prior box/boxcoder 实现,提高检测模型的性能PR4107
  • 添加pass,对于出度为1的reshape op启用memory optimize,在减少内存使用的同时提高性能PR4073
  • 添加FP32 的conv+conv融合实现,提高模型性能
  • 框架优化:将InferShape方法优化为InferShapeWithCache,降低InferShape执行次数,提高运行速度 (#4416#4294
  • 在框架上,优化内存,提高模型速度,减少APP中大帧出现的概率
  • 修复benchmark无法选中部分int32类型kernel的问题 #4846
  • 支持host端的range,crop,expand,stack的int32类型的kernel #4740
  • 支持XPU unstack kernel #4892
  • 新增 OpenCL auto-tune 特性 #4765
  • 新增 OpenCL kernel(三角函数、shuffle_channel、split) #4838#4782#4645
  • 优化 OpenCL concat 输入 tensor 个数大于 4 时的执行速度 #4779
  • MTK APU支持模型缓存#4468
  • MTK 新增concat、fusion_elementwise_add_activation、conv2d_transpose op bridge的支持,量化算子支持多个不同scale的输入#4451

硬件模型支持

  • 新增比特大陆BM1684(FP32)支持,支持模型同BM1682
  • 新增TB-RK1808S0计算棒、RV1126/1109 EVB,优化了文档和示例
  • 支持gcn模型:#4444
  • 支持车牌识别OCR模型: #4205

Bug fix

  • 修复v7-clang 下不对称padding的conv_3x3s1_dw的计算精度, PR4373
  • OpenCL tensor 内存分配:修复 OpenCL 模型在开启内存优化后多次 Run 计算结果有误问题 PR4410
  • OpenCL OP:修复 dropout, depthwise_conv2d_3x3 (dilation > 1), concat (axis 不等于 1), 分组 conv3x3 在骁龙 625 上结果错误问题 PR4253 PR4281 PR4241 PR4236
  • ARM OP:修复 reduce_mean, sequence_expand_as 算子 PR4492
  • Pass:修复 OpenCL 模型转换时类型推导错误的问题 PR4425
  • 修复x86平台初始化过程线程不安全问题 #4014
  • 修复动态离线量化模型进行conv+conv融合的错误#4292

v2.7-beta1.1

3 years ago

Release Notes

Bug Fix

  • 修复v2.7-beta1在特定使用场景下内存释放不彻底问题
    • 问题场景:创建并删除Predictor一次会导致约0.08Kb的内存残留
    • 修复方法:#4726,修复后在 “长时间、多场景”压力测试下内存指标平稳

v2.7-beta.1

3 years ago

Some bugfix to v2.7-beta version.

v2.7-beta1

3 years ago

v2.7-beta1

功能增强

  • MTK APU算子增加concat和conv2d_transpose,elementwise_ops支持不同scale的多个输入;
  • MTK APU支持小度业务模型手势算法的识别模型;
  • MTK APU支持离线模型缓存机制,避免二次加载后重复生成APU模型;
  • 降低 Protobuf 加载过程中的内存占用;
  • ARM CPU增加conv+conv融合,减少模型计算量,提升性能 , PR4452

Bug fix

  • 修复小度设备在6x8_a53 gemm函数crash问题 ,PR4508

v2.6.3

3 years ago

v2.6.3

功能加强

  • 支持subblock的图优化,即pass支持对 while/conditional_block 等 Op 的 subblock的优化,例如对subblock的Op Fuse、Kernel选择等,目前已在ARM和华为NPU上支持transformer模型 PR3947

  • 支持内部处理错误时向应用层抛出异常,防止程序出现 abort (暂时不支持android+armv7+gcc 脚本开关编译选项) PR3947

  • 新增 Op,支持RetinaNet模型 PR4157

  • 新增Paddle-Lite 手机端训练功能(仅用于技术预览)

    • ARM CPU上新增一系列反向传导和优化算子;
    • 在“波士顿房价预测”任务中,给出了基于安卓的端上训练,详情参考文档

文档更新

硬件能力

ARM CPU

  • 增加conv_winograd int8 实现,PR3767

NPU

  • 增加NPU模型缓存机制(支持内存和文件两种缓存方式),支持 dynamic shape,避免每次进行NPU模型的在线生成,缩短第一次推理耗时,同时降低内存的消耗 PR3947
  • 支持NPU内存共享,增加 zero copy 优化,大幅提高 CPU+NPU hybrid的推理性能 PR3947

OpenCL

  • 增加 OpenCL 预判API IsOpenclBackendValid,对于优先选择执行GPU的用户,可基于该API预判手机是否支持OPENCL,否则加载CPU模型,PR3951 PR4003
  • 优化OPENCL Conv和depthwise Conv执行流程,去除冗余计算,PR3924
  • 增加OPENCL auto tuning API,应用场景是对于长时跑的GPU模型,首次执行先做kernel tuning,对执行性能有一定提升,在mali gpu如kirin990/980/970上,针对mobilenetv1/v2有20~50%左右的GPU性能提升,PR4016

Bug fix

  • 增加2x2s1p1_pooling 实现及修复3x3s2p0 pooling 随机crash问题,PR3705
  • 修复softmax 随机crash及计算错误问题,PR3834
  • 修复gemm_prepack_oth_int8 函数随机crash问题,PR3906
  • 修复 opencl 加载int16模型的fc权重异常问题,PR3900
  • 修复了模型优化工具(opt) 转换模型后,出现模型参数大小膨胀的问题;
  • 修复了sequence_conv算子在batch size>1时计算错误的问题;
  • 修复android armv8的静态库编译出现undef pad问题 PR3977
  • 修复ARM CPU LSTM kernel注册问题 PR4007
  • 修复ARM CPU非对称的pooling计算结果不对的问题PR4013

v2.7-beta

3 years ago

v2.7-beta

框架升级

  • 注意, MobileConfig 对应的模型格式有变化,必须使用对应版本的 opt 重新转化模型

  • 升级执行期模型数据结构,显著提升移动端预测初始化速度,同时也降低了模型存储体积

  • 移动端模型存储格式从自建格式 NaiveBuffer 修改为 flatbuffers

  • 执行期内存消耗最高降低60%

    • 优化内存消耗过大算子(#3949
    • 删除内存中冗余ProgramDesc结构(#3976#3984
    • Tensor内存改为动态按需分配(#3948
    • 优化内存复用方法(#4246)
  • 移动端模型体积裁剪

    • opt工具删除模型中的冗余信息(#4042#4052
    • opt转化前采用动态离线量化方法,模型权重压缩为Int8或者Int16,模型体积可以至少减少50%,提升量化模型加载的速度#4308
  • 增强精度 profile 工具,可以通过环境变量控制是否将每层 op 的 output tensor 结果写入到手机目录文件中,方便精度调试 PR4255

  • MobileConfig::SetArmL3CacheSize :补充四种设置ARM CPU 下 L3 Cache 初始内存大小的方法 (#4402)

enum class L3CacheSetMethod {
  kDeviceL3Cache = 0, // Use the system L3 Cache size, best performance.
  kDeviceL2Cache = 1, // Use the system L2 Cache size, trade off performance
                      // with less memory consumption.
  kAbsolute = 2,      // Use the external setting.
};
struct MobileConfig {
  // ...
  // danger area
  void
  SetArmL3CacheSize(L3CacheSetMethod method = L3CacheSetMethod::kDeviceL3Cache,
                    int absolute_val) {}
  // ...
};
  • 支持gcn模型:#4444
  • 支持车牌识别OCR模型: #4205

文档更新

性能增强

  • 在V7架构上,针对a53 arch 增加6x8gemm优化,提高模型在低端机的性能
  • 优化prior box/boxcoder 实现,提高检测模型的性能PR4107
  • 添加pass,对于出度为1的reshape op启用memory optimize,在减少内存使用的同时提高性能PR4073
  • 添加FP32 的conv+conv融合实现,提高模型性能
  • 框架优化:将InferShape方法优化为InferShapeWithCache,降低InferShape执行次数,提高运行速度 (#4416#4294
  • 在框架上,优化内存,提高模型速度,减少APP中大帧出现的概率

硬件模型支持

  • 新增比特大陆BM1684(FP32)支持,支持模型同BM1682
  • 支持gcn模型:#4444
  • 支持车牌识别OCR模型: #4205

Bug fix

  • 修复v7-clang 下不对称padding的conv_3x3s1_dw的计算精度, PR4373
  • OpenCL tensor 内存分配:修复 OpenCL 模型在开启内存优化后多次 Run 计算结果有误问题 PR4410
  • OpenCL OP:修复 dropout, depthwise_conv2d_3x3 (dilation > 1), concat (axis 不等于 1), 分组 conv3x3 在骁龙 625 上结果错误问题 PR4253 PR4281 PR4241 PR4236
  • Pass:修复 OpenCL 模型转换时类型推导错误的问题 PR4425
  • 修复x86平台初始化过程线程不安全问题 #4014
  • 修复动态离线量化模型进行conv+conv融合的错误#4292

v2.6.3-beta2

3 years ago

Release Notes

功能加强

  • 支持subblock的图优化,即pass支持对 while/conditional_block 等 Op 的 subblock的优化,例如对subblock的Op Fuse、Kernel选择等,目前已在ARM和华为NPU上支持transformer模型 PR3947
  • 支持内部处理错误时向应用层抛出异常,防止程序出现 abort PR3947
  • 新增 retinanet_detection_output Op,支持RetinaNet模型 PR4157

NPU 增强

  • 增加NPU模型缓存机制(支持内存和文件两种缓存方式),支持 dynamic shape,避免每次进行NPU模型的在线生成,缩短第一次推理耗时,同时降低内存的消耗 PR3947
  • 支持NPU内存共享,增加 zero copy 优化,大幅提高 CPU+NPU hybrid的推理性能 PR3947

OpenCL 增强

  • 增加 OpenCL 预判API IsOpenclBackendValid,对于优先选择执行GPU的用户,可基于该API预判手机是否支持OPENCL,否则加载CPU模型,PR3951 PR4003
  • 优化OPENCL Conv和depthwise Conv执行流程,去除冗余计算,PR3924
  • 增加OPENCL auto tuning API,应用场景是对于长时跑的GPU模型,首次执行先做kernel tuning,对执行性能有一定提升,在mali gpu如kirin990/980/970上,针对mobilenetv1/v2有20~50%左右的GPU性能提升,PR4016

Bug fix

  • 修复android armv8的静态库编译出现undef pad问题 PR3977
  • 修复ARM CPU LSTM kernel注册问题 PR4007
  • 修复ARM CPU非对称的pooling计算结果不对的问题PR4013

v2.6.3-beta1

3 years ago

Release Notes

  1. 增加conv_winograd int8 实现,PR3767
  2. 增加2x2s1p1_pooling 实现及修复3x3s2p0 pooling 随机crash问题,PR3705
  3. 修复softmax 随机crash及计算错误问题,PR3834
  4. 修复gemm_prepack_oth_int8 函数随机crash问题,PR3906
  5. 修复 opencl 加载int16模型的fc权重异常问题,PR3900