Skip to content

v2.11

Compare
Choose a tag to compare
@liyancas liyancas released this 11 May 02:58
· 34 commits to release/v2.11 since this release
6f20460

Release Notes

重要更新

  • 新增非结构化 1x1 稀疏卷积实现,非结构化稀疏卷积 相对于稠密卷积,在 75% 稀疏下,性能有20%-40% 提升(支持int8/fp32精度计算),以下图示竖坐标默认为毫秒

    • 支持 MobileNet 系列模型,FP32 和INT8 精度模型在ImageNet数据集的精度损失<1%,性能有20%-40% 提升,在高通835上 armv8 和 armv7 性能情况如下图所示:
      MobileNet 非结构化稀疏耗时

    • 支持 PicoDet-m 系列模型,其中 PicoDet-ESNet-m 模型在 coco 数据集上的 mAP 损失1.5%,性能有 30%-50% 提升,在高通835上单线程和多线程(4线程)性能情况如下图所示:
      检测模型耗时

  • 新增半结构化 1x1 稀疏卷积实现,半结构化稀疏卷积相对非结构化稀疏卷积,性能有 5%-30% 提升(支持 int8/fp32 精度计算)

    • 支持 MobileNet 系列模型,FP32 和 INT8 精度模型在 ImageNet 数据集的精度损失<1%,性能有20%-40% 提升,在高通835上armv8 和 armv7 性能情况如下图所示 MobileNet 半结构化稀疏耗时

    • V7 FP16 精度模型支持,相比 FP32 模型,性能有约一半提升
      高通骁龙865-armv7-单线程性能

框架升级

硬件支持

  • ARM CPU

  • OpenCL/Metal

    • 新增 MacOS 平台 GPU 支持,支持 Apple Silicon 系列、Intel 系列 Mac/MacBook。 #7347 #7348

    • Metal 支持 iOS 9/iOS 10平台。 #7367

    • 算子实现完备度提升:基于 Autoscan 单测框架,全面提升算子和 Pass 实现的完备度,修复/增强 33 个 OpenCL算子和 28 个 Metal 算子,14 个 Pass

  • 昆仑芯

    • 使用官方正式名称 “昆仑芯”(原名 “百度昆仑” ),且修改脚本中相关描述, #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

  • 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

  • 芯原 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

性能优化

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
  • 修复InferShapeWithCache的bug,使其支持非动态输入时,部分算子运行时只需推导一次算子shape信息 #8282
  • 修复pybind中c++ tensor转化为py::array的bug #8057
  • 修复cmake config过程中,部分python脚本不兼容python3导致编译失败的问题 #8834
  • 修复ARM CPU 读越界错误, #7709
  • 修复ARM int8 卷积单测下,多线程计算错误, #7648 #7692
  • 修复ARM 动态shape 计算diff, #7585

文档优化

  • 更新 OpenCL 部署文档,重点添加各 OS 下的部署示例、关键 API 接口函数说明 #8517 #8502
  • 更新算子支持列表 #7139
  • 新增 Metal 部署文档 #8510
  • 新增 OpenCL/Metal 算子添加说明 #8447 #8451
  • 新增 英特尔 OpenVINO 部署示例 文档 #8848
  • 新增 Android NN API 部署示例 文档 #8832
  • 更新 昇腾 NPU 部署示例文档,重点更新了支持的开源模型列表,支持的昇腾芯片与CANN版本列表 #8728,新增dynamic shape、混合精度和高级参数的功能配置说明 #8786
  • 更新FAQ 文档,新增FP16 和多线程使用问题支持 #8733 #8714
  • 新增单测书写文档 #8582