PaddlePaddle/Paddle-Lite v2.11
PaddlePaddle/Paddle-Lite
Captured source
source ↗published May 11, 2022seen 5dcaptured 9hhttp 200method plain
v2.11
Repository: PaddlePaddle/Paddle-Lite
Tag: v2.11
Published: 2022-05-11T02:58:30Z
Prerelease: no
Release notes:
Release Notes
重要更新
- 新增非结构化 1x1 稀疏卷积实现,非结构化稀疏卷积 相对于稠密卷积,在 75% 稀疏下,性能有20%-40% 提升(支持int8/fp32精度计算),以下图示竖坐标默认为毫秒。
- 支持 MobileNet 系列模型,FP32 和INT8 精度模型在ImageNet数据集的精度损失1 #8499 ,conv2d_transpose/depthwise_conv2d_transpose支持group>1 #8494,conv2d_transpose/depthwise_conv2d_transpose支持dilation>1 #8429 , gridsampler #8546,fc #8465,box_coder #8400,concat #8375,split #8322,gather #8145,transpose #8477 #8341
- [OpenCL] 修复算子:grid_sampler #8541,lrn #8529,softmax #8409,pool2d #8397 #8591,matmul #8386 #8701,reshape/reshape2 #8364
- [OpenCL] 新增Pass:elementwise + relu6 融合 Pass #8731,keepdims convert pass #8319 ,conv + sigmoid pass #8490
- [Metal] 新增算子:reduce_max,reduce_min,reduce_mean,reduce_sum #8173,matmul #8062,exp #8082
- [Metal] 更新算子:slice #8470,conv2d #8496 #7689,softmax #8498,reshape #8542,conv2d_transpose #8439,reduce #8366,BatchNorm #8324,arg_max #8384,equal #8347,Hardsigmoid HardSwish #7662,split #7466,elementwise #7467,concat #7465,elementwise #7467 #7737
- [Metal] 修复算子: yolo_box 计算错误 #8575,box_coder 无法运行 #8493,concat #8345,输入维度校验错误 #8352,bilinear_interp #8285,pad2d #8232,scale #8210,relu relu6 #8082
- 昆仑芯
- 使用官方正式名称 “昆仑芯”(原名 “百度昆仑” ),且修改脚本中相关描述, #8091
- 新增算子:lod_array_length( #7314),conv3d( #7642),gelu( #7527)
- 更新算子API:concat( #8184),fc_batched_vsl( #7998),search_varconv( #7865),sequence_topk_avg_pooling( #7411),fc_fusion( #7029),sequence_reverse( #6798),sequence_concat( #6847),findmax,match_matrix_tensor,match_matrix_tensor( #7012),l2_norm( #7724),sequence_unpad( #7640)
- 修复bug:内存分配错误( #7498、 #7528),prior_box max_size 为 0 时报错( #8214),算子包含 inlace 属性时内存优化策略可能报错( #8213),conv_transpose 有 output_padding 时计算错误,instance_norm 没有 bias 或者 scale 时计算错误( #7642),有共享内存时内存优化报错( #7966),默认 workspace 可能释放错误( #7422),l2_norm 计算错误( #7983),多线程内存泄露问题( #8010)
- Host
- 新增算子:sampling_id: #7683、unfold:#8305、softplus:#8041
- NNAdapter 提供 fake device 的 HAL 和 DDK sample code,支持 HAL 和 DDK 的独立编译,进一步降低厂商适配成本
- 提供 fake device 的 HAL 示例代码,厂商只需做少量的修改,便可快速完成硬件适配并调通整个模型;
- 针对部分厂商缺少类似 TensorRT 的在线组网 DDK 的问题,提供了 fake device 的 DDK 示例代码 帮助硬件厂商快速完成在线组网 DDK的开发;
- HAL 和 DDK 的示例代码同时提供在 PaddleLite-generic-demo 的 libs/PaddleLite/samples/fake_device 目录中,支持独立编译,即厂商无需与 Paddle Lite 联编即可快速产出 HAL 和 DDK。
- 昇腾 NPU
- 新增int8 量化模型及混合精度特性的支持; #8081
- 新增基于档位和范围两种方式支持 dynamic shape 模型; #8585、 #8568
- 兼容不同版本的 CANN,新增 Ascend 710 和 Ascend 910 的支持; #7956
- 新增 17 个算子的支持,目前已支持的算子总数达到 87 个; #8041、 #7827
- 新增 41 个开源模型的支持,目前已支持的开源模型达到 76个。 #7827、 #8401、 #8594
- 芯原 TIM-VX
- 新增支持芯原TIM-VX,已完成晶晨 A311D、S905D3 芯片在 Khadas VIM3/3L 开发板对 MobileNetV1 、ResNet50、SSD-MobileNetV1 fp32/int8 全量化模型的支持,理论上支持所有基于芯原 VIP 系列神经网络 IP 的芯片,包括: #7706、 #7878、 #8177、 #8331
- 晶晨:S905D3,C308X,C305X,A311D,V901D,S905X3,T962E2,T962X3
- 瑞芯微:RK1808,RK1808S0,RV1109/1126
- 恩智浦: i.MX 8M Plus
- JLQ:JA308,JA310,JA312
- Android NNAPI
- 新增支持 Android NNAPI,完成 21 个 Paddle 算子和 MobileNetV1、ResNet50、SSD-MobileNetV1 fp32/int8 全量化模型的适配,支持 Android 8.1(Oreo) 及以上的终端设备,目前已验证部分高通、联发科 和华为麒麟的芯片,由于不同芯片厂商对 Android NNAPI 支持程度不同( 其中联发科和华为麒麟芯片性能较好),可能存在模型回退到 Android NNAPI 默认参考实现 nnapi-reference 执行而导致性能下降的问题。#8390、#8462、#8486
- OpenVINO
- 新增支持 OpenVINO,作为预览版目前只完成 ResNet50 模型在 CPU 设备 FP32 精度上的支持,需要依赖 OpenVINO 2022.1 。 #8552
性能优化
- ARM CPU
- 添加matmul/matmul_v2+elementwise_add fusion 支持,对模型性能有20%-40% 提升
- 添加FC+relu6 融合支持,对模型性能有约5%-10% 提升
- 添加conv+hardswish 融合支持,对含有该结构的模型,性能有约12%提升
- FP16 V7 GEMM 优化实现, 模型性能有约20%-30% 提升
- FP16 V7 conv 5×5 depthwise conv 3×3 s2 direct 优化实现、 FP16 V7 conv 3x3 s2 depthwise实现,模型性能有约20%-30% 提升
- ARM V7 FP16 性能数据和竞品性能对比如下图:
- FP32 VS FP16 性能,性能约有 40%~50% 提升
- Mali GPU
- 解决 Mali GPU 首帧(有 kernel cache 的情况)耗时偏长问题, 首帧耗时提升 3~4 倍 #8640 #8576
- NNAdapter
- 新增range、assign_value、fill_constant、unsqueeze、scale常量折叠pass规则:#7200、#7207、#8056、#8259、#8298
Bug修复
- 通过 Autoscan 单测测试方案,修复 30+ 算子/PASS 精度diff/运行crash 问题,例如:修复matmul_v2 少数case下计算错误、修复conv_transpose 部分case 下计算diff、修复 box_corder 在 "code_type" 为 "encode_center_size" 下计算diff等
- 修复自动插入 calib 时因为 device 不同找不到合适的 kernel 的问题, #8299
- 优化找不到 kernel 时的报错信息, #8203
- 修复在 arm core 大于 128 个的机器上的运行报错的问题, #7857
- 修复 \__xpu__resnet_fuse_pass 匹配错误的问题, #7824
- 修复 while 涉及的 variable 可以推导出错误 place 的问题, #7315
- 修复部分 nnadapter + conv act fuse 错误的问题,#7296
- 修复部分模型 sequence_pool 参数解析错误的问题,#8374
- 修复些许读越界/栈空间分配失败错误,如Android子线程下栈空间分配不足、读越界错误修复等
- 修复matmul/matmul_v2 不支持x_dims=2,y_dims=1 的case,详见#8556
- 修复A35 上conv+leakyRelu 计算diff 错误,详见#8508
- 修复armv7 gemm c8 计算错误,详见 #8628
- 修复mul int8、matmul int8、fc int8计算错误、量化模型转换错误,详见 #7310、 #7964
- 修复由于添加a35 sgemm_c4函数带来的性能下降错误 #7094
- 修复armv8 在A53芯片上gemm错误,详见 #8509
- 修复ARM OPT找不到depthwise_conv_transpose算子的错误 #7270
- 修复ARM CV 相关函数读越界问题 #7671
- 修复ARM Android shell demo NDK23编译失败问题 #8245
- 修复ARM RNN 中间态输出错误问题 #8610
- 修复mask_rcnn和fast_rcnn在opt转换过程中报错的bug #8590
-…
Excerpt shown — open the source for the full document.