PaddlePaddle High Performance Deep Learning Inference Engine for Mobile and Edge (飞桨高性能深度学习端侧推理引擎)
Paddle-Lite v2.8 全面支持 Paddle 2.0 模型推理,并对框架进行了内存开销优化和稳定性改进。同时,ARM CPU, OpenCL 性能相对前一版本有较大提升,增加 XPU / NPU 图优化策略,并丰富了算子类型。
CxxConfig
和 MobileConfig
新增 set_x86_math_num_threads
接口来设置 X86 上 MKL 底层计算的线程数set_subgraph_model_cache_buffers
接口支持从内存设置子图缓存产物,使用方法可参考Rockchip NPU Demo
tensor.numpy()
: 将Tensor 中的数据转化为 numpy.array
tensor.from_numpy()
:从 numpy.array
数据对象创建 Tensor对应支持 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的错误此版本主要为各类增强和问题修复
本版本主要面向 PaddlePaddle 1.8x 及以前的推理模型
注意, MobileConfig 对应的模型格式有变化,必须使用对应版本的 opt 重新转化模型
升级执行期模型数据结构,显著提升移动端预测初始化速度,同时也降低了模型存储体积
移动端模型存储格式从自建格式 NaiveBuffer
修改为 flatbuffers
执行期内存消耗最高降低60%
移动端模型体积裁剪
增强精度 profile 工具,可以通过环境变量控制是否将每层 op 的 output tensor 结果写入到手机目录文件中,方便精度调试 PR4255
MobileConfig::SetArmL3CacheSize
:补充四种设置ARM CPU 下 L3 Cache 初始内存大小的方法 (#4402)
enum class L3CacheSetMethod {
kDeviceL3Cache = 0, // Use the system L3 Cache size, best performance.
kDeviceL2Cache = 1, // Use the system L2 Cache size, trade off performance
// with less memory consumption.
kAbsolute = 2, // Use the external setting.
};
struct MobileConfig {
// ...
// danger area
void
SetArmL3CacheSize(L3CacheSetMethod method = L3CacheSetMethod::kDeviceL3Cache,
int absolute_val) {}
// ...
};
reduce_mean
, sequence_expand_as
算子 PR4492
v2.7-beta1
在特定使用场景下内存释放不彻底问题
Some bugfix to v2.7-beta
version.
支持subblock的图优化,即pass支持对 while/conditional_block 等 Op 的 subblock的优化,例如对subblock的Op Fuse、Kernel选择等,目前已在ARM和华为NPU上支持transformer模型 PR3947
支持内部处理错误时向应用层抛出异常,防止程序出现 abort (暂时不支持android+armv7+gcc 脚本开关编译选项) PR3947
新增 Op,支持RetinaNet模型 PR4157
新增Paddle-Lite 手机端训练功能(仅用于技术预览)
ARM CPU
conv_winograd int8
实现,PR3767;NPU
OpenCL
IsOpenclBackendValid
,对于优先选择执行GPU的用户,可基于该API预判手机是否支持OPENCL,否则加载CPU模型,PR3951 PR4003
2x2s1p1_pooling
实现及修复3x3s2p0 pooling
随机crash问题,PR3705;softmax
随机crash及计算错误问题,PR3834;gemm_prepack_oth_int8
函数随机crash问题,PR3906;opencl
加载int16模型的fc权重异常问题,PR3900;注意, MobileConfig 对应的模型格式有变化,必须使用对应版本的 opt 重新转化模型
升级执行期模型数据结构,显著提升移动端预测初始化速度,同时也降低了模型存储体积
移动端模型存储格式从自建格式 NaiveBuffer
修改为 flatbuffers
执行期内存消耗最高降低60%
移动端模型体积裁剪
增强精度 profile 工具,可以通过环境变量控制是否将每层 op 的 output tensor 结果写入到手机目录文件中,方便精度调试 PR4255
MobileConfig::SetArmL3CacheSize
:补充四种设置ARM CPU 下 L3 Cache 初始内存大小的方法 (#4402)
enum class L3CacheSetMethod {
kDeviceL3Cache = 0, // Use the system L3 Cache size, best performance.
kDeviceL2Cache = 1, // Use the system L2 Cache size, trade off performance
// with less memory consumption.
kAbsolute = 2, // Use the external setting.
};
struct MobileConfig {
// ...
// danger area
void
SetArmL3CacheSize(L3CacheSetMethod method = L3CacheSetMethod::kDeviceL3Cache,
int absolute_val) {}
// ...
};
retinanet_detection_output
Op,支持RetinaNet模型 PR4157
IsOpenclBackendValid
,对于优先选择执行GPU的用户,可基于该API预判手机是否支持OPENCL,否则加载CPU模型,PR3951 PR4003