PaddlePaddle High Performance Deep Learning Inference Engine for Mobile and Edge (飞桨高性能深度学习端侧推理引擎)
CPU
OpenCL
昆仑芯 XPU
昇腾 NPU
高通 QNN
芯原 TIM-VX
联发科 APU
输入尺寸 | 耗时(ms) | |
---|---|---|
Picodet FP32 | 1,3,192,192 | 11 |
1,3,320,320 | 15 | |
TinyPose FP32 | 1,3,128,96 | 4.95 |
1,3,256,192 | 18.5 |
Arm CPU 性能优化
OpenCL GPU 性能优化
Arm CPU
OpenCL GPU
新增非结构化 1x1 稀疏卷积实现,非结构化稀疏卷积 相对于稠密卷积,在 75% 稀疏下,性能有20%-40% 提升(支持int8/fp32精度计算),以下图示竖坐标默认为毫秒。
支持 MobileNet 系列模型,FP32 和INT8 精度模型在ImageNet数据集的精度损失<1%,性能有20%-40% 提升,在高通835上 armv8 和 armv7 性能情况如下图所示:
支持 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 性能情况如下图所示
V7 FP16 精度模型支持,相比 FP32 模型,性能有约一半提升
AutoScanTester
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
昆仑芯
Host
NNAdapter 提供 fake device 的 HAL 和 DDK sample code,支持 HAL 和 DDK 的独立编译,进一步降低厂商适配成本
昇腾 NPU
芯原 TIM-VX
Android NNAPI
OpenVINO
新增非结构化 1x1 稀疏卷积实现,非结构化稀疏卷积 相对于稠密卷积,在 75% 稀疏下,性能有20%-40% 提升(支持int8/fp32精度计算)
支持 MobileNet 系列模型,FP32 和INT8 精度模型在ImageNet数据集的精度损失<1%,性能有20%-40% 提升,在高通835上 armv8 和 armv7 性能情况如下图所示:
支持 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 性能情况如下图所示
V7 FP16 精度模型支持,相比 FP32 模型,性能有约一半提升
AutoScanTester
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
昆仑芯
Host
NNAdapter 提供 fake device 的 HAL 和 DDK sample code,支持 HAL 和 DDK 的独立编译,进一步降低厂商适配成本
昇腾 NPU
芯原 TIM-VX
Android NNAPI
OpenVINO
添加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% 提升
FP16 V7 竞品性能,性能约有 5%~30% 提升
FP32模型性能:低端机模型性能均优于竞品,高中端机模型性能部分优于竞品,部分差于竞品TFLite,在进一步优化中
INT8 模型性能:模型性能均优于竞品
模型:
tf_mobilnetv1
tf_mobilnetv2
tf_mobilnetv3_small
tf_mobilnetv3_large
ssdlite_mobilenet_v3_large
竞品:
android_aarch64_benchmark_model
) = 9851018013eb46ada7aedfad88f01da8android_arm_benchmark_model
) = af6ca4bb724b9faa2370d307749f556a--cpuBindMode=1
(大核)新增 V7 FP16 编译支持,要求 NDK 版本 21 及其以上
新增 V7 FP16 激活实现,如 relu
、relu6
、hard_swish
等
新增 V7 FP16 Winograd 卷积、calib
、fill_bias_act
等算子实现
新增 conv_3x3s2_direct
C3 实现,kernel 性能有5%-10% 提升,详见PR6726
新增 5+ V8 FP16 OP实现,如 box_clip
、prior_box
、hard_swish
等实现
性能数据:
版本间性能对比:大部分模型有10%-30% 提升,详细性能数据请见下图
竞品性能对比:模型性能均优于竞品MNN 和 Mindspore-Lite,大部分模型性能与TNN 持平或稍差于,详细性能数据请见下图
模型:
tf_mobilnetv1
tf_mobilnetv2
tf_mobilnetv3_small
tf_mobilnetv3_large
ssdlite_mobilenet_v3_large
竞品:
新增Bigru模型的支持,详见PR7212
新增10+ OP 算子支持,如 conv_transpoe
、rnn
、 rduce_min
、 pow
、mish
等,跑通 Paddle 2.0 50+ 模型
新增 elementwise
的 broadcast 模式支持,详见PR6957
新增Bigru模型的支持,详见PR7212
优化卷积中 bias + act 实现,卷积性能有1-2倍的提升,详见PR6704
优化3x3 depthwise卷积实现,对于MobilNetV1/V2性能提升约为20%,详见PR6745
优化5x5 depthwise卷积实现,对于MobilNetV3 small/large性能提升超过20%,详见PR6745
性能数据:
版本间性能对比:大部分模型性能有约20%-30% 提升,详细性能数据请见下图
测试机:Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
模型:
tf_mobilnetv1
tf_mobilnetv2
tf_mobilnetv3_small
tf_mobilnetv3_large
新增 15个 OP,包括 anchor_generator
,box_clip
,conv2d_transpose
,clip
,generate_proposals / generate_proposals_v2
,group_norm
,nearest_interp_v2 / bilinear_interp_v2
,mish
,pow
,rnn
,roi_align
,yolo_box
,reduce_min
,reverse
,inverse
.
GPU 基础能力提升
kImageFolder
#7143
depthwise_transpose_conv
, max
, argmax
, abs
, greater_than
#6912 #6877 #6816 #6920 #6595
elementwise
,支持 broadcast #7306 #7363
kernel 性能优化
Pass 相关
性能数据:
__xpu_logit
等 8 个 fuse passless_than
, argmax
等 65 个 kernel,详细列表请参考最新的 支持算子列表
__xpu__conv2d
__xpu__fc
__xpu__multi_encoder
__xpu__embedding_with_eltwise_add
支持 Mask 输入和 SeqLod、PadSeqLen 输出unsqeeze2
算子报错问题 #7384
depthwise_conv_transpose
,详见PR7270
FP32模型性能:低端机模型性能均优于竞品,高中端机模型性能部分优于竞品,部分差于竞品TFLite,在进一步优化中
INT8 模型性能:模型性能均优于竞品
模型:
tf_mobilnetv1
tf_mobilnetv2
tf_mobilnetv3_small
tf_mobilnetv3_large
ssdlite_mobilenet_v3_large
竞品:
android_aarch64_benchmark_model
) = 9851018013eb46ada7aedfad88f01da8android_arm_benchmark_model
) = af6ca4bb724b9faa2370d307749f556a--cpuBindMode=1
(大核)新增 V7 FP16 编译支持,要求 NDK 版本 21 及其以上
新增 V7 FP16 激活实现,如 relu
、relu6
、hard_swish
等
新增 V7 FP16 Winograd 卷积、calib
、fill_bias_act
等算子实现
新增 conv_3x3s2_direct
C3 实现,kernel 性能有5%-10% 提升,详见PR6726
新增 5+ V8 FP16 OP实现,如 box_clip
、prior_box
、hard_swish
等实现
性能数据:
版本间性能对比:大部分模型有10%-30% 提升,详细性能数据请见下图
竞品性能对比:模型性能均优于竞品MNN 和 Mindspore-Lite,大部分模型性能与TNN 持平或稍差于,详细性能数据请见下图
模型:
tf_mobilnetv1
tf_mobilnetv2
tf_mobilnetv3_small
tf_mobilnetv3_large
ssdlite_mobilenet_v3_large
竞品:
新增10+ OP 算子支持,如 conv_transpoe
、rnn
、 rduce_min
、 pow
、mish
等,跑通 Paddle 2.0 50+ 模型
新增 elementwise 的 broadcast 模式支持,详见PR6957
优化卷积中 bias + act 实现,卷积性能有1-2倍的提升,详见PR6704
优化3x3 depthwise卷积实现,对于MobilNetV1/V2性能提升约为20%,详见PR6745
-性能数据:
版本间性能对比:大部分模型性能有约20%-30% 提升,详细性能数据请见下图
测试机:Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz
模型:
tf_mobilnetv1
tf_mobilnetv2
tf_mobilnetv3_small
tf_mobilnetv3_large
新增 15个 OP,包括 anchor_generator
,box_clip
,conv2d_transpose
,clip
,generate_proposals / generate_proposals_v2
,group_norm
,nearest_interp_v2 / bilinear_interp_v2
,mish
,pow
,rnn
,roi_align
,yolo_box
,reduce_min
,reverse
,inverse
.
GPU 基础能力提升
kernel 性能优化
Pass 相关
性能数据
__xpu_logit
等 8 个 fuse passless_than
, argmax
等 65 个 kernel,详细列表请参考最新的 支持算子列表
__xpu__conv2d
__xpu__fc
__xpu__multi_encoder
__xpu__embedding_with_eltwise_add
支持 Mask 输入和 SeqLod、PadSeqLen 输出TryShrinkMemory
(API文档) 用于清理临时变量,降低平均内存消耗。API 名称: TryShrinkMemory
详细描述:
- 输入(input) : 无(NULL)
- 返回值(return) : 调用成功与否(Bool)
- 效果: 通过释放 中间变量和L3ArmCache 所占用的内存空间,降低程序静止时所消耗的内存
conv_depthwise_3x3
实现,在 X2Paddle 转换的 tf_mobilenet v1/v2模型性能有5%-10%提升
备注:
MobilenetV1, SSD-MobilenetV3-large, Resnet50 模型在7种不同设备下运行耗时如下,蓝色代表最优竞品,红色代表Paddle-Lite v2.9,灰色代表本版本的Paddle-Lite:
更详细的Paddle-Lite v2.9 与Paddle-Lite v2.9.1的性能对比数据见下图:
重点Feature:
支持FP16
低精度运行
根据模型压缩库
功能: 使用说明
cd Paddle-Lite && ./lite/tools/build_android_by_models.sh /models
模型支持Embedding量化
opt 工具易用性升级
__model__ + var1 + var2 + etc.
model + var1 + var2 + etc.
model.pdmodel + model.pdiparam
model + params
model + weights
opt --optimize_out_type=protobuf
源码编译
其他
shape\precision
信息是否正确sqrt
, square
, rsqrt
, matmul
#5791
layout_cast
对 5 维 tensor 的支持 #5777
Paddle-Lite v2.8 全面支持 Paddle 2.0 模型推理,并对框架进行了内存开销优化和稳定性改进。同时,ARM CPU, OpenCL 性能相对前一版本有较大提升,增加 XPU / NPU 图优化策略,并丰富了算子类型。
重点Feature:增加 “算子版本控制方法“
源码编译
模型转换工具(opt)
初始化过程
其他:优化 Windows x86 计时函数,降低耗时波动
C++ API 接口:新增 set_x86_math_num_threads
,可以设置 x86 上 MKL 底层计算的线程数
Python API 接口: 新增 tensor.numpy
和tensor.from_numpy
tensor.numpy()
: 将Tensor 中的数据转化为 numpy.array
tensor.from_numpy()
:从 numpy.array
数据对象创建 TensorNN硬件相关 API 接口:新增 set_subgraph_model_cache_buffers
接口
对应支持 PaddlePaddle v2.0 ,官方验证了如下模型
reduce_mean
, hard_swish
, prelu
, batch_norm
,clip
,yolo_box
, shape
, slice
transpose
,conv2d
;CL_TUNE_RAPID
、CL_TUNE_NORMAL
,更快调优模型性能;v2.8 版本与 v2.7 版本相比,绝大部分模型都有性能提升
conv2d
的融合,新增多种模式的xpu_conv2d
的融合pool2d
:支持adaptive参数,支持全部类型的 padding
multi_encoder
的融合:支持融合slic
esoftmax
和topk
的融合sequence_conv
、pool2x2
pool1x1
小概率报错问题conv_depthwise、
conv_winograd、
transpose`在模型输入shape变化情况下,小概率报错问题。avg pool2d
、instance_norm
、elementwise_add
计算结果错误的问题compare
OP推理输出shape的错误