Releases: PaddlePaddle/Paddle-Lite
v2.6.2
v2.6.1
v2.6.0
v2.6.0
功能升级
- 框架易用性
- Paddle-Lite 编译脚本优化:Android,iOS,ArmLinux 平台各拆分出单独编译脚本,简化单个平台的编译
- Paddle-Lite 支持Python预测库编译于安装:支持在Windows10、x86 Linux、Mac 、Armlinux安装python版本paddle-Lite
- 框架功能
- 增加分割子图功能。对于以子图接入方式lite的模型,通过配置文件手动切分子图,让指定OP跑在host端,以提高性能(在 CUDA
ssd_mobilenet_v1
模型,加速约4.3倍)。 - Paddle-Lite x86 平台优化:降低预测库体积(200M 降低到 16M),预测时支持关闭日志(
--shutdown_log=ON
)、full_api
支持多线程共享模型权重参数、新增x86 cxx_demo
- 增加分割子图功能。对于以子图接入方式lite的模型,通过配置文件手动切分子图,让指定OP跑在host端,以提高性能(在 CUDA
- 框架平台及硬件
-
新增RK 1808 NPU,支持全量化MobileNetV1模型,已提供文档和demo
-
新增MTK MT8175 APU,支持全量化MobileNetV1模型,已提供文档和demo
-
新增XPU Kernel接入方式,支持ERNIE、ResNet-50和BERT模型
-
新增寒武纪MLU270,支持一下模型:Resnet50(int8)、Senet101(int8)
-
新增比特大陆BM1682,支持以下模型: Mobilenet、Yolov3、Mobilenet-ssd、Inceptionv4、Vgg16、DarkNet-YOLOv3、PyramidBox。
-
移动端GPU(opencl):支持模型mobilenetv1/v2、GAN相关、mnasnet、sqeueezenet、shufflenet、resnet、unet、vgg16
-
NVidia GPU: 增加exec多流支持,对于存在并行性的模型结构,相对单流预计有5-15%的性能提升,对于常见视觉模型,一般不具有并行性结构,开启多流无收益。cuda平台下打开多流功能
config.set_multi_stream(true)
-
华为NPU:
- benchmark模型(mobilenet_v1,mobilenet_v2,squeezenet_v1.1,mnasnet,shufflenet_v2),提速5-10倍
- 支持缓存不同尺寸的NPU模型,提升可变输入尺寸模型的性能 -
支持Python安装:可以在PC Linux/Windows/Mac 上安装Paddle-Lite Python 库;Python 可以调用Lite opt 优化模型
-
支持windows 编译: 可以在windows环境编译Paddle-Lite ,当前windows环境只支持x86 编译
-
优化支持无校准训练后量化方法产出的量化模型,常见分类模型量化到8bit,精度损失从2%减小到0.1%。
-
- Demo
性能优化
- Paddle-Lite 框架 InferShape部分耗时降低: Predictor 连续运行时,InferShape 总耗时降低(特定模型,0.25ms 降低到 0.08ms)
- OpenCL 部分kernel支持动态 shape并将部分计算移到ReinitWhenNeeded。fc_buffer、elementwise_add、scale、activation、grid_sampler
- 优化sgemm在低端机上的性能表现
- 优化Precision Profiler功能。排版优化,新增支持标准差属性、增长率属性(在均值和标准差一样时,可以比较顺序),支持对OpenCL的Image/Buffer的每层output的精度打印,支持将每层的精度结果(最终的precision summary)写入手机设备上,便于APP调试,将精度打印与原有统计耗时的profiler的依赖分开
Bug fix
- 修复conv op的激活act_type未初始化导致的不同Predictor结果随机的问题
- 修复opencl kernel。bilinear kernel在mali gpu上兼容性问题、instance norm计算结果不对的问题、reshape的kernel注册错误导致模型转换失败问题、exp和tanh找不到kernel的导致注册kernel名写错绑定模型op失败问题
- 修复opencl在mali gpu的执行计算结束卡主的问题
- 修复opencl的资源相关问题。隔离每个Predictor中每个cl::kernel/cl::program等资源
v2.3.0
v2.3.0
基础功能
-
model_optimize_tool
升级为opt
:模型转化方法 -
Paddle-Lite Naive Buffer 模型优化支持输出为单个文件:#2800
- 为了简化移动端模型部署,将原有 Naive Buffer 格式需要的两个文件合并为一个文件;
- 原有的两个文件的模型格式依旧支持,但会在未来 v3.0 废弃;
- 修改
model_optimize_tool
(现opt
) 转化出的模型格式为单个文件(由_model
变为单个文件modelname.nb
); - 对应 Naive Buffer 合并后的模型格式,新增加载新格式模型的接口
- C++接口:
- Python接口:
- Java接口:
- 原有加载接口依旧支持,但会在未来 v3.0 废弃
-
PaddleLite支持“无校准数据的训练后量化方法”产出的量化模型,模型大小减小2~4倍,详细数据见#2719,使用方法见文档。
-
Arm
-
X86新增 leaky_relu kernel。#2819
-
FPGA新增
onehot、yolobox op, 新增支持yolo、ocr模型支持 -
XPU新增
-
NPU新增
- dropout、fusion_elementwise_sub_activation、fusion_elementwise_mul_activation、fusion_elementwise_div_activation、matm、unsqueeze、unsqueeze2、instance_norm、layer_norm 的 op bridge。
- 新增Cycle-GAN模型的支持(需要华为内部Rom的支持)。
- 迁移op bridge单测。
(#2745、#2747、#2753、#276、#2764、#2767、#2773、#2784、#2790、#2798、#2847、#2849、#2857、#29)
-
新增OpenCL Image2D Kernel,包含30个Image2D Kernel,涵盖14个OP。
包括不限于 nearset_interp、reshape2、concat、sigmoid/relu6/relu、elementwise_add/mul、conv2d/depthwise_conv2d、pool2d。
(#2837、#2806、#2771、#2788、#2815、#2802、#2853、#2861、#2844、#2838、#2837、#2818) -
ArmLinux编译新增对飞腾CPU的支持 (FT2000PLUS测试通过) #2571
性能
-
提高Naive模型加载速度: 减少内存拷贝过程,提高模型加载速度 #2726,#2736
性能数据: 模型加载过程耗时缩短为v2.2.0
的1/4 。(transformer模型单次加载时间从1.2s降低为0.3s) -
提升由tensorflow模型转为paddle模型在arm cpu上的性能表现
-
提升含conv + relu6或conv + leakey relu op的模型在arm cpu上的性能表现
-
提升含5x5 stride = 2 depthwise conv op的量化模型在arm cpu上的性能表现
(rk3288上模型耗时由143ms->68ms,注:模型为内部使用模型)
文档
- 发布全新的文档官网 https://paddle-lite.readthedocs.io/zh/release-v2.3/。
- 迁移文档到新的官网 。(#2820、#2840、#2923 、#2932、#2934、#2936 )
- 新增“有校准数据的训练后量化方法”和“无校准数据的训练后量化方法”使用文档。#2960
Demo
bug fix
v2.2.0
v2.2.0
基础功能
-
新增算子
- 【ARM CPU】
- 【FPGA】
- 新增FPGA kernel: concat、dropout、im2sequence、mul、multiclass_nms、norm、prior_box、reshape、transpose , 详见链接
-
新增模型
- 【ARM CPU】
- 支持Mask RCNN,详见链接
- 【ARM CPU】
-
添加Demo
- mobile_classify 分类C++ API demo,支持图片输入, 见PR2657
- mobile_detection 检查C++ API demo,支持图片输入, 见PR2541
- Paddle-Lite-Demo 采用编译时在线下载Paddle Lite库和模型的方式,将repo压缩到4MB,解决因github访问过慢而无法下载的问题。
- Paddle-Lite-Demo 增加Face Detection Demo for Android、Human Segmentation Demo for Android。
-
x86基于CxxConfig新增API,详见PR2592
set_cpu_math_library_num_threads(int threads)
用于设置x86 Math库线程数,x86核心数支持情况下可加速预测。默认为1,并且仅在x86下有效。cpu_math_library_num_threads()
返回x86 Math库线程数,x86核心数支持情况下可加速预测。仅在x86下有效。
-
其他特性:
- 增加【ARM CPU】端
elmentwise_mul_constant_eliminate
、 deconv+relu、 deconv+batchnorm 算子融合,见PR2604 - Java API
setData
或getData
接口支持 INT 数据类型,用以支持yolov3 - model_optimize_tool支持生成NPU模型(仅需要将valid_targets设置为npu,arm),具体实现原理详见PR2576
- model_optimize_tool支持打印当前Lite OP的信息,转化前检查模型是否支持(模型中的OP&kernel是否都支持),打印help信息
- 增加【ARM CPU】端
性能
- 【ARM CPU】提升最近邻差值kenrel性能,相比于原实现有1.5倍左右的性能提升,详见链接
- 【ARM CPU】提升arm cpu conv3x3多线程性能,添加winograd f(2,3)实现
编译
- Tiny publish发布包中新增C++静态库
- CXX Demo中新增图像分类,图像检测Demo
文档
- 补齐CXX Demo文档
- 补充basic基础预测库说明文档,说明基础预测库支持的模型,build_extra=ON&OFF的意义
- 更新模型量化文档,明确激活不应该采用abs_max量化方式
- 更新使用华为NPU,增加
full_publish
和tiny_publish
编译命令,补充已支持机型、已支持模型和已支持Paddle算子
Bug fix
v2.1.0
V2.1.0
重点功能
- 新增ARM端图像预处理库
- 支持多种颜色空间转换,如
NV12_To_RGB
、GRAR_To_RGB
等 - 支持多种图像预处理操作,如图像旋转、翻转等
- 支持图像数据到tensor的转换,如RGB_To_NCHW(Tensor)等
- 相关功能性能优于 OpenCV 处理速度
- 支持多种颜色空间转换,如
- 增加多个模型裁剪预测库功能。用户给定多个模型,按需裁剪预测库的算子,只保留提供模型线上预测所需要的功能,最大化压缩预测库体积。相关文档可参考裁剪预测库方法。
- 加强报错信息,Android 中支持原生系统报错
基础功能升级
-
新增op
-
新增模型
- X86增加MobileNet_v1, MobileNet_v2支持,见pr2420
-
op升级,与飞桨核心框架(以下简称Paddle)对齐
-
api对齐
- python、java、C++三种 api核心接口对齐
- 其中,python 和 C++ 完整对齐了
MobileConfig
和CxxConfig
两个模式 - Java 定位为 Android端使用,只对其了
MobileConfig
- 其中,python 和 C++ 完整对齐了
- python、java、C++三种 api核心接口对齐
-
升级量化模型支持
-
预测库整理:重新整理核心库包含的(basic) OP&Kernel,使基础预测库(
build_extra=OFF
)完整支持CV相关9个核心模型(包括Paddle原生模型和对应的 X2Paddle第三方转化模型)和三个量化模型。且tiny_publish
下预测动态库体积不变。支持模型如下:-
9个基础模型及其 Paddle 转化模型:mobileNetV1、mobileNetV2、mnasnet、resnet50、yolov3、ssd_mobilenetv1、 unet、squeezenet_v11、shufflenet_v2
-
三个int8量化模型:mobilenet_v1、mobilenet_v2、resnet50
-
性能
- ARM CPU Conv3x3 性能提升。 改进ARM CPU Conv3x3实现方式,在Resnet、Squeezenet等模型上提升性能。
编译
- X86与 CUDA 编译时第三方库下载加速 (X86编译相关的第三方库
eigen、mklml、xxhash
改为从百度云地址下载,加速编译过程) - NPU的编译支持华为官方最新版HiAI DDK 310
文档
- 新增Pass介绍与注册方法文档
- 补齐了 Cxx API文档
- 新增CV图像预处理库API接口介绍文档
- 新增部署训练后量化模型的使用示例文档
Bug 修复
- 修复 jit::matmul 特定尺寸下计算错误的bug:输入x, shape(m, k) weight, shape(k, n),当k < 512,m==1, 且n是16的倍数时,jit分组group计算错误,详情见pr 2392
- 修复yolo_box cuda kernel多次运行结果出错的bug:多次运行时没有将上一次的结果清零,会保留之前计算的结果,详情见pr2245
- 修复fill_constant kernel的bug:没有用到dtype属性,默认输出float tensor,修复后根据dtype属性判断输出类型,详情见pr2376
- 修复convolution X86 kernel由于share_data_with导致的运行多次以后输出结果不正确的bug,详情见pr2420
- 修复多线程跑模型会随机crash的问题
v2.0.0
Release Note
重点功能
-
新增 CUDA 预测支持, 详情参考here,兼容模型列表如下:
- INT8 量化模型
- yolov3,P4下性能为30ms/image.
- FP32模型
- yolov3
- alexnet
- unet
- INT8 量化模型
-
支持 Nvidia Jetson TX2 的CUDA 编译和部署,支持的模型如下:
- yolov3 fp32
- alexnet fp32
- unet fp32
-
初步支持 X86 CPU 预测部署,支持 inception v4, googlenet, resnet50 等3个模型,详情参考 here
-
增加 Python API 支持,已经在 ARM Linux 和 CUDA 上验证,详细参考 here
-
支持根据模型极致裁剪动态库,可以极大压缩单个模型的手机端ARM CPU预测库,详情参考 here.
-
ARM CPU INT8 量化模型预测支持加强,增加以下模型支持
- shufflenetv2
- mobilenet-ssd
- vgg16
- googlenet
-
ARM CPU FP32 新增如下模型支持
- transformer
- facebox
- blazeface
transformer 开源模型待发布;facebox和blazeface的模型可从Paddle/Models仓库下获取,得到的训练格式的模型,还需转换成inference格式。以 blazeface_original
为例,转换过程如下
git clone https://github.com/PaddlePaddle/models.git
cd mode/PaddleCV/PaddleDetection
pip install -r requirements.txt
# 将下载的模型放到yml指定目录
mkdir -p output/blazeface/ && cd output/blazeface/
wget https://paddlemodels.bj.bcebos.com/object_detection/blazeface_original.tar
tar -xvf blazeface_original.tar && mv blazeface_original model_final && cd ../../
# 模型格式转换
export PYTHONPATH=`pwd`:$PYTHONPATH
python tools/export_model.py \
--output_dir=_inference_model_dir> --config=configs/face_detection/blazeface.yml
基础功能
-
接口去除 prefered place。框架中移除prefered place 概念及相应接口,改为使用 place 在valid place列表中的排序来标识用户对执行place偏好,在valid place列表中排序越靠前代表对此place的偏好越强。#2192
-
增加算子版本,与 Paddle 训练版本对应 #2243
- 对齐 Lite 与 Paddle 的框架 ProtoBuf 数据结构定义,
- 添加设定算子版本的接口,算子版本号与 Paddle 框架版本号格式一致(三位小数组成的字符串,如 "1.5.0"),在注册时进行设定。
示例:
REGISTER_LITE_KERNEL(leaky_relu, kCUDA, kFloat, kNCHW,
paddle::lite::kernels::cuda::LeakyReluCompute,
def)
.BindInput("X", {LiteType::GetTensorTy(TARGET(kCUDA))})
.BindOutput("Out", {LiteType::GetTensorTy(TARGET(kCUDA))})
.SetVersion("1.5.0")
.Finalize();
- 运行期间跳过feed fetch op,减少硬件之间的数据拷贝
- 新增包括
GetInputNames
等4个API接口,详细可以参考 C++ API List - 新增CUDA GPU op
- yolobox
- transpose
- concat
- nearest_interp
- elementwise_add
- scale
- dropout
- softmax
- pool2d
- bilinear_interp
- mul
- conv2d
编译
-
ARM Linux在full publish模式下增加生成动态链接库,tiny publish模式下不再生成静态库,而改为生成动态链接库。
-
Mac环境下支持
full_publish
编译(Android),目前 Mac下可以完整支持tiny_publish
和full_publish
两种预测库的编译模式,详情可参考 源码编译指南- 需要将mac的cmake版本设置为cmake 3.10
- 如果出现问题:
Too many open files
,使用下面命令修改最大可打开文件数ulimit -n 1024
- 注意:
full_publish
编译时,项目不能有中文路径
性能
文档
Demo
- 增加树莓派案例:ARM Linux 图像识别和目标检测DEMO,支持摄像头采集图像,并提供armv7hf&armv8预编译的动态链接库。
Bug修复
- 修复加载 naive buffer 模型内存占用过大问题
- naive buffer 格式的vgg16、inceptionv4、yolov3 模型均验证通过
- 修复
model_optimize_tool
优化后模型变大问题 - 修复
static_pick_kernel_pass
中,没有初始化kernel_pick_factors_
#2158 - 修复
type_layout_cast_pass
中,选中 kernel 的变量名写错 #2158 - 修复
op_registry
中注册 kernel 时,没有考虑 layout #2158 - 修复conv transpose bug #2165
- 修复arm fc多batch计算错误#2244
- 修复arm int8 gemv bug #2249
附件说明
附件中包含了编译好的预测库,不同选项组合采用后缀字段表示,重要字段如下:
- android/ios: 平台
- armv7/armv8: ARM 指令集版本
- c++_shared/c++_static: C++ STL 采用动态链接还是静态链接,前者自身小但需额外拷贝 STL 的动态库
- tiny_publish/full_publish: 是否采用轻量化部署,前者部署体积很小,但需要配合
model_optimize_tool
; 后者可以直接用于 原始 Paddle 模型; 两者性能一致 - with_extra: 除了基础算子,额外编译NLP、控制流及其他所有算子
v2.0.0-rc
Release Note
模型、算子及多硬件、多框架支持
- 加强多框架支持(通过 X2Paddle)
- 新增onnx 模型支持
- 扩展tensorlfow模型支持
- 扩展caffe模型支持
- 官方测试过的模型及框架支持如下
模型 | paddle fluid | caffe | tensorflow | onnx |
---|---|---|---|---|
mobilenetv1 | Y | Y | Y | |
mobilenetv2 | Y | Y | Y | Y |
resnet18 | Y | Y | Y | |
resnet50 | Y | Y | Y | Y |
mnasnet | Y | Y | Y | |
efficientnet | Y | Y | Y | Y |
squeezenetv1.1 | Y | Y | Y | |
shufflenet | Y | Y | Y | |
mobilenet_ssd | Y | Y | Y | |
mobilenet_yolov3 | Y | Y | ||
inceptionv4 | Y | |||
mtcnn | Y | Y | Y | |
facedetection | Y | Y | ||
unet | Y | Y | Y | |
ocr_attention | Y | |||
vgg16 | Y |
-
IN8模型,增加支持Resnet50-INT8
-
ARM CPU 新增验证模型 5 个
- 新增支持 Faster RCNN 模型
- 新增支持 FaceDetection 模型
- 新增支持 SSD_ShufflenetV2_FPN 模型
- 新增支持 SSD_MobilenetV3_FPN 模型
- 新增支持Yolov3_Int8模型
-
华为NPU新增验证模型3个
- 新增MobileNet V2, ShuffleNet V2和Unet模型的支持
- 新增pad2d Op支持
-
验证支持 树莓派 3B和RK3399开发板
-
新增算子 36 个,以更好地支持更广模型及多种框架
- affine_channel
- anchor_generator
- assign
- assign_value
- box_clip
- elementwise_div
- equal
- expand
- fake_quantize_range_abs_max
- fill_constant_batch_size_like
- flatten
- flatten2
- floor
- fusion_elementwise_div_activation
- generate_proposals
- greater_equal
- greater_than
- hard_sigmoid
- less_equal
- logical_not
- logical_or
- matmul
- mean
- notequal
- range
- reduce_mean
- relu6
- roi_align
- sequence_expand_as
- squeeze
- squeeze2
- stack
- uniform_random
- unsqueeze
- unsqueeze2
基础功能
-
model_optimize_tool
改成在 host 上执行——现在无需在 ARM (手机)上执行,直接在编译机上执行便可;功能和命令行参数不变 -
新增支持 INT8 模型以 INT8 格式存储和载入,显著降低 APP 中模型体积
优化前 optimize tool保存为INT8 格式后 MobileNetV1_quant 17M 5.3M MobileNetV2_quant 15M 5.1M ResNet50_quant 100M 27M -
新增内存优化能力
- 原理:在模型预测期间,Op的输出Tenso若在生存期上没有重叠,可复用一块内存,从而可以降低模型预测期间的整体内存占用。
- 效果:batch 为1 的情况下对模型的的内存占用测试如下
模型 内存复用效果(memory/original) Mobilentev1 78% Mobilenetv2 67% Resnet50 82% Mobilenetv1_int8 82% Mobillenet_SSD 71% -
新增版本信息输出功能
- 增加接口
- C++ API在PaddlePredictor中增加
std::string GetVersion()
接口用于返回当前lib使用的代码版本。 - Java API在PaddlePredictor中增加
public String getVersion()
接口用于返回当前lib使用的代码版本。 - 详细信息可以参考 C++ API 文档 和 Java API文档
- C++ API在PaddlePredictor中增加
- 返回值说明
- 若编译当前lib的代码有相关tag,则返回
tag
- 若编译当前lib的代码没有相关tag,则返回
branch(commitid)
- 若编译当前lib的代码有相关tag,则返回
- 增加接口
编译
- 新增
tiny_publish
编译模式下输出 Android C++ 动态链接库- 编译时选择
--arm_os=android
可编译出Android C++动态链接库文件 - 动态链接库位置(以armv8为例):
Paddle-Lit/build.lite.android.armv8.gcc/inference_lite_lib.android.armv8/cxx/lib
- 动态链接库文件:
- libpaddle_light_api_shared.so : 只包含包含light_api接口
- libpaddle_full_api_shared.so : 包含所有功能, light_api接口和full_api接口
- 编译说明:
- tiny_publish只编译出 libpaddle_light_api_shared.so 文件
- full_publish编译出 libpaddle_light_api_shared.so和libpaddle_full_api_shared.so
- 编译时选择
- 支持编译发布 FPGA 预测包
- 修复ARM Linux编译问题,新增Ubuntu Host端交叉编译和开发板本地编译,具体参见源码编译指南
文档
- 文档改为使用 github pages,新文档地址 https://paddlepaddle.github.io/Paddle-Lite/
- 完善了 源码编译指南,增加ARM Linux设备端本地编译;
- 增加了C++ API文档 和 Java API文档 ,详细列举了所有用户API 及描述
DEMO
- Paddle-Lite-Demo仓库: https://github.com/PaddlePaddle/Paddle-Lite-Demo
- 新增ios/Android mobilenetv1-ssd 检测demo
- Android新增支持NPU的、基于Light API的图像分类demo,并提供预编译的、支持NPU和CPU的Light API jni库
Bugfix
- 修复
model_optimize_tool
优化 attention 模型出错及优化后不能运行的问题 - 修复 clang编译bug
- 修复PriorBox op中存在的bug
- 修复编译脚本,取消默认编译单测
- 修改kernel的相关冗余代码及计算bug
附件
有 with_extra
和 build_extra
后缀的表示全量算子(一百多个,体积稍大),否则表示核心库,只包含核心模型所需算子,部署体积更小。
android
- inference_lite_lib.android.armv7.tar.gz
- inference_lite_lib.android.armv7.with_extra.tar.gz
- inference_lite_lib.android.armv8.tar.gz
- inference_lite_lib.android.armv8.with_extra.tar.gz
ios
- inference_lite_lib.ios.armv7.tar.gz
- inference_lite_lib.ios.armv8.build_extra.tar.gz
- inference_lite_lib.ios.armv8.tar.gz
- inference_lite_lib.ios.armv8.build_extra.tar.gz
- inference_lite_lib.ios64.armv8.tar.gz
- inference_lite_lib.ios64.armv8.build_extra.tar.gz
model_optimize_tool
FPGA armlinux
v2.0.0-beta1
Release Note
功能
- 新增以下OP以支持更多X2Paddle 转换的模型:
- exp
- elementwise_div
- assign
- floor
- stack
- reduce_mean
- matmul
- expand
- squeeze
编译
框架
MobileConfig
新增接口支持从内存中加载模型
void set_model_buffer(const char* model_buffer,
size_t model_buffer_size,
const char* param_buffer,
size_t param_buffer_size)
示例:
lite_api::MobileConfig config;
config.set_model_buffer(
model_buffer.c_str(), size_model, params_buffer.c_str(), size_params);
auto predictor = lite_api::CreatePaddlePredictor(config);
Pass
算子设备类型绑定。在绑定的设备或算子类型未注册时,相应 Pass 不再命中执行。以避免找不到指定设备或算子导致的程序退出。
示例:
REGISTER_MIR_PASS(io_copy_kernel_pick_pass,
paddle::lite::mir::IoCopyKernelPickPass)
.BindTargets({TARGET(kAny)})
.BindKernel("io_copy");
文档
- 完善了 源码编译指南,增加了 Docker环境编译ARM Linux的说明;添加ios编译说明文档
- 完善Paddle-Lite-Demo文档,添加更新库说明
- 编写Lite int8用户使用案例——基于PaddleSlim和Paddle-Lite对模型进行端到端的量化训练和推理执行
- 增加了 架构详解 等开发者文档
bugfix
- 修复
model_optimize_tool
的一系列问题,目前int8量化训练模型可经model_optimize_tool
进行优化输出naive_buffer格式,且输出模型可使用MobileConfig
正确运行int8推理过程。
附件
android
- inference_lite_lib.android.armv7.shared.tar.gz
- inference_lite_lib.android.armv7.tar.gz
- inference_lite_lib.android.armv8.shared.tar.gz
- inference_lite_lib.android.armv8.tar.gz
IOS
memory optimize tool
v2.0.0-beta1
Release Note
功能
-
MobileConfig
增加set_power_mode
和set_threads
两个设置方法,简化相关设置;详情参考 C++ demo -
memory_optimize_tool
中的int8_mode
flag 更名为prefer_int8_kernel
,以避免与量化工具的功能混淆;Paddle-Lite 目前的 ARM CPU INT8 量化基于 PaddleSlim 工具,本身并不具备也没有计划增加量化模型转换的能力 -
ARM CPU 新增以下Op支持,支持更多相关模型:
- flatten
- flatten2
- assign
- fake_quantize_range_abs_max
- fusion_eltwise_activate_dropout
- fill_constant_batch_size_like
编译
- 改善第三方依赖代码下载方式,以加速编译过程
- 在编译
memory_optimize_tool
类似的离线工具时,需要依赖protobuf
相关第三方代码库 - 移动端特定第三方依赖代码从之前的 cmake ExternalProject_Add 编译时下载改为
git submodule
方式,让下载过程更直观 - 对于国内网络下载
protobuf
等大尺寸repo,增加离线压缩包,可以自动下载解压,极大地加速编译下载过程
- 在编译
- 清除
tiny_publish
模式下无关的第三方代码下载,编译移动端部署库时可以不依赖任何第三方进行编译 - 增加分层编译的能力,以压缩核心库的大小;目前会将常规的Op和Kernel划分为 basic mode,编译核心部署库以驱动绝大多数 CV 和 DNN 模型;将控制流相关的细碎Op和Kernel单独拆成 extra mode,以按需驱动 OCR 及未来的 NLP 模型;以及未来在增加更多Op的情况下控制核心库尺寸;使用方法参考 编译开关
文档
- 完善了 源码编译指南,增加了 Linux 环境裸机编译的内容;增加了 Mac 编译
tiny_publish
的说明;增加了加速第三方库下载的内容 - 完善 benchmark测试方法 的文档,上传了所有相关模型及转化工具,以降低复现门槛
- 增加了 Roadmap 文档 ,以同步最近的开源版本发布计划
bugfix
- NaiveBuffer:解决
memory_optimize_tool
在 32/64 位系统模型 save/load 不兼容的问题
Assets 附件说明
Android ARM CPU 核心部署库
- inference_lite_lib.android.armv7.shared.tar.gz
- inference_lite_lib.android.armv7.static.tar.gz
- inference_lite_lib.android.armv8.shared.tar.gz
- inference_lite_lib.android.armv8.static.tar.gz