v2.9.1
Release Notes
框架升级
- 新增API:
TryShrinkMemory
(API文档) 用于清理临时变量,降低平均内存消耗。
API 名称: TryShrinkMemory
详细描述:
- 输入(input) : 无(NULL)
- 返回值(return) : 调用成功与否(Bool)
- 效果: 通过释放 中间变量和L3ArmCache 所占用的内存空间,降低程序静止时所消耗的内存
- opt 工具稳定性提升: 降低转换过程的可能出现错误
硬件&性能增强
ARM CPU
性能优化
- C3 conv_direct 实现,kernel 性能有约5%-15% 提升
- 优化int8
conv_depthwise_3x3
实现,在 X2Paddle 转换的 tf_mobilenet v1/v2模型性能有5%-10%提升 - 添加A35 V8 GEMM优化实现,相对于A53和others实现,kernel性能有10-50%提升;在 X2Paddle 转换的 tf_mobilnet v1/v2 模型性能有20-40%提升。详细的性能数据如下:
- 修改int8 conv_winograd 实现,在ARMv8.2上,选择GEMM实现;或者用Winograd 实现。在高端机上,resent50 模型有30+% 的提升
- 当前public模型性能情况如下:
备注:
- mv1: tf_mobilnetv1
- mv2: tf_mobilnetv2
- mv3_small: tf_mobilnetv3_small
- mv3_large: tf_mobilnetv3_large
- ssd_mv3: ssdlite_mobilenet_v3_large
FP16 优化
- 添加conv_depthwise_5x5实现,在caffe_mnasnet的FP16 模型性能有一半提升
- 新增gather/transpose/elementwise_mul/interpolate/sequence_conv/Gru 等10+ FP16 OP实
- 支持检测/分类/NLP模型如tf_mobilenetv1/v2、resent_50、mobilenet_v3_ssd、ppyolo 等,其性能数据如下:
OpenCL
- kernel 性能优化
- 根据 Adreno GPU 和 Mali GPU 的特点,分别实现两套 conv 实现,在Mali GPU上提升效果明显 #6256 #6393 #6277
- 增加conv2d_1x1分块方式:由最初的H1W4C1一种分块,调整为 Adreno GPU 上的 7 种分块方式和 Mali GPU 上的 3 种分块方案。支持在预推理阶段提前Auto-Tuning试跑找到最适宜当前设备/计算规模的数据分块方式,以获得最佳的优化性能;
- 新增 winograd 实现 #6257
- 特化的 conv2d_1x1 实现:将特定情况下的 conv2d_1x1 等价为 FC,同时为了解决 input_channel 较大时单个线程需要遍历计算 input_channel 次乘累加操作,扩大了 4 倍线程数量,即将 input_channel 分成 4 部分,每个线程负责其中一部分的计算,然后 4 个线程通过 local memory 把中间乘累加结果归约在一起,同时使用访存更友好的 half16 存储权重,在MobileNetV3_small_x1_0_infer 模型上有1.3%到30%的性能提升 #6389
- 增强 pool2d:在global pooling时增加线程并行度,使用local memory归约,kernel 性能由2到24倍的提升 #6267
- 增强 concat:多输入concat 实现在 CPU 上耗时很小,但是在GPU上很容易就会成为性能瓶颈,因此实现了一个通用型 concat kernel,避免了数据类型转换,ssd_mobilenetv3-large 模型在 855 手机上有22%的性能提升 #6266
- Pass 优化
- 框架优化
MobilenetV1, SSD-MobilenetV3-large, Resnet50 模型在7种不同设备下运行耗时如下,蓝色代表最优竞品,红色代表Paddle-Lite v2.9,灰色代表本版本的Paddle-Lite:
更详细的Paddle-Lite v2.9 与Paddle-Lite v2.9.1的性能对比数据见下图:
xpu
- 新增fuse pass:
- bigru
- conv2d_affine_channel
- 新增op&kernel:
- bigru
- sequence_pad
- sequence_mask
- gru_unit
- unsqueeze
- prelu
- elementwise_max
- fill_zeros_like
- grid_sampler
- reduce_all
- reduce_any
- reduce_prod
- reduce_max
- reduce_min
- 更新xpu_toolchain依赖方式
Bug fix
- 修复host fill_any_like在dtype=-1情况下的计算逻辑
- 修复可变输入shape下,conv_winograd 计算crash 问题
- 修复部分size下,gemv_trans 计算读越界风险问题
- 修复sgemv_trans函数在IOS设备上跑crash问题
文档更新
- 更新armlinux编译环境