github PaddlePaddle/Paddle-Lite v2.9.1

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

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%提升。详细的性能数据如下:

image

  • 修改int8 conv_winograd 实现,在ARMv8.2上,选择GEMM实现;或者用Winograd 实现。在高端机上,resent50 模型有30+% 的提升
  • 当前public模型性能情况如下:

image
image

备注:

  • 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 等,其性能数据如下:

image
image

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 优化
    • conv+elementwise_add tree fuse pass,使得conv可以支持2个输入,减少一次数据读入操作 #6421
    • scale(with act) + scale(without act) fuse pass,连续的2个scale进行融合 #6263
  • 框架优化
    • 去除在线下载 opencl headers 过程,提高编译速度 #6533
    • 支持多线程场景下的 opencl kernel cache,提高首帧运行速度 #6542 #6563

MobilenetV1, SSD-MobilenetV3-large, Resnet50 模型在7种不同设备下运行耗时如下,蓝色代表最优竞品,红色代表Paddle-Lite v2.9,灰色代表本版本的Paddle-Lite:

image
image
image

更详细的Paddle-Lite v2.9 与Paddle-Lite v2.9.1的性能对比数据见下图:

image

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编译环境

Don't miss a new Paddle-Lite release

NewReleases is sending notifications on new releases.