Skip to content

Releases: PaddlePaddle/Paddle-Lite

v2.6.2

03 Jul 09:52
85b9dfe
Compare
Choose a tag to compare
v2.6.2 Pre-release
Pre-release

Release Note

  • 新增Paddle-Lite 手机端训练功能(仅用于技术预览)

    • 新增ARM CPU上的反向算子和优化算子若干;
    • 在“波士顿房价预测”任务中,给出了基于安卓的端上训练;
  • 针对2.6.1 中的问题做了修复,丰富了文档

    • 增加了基于安卓的端上训练文档,完善了模型量化压缩文档、benchmark文档;
    • 修复了模型优化工具(opt) 转换模型后,出现模型参数大小膨胀的问题;
    • 修复了sequence_conv算子在batch size>1时计算错误的问题;

v2.6.1

30 May 13:04
e2d3cd9
Compare
Choose a tag to compare

Release Note

本版本主要包括 v2.6.0 版本的一些问题修复和稳定性增强。

  1. 修复opt工具不能转化量化模型问题 #3683
  2. 修复Mac下安装 Paddle-Lite python包后只能转化模型不能预测问题 #3685
  3. 修复Windows下python opt 转化模型为pb格式模型不能加载问题 #3686
  4. 修复Android 静态库不能在Demo中编译问题 #3695

v2.6.0

18 May 14:13
6b8bf87
Compare
Choose a tag to compare

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
  • 框架平台及硬件
    • 新增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

23 Feb 03:35
9359787
Compare
Choose a tag to compare

v2.3.0

基础功能

  • model_optimize_tool 升级为 opt模型转化方法

    • 支持输出模型算子、Lite所有算子、可以判断模型是否支持提示信息(#2624opt统计算子方法);
    • model_optimize_tool 工具更名为 opt#2850opt 取自 llvm/opt ),未来会将更多静态模型的分析、优化功能加入到这个工具中。
  • Paddle-Lite Naive Buffer 模型优化支持输出为单个文件:#2800

  • PaddleLite支持“无校准数据的训练后量化方法”产出的量化模型,模型大小减小2~4倍,详细数据见#2719,使用方法见文档

  • Arm

    1. 新增对multiclass_nms2 op的支持,支持return_index参数#2917
    2. 新增5x5 stride = 2 fp32 depthwise conv的kernel实现 #2770
    3. 新增5x5 stride = 2 int8 depthwise conv的kernel实现 #2813
    4. 重构5x5 stride = 1 fp32 depthwise conv的kernel实现,支持任意padding #2917
    5. fp32 conv支持 relu6, leakey relu 融合 #2797 #2781 #2674
    6. 新增fc + relu 融合 #2765
  • X86新增 leaky_relu kernel。#2819

  • FPGA新增
    onehot、yolobox op, 新增支持yolo、ocr模型支持

  • XPU新增

    1. tanh、stack、gather、lookup_table、slice、layer_norm、gelu、dropout、matmul、cast的bridge。
    2. 新增BERT模型的支持。
    3. 迁移op bridge单测。
      (#2640#2646#2650#2653#2665#2666#2668#2676#2686#2700#2706#2711#2714#2735#2738#2817#2857)
  • NPU新增

    1. dropout、fusion_elementwise_sub_activation、fusion_elementwise_mul_activation、fusion_elementwise_div_activation、matm、unsqueeze、unsqueeze2、instance_norm、layer_norm 的 op bridge。
    2. 新增Cycle-GAN模型的支持(需要华为内部Rom的支持)。
    3. 迁移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,注:模型为内部使用模型)

文档

Demo

  • Cxx Demo新增口罩检测Demo #2682
  • Cxx Demo新增CV预处理库Demo #2691
  • Cxx Demo新增YOLOv3目标检测Demo #2713

bug fix

  1. conv_tranpose支持output_size参数,与paddle fluid对齐。#2749
  2. ch_norm 支持bool格式的参数ist 2846
  3. 修复Mac环境下的cxx_demo不可以编译的问题#2792
  4. 修复部分op set lod_tensor bug #2732 #2750

v2.2.0

02 Jan 03:34
cb246fc
Compare
Choose a tag to compare

v2.2.0

基础功能

  • 新增算子

    • 【ARM CPU】
      • 支持 grid sampler kernel,以支持GAN相关模型,详见链接
      • 支持 instance norm kernel,以支持GAN相关模型,详见链接
      • 支持 split_lod_tensor、merge_lod_tensor、reduce_prod、conditional_block、collect_fpn_proposals、distribute_fpn_proposals,详见链接链接
    • 【FPGA】
      • 新增FPGA kernel: concat、dropout、im2sequence、mul、multiclass_nms、norm、prior_box、reshape、transpose , 详见链接
  • 新增模型

    • 【ARM CPU】
      • 支持Mask RCNN,详见链接
  • 添加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 setDatagetData 接口支持 INT 数据类型,用以支持yolov3
    • model_optimize_tool支持生成NPU模型(仅需要将valid_targets设置为npu,arm),具体实现原理详见PR2576
    • model_optimize_tool支持打印当前Lite OP的信息,转化前检查模型是否支持(模型中的OP&kernel是否都支持),打印help信息

性能

  • 【ARM CPU】提升最近邻差值kenrel性能,相比于原实现有1.5倍左右的性能提升,详见链接
  • 【ARM CPU】提升arm cpu conv3x3多线程性能,添加winograd f(2,3)实现

编译

  • Tiny publish发布包中新增C++静态库
  • CXX Demo中新增图像分类,图像检测Demo

文档

Bug fix

  • 修复ios demo编译失败问题,详见链接
  • 【ARM】修复global pooling kernel选择机制,对于参数匹配到global pooling的case,
    将会选择global pooling,详见链接
  • 消除VLOG对预测性能的影响,提升paddle lite在低端CPU上的性能,详见链接

v2.1.0

01 Dec 10:34
c4f6a1d
Compare
Choose a tag to compare

V2.1.0

重点功能

  • 新增ARM端图像预处理库
    • 支持多种颜色空间转换,如 NV12_To_RGBGRAR_To_RGB
    • 支持多种图像预处理操作,如图像旋转、翻转等
    • 支持图像数据到tensor的转换,如RGB_To_NCHW(Tensor)等
    • 相关功能性能优于 OpenCV 处理速度
  • 增加多个模型裁剪预测库功能。用户给定多个模型,按需裁剪预测库的算子,只保留提供模型线上预测所需要的功能,最大化压缩预测库体积。相关文档可参考裁剪预测库方法
  • 加强报错信息,Android 中支持原生系统报错

基础功能升级

  • 新增op

    • x86 tanh, gelu, pr2265
    • x86 stack, pr2458
  • 新增模型

    • X86增加MobileNet_v1, MobileNet_v2支持,见pr2420
  • op升级,与飞桨核心框架(以下简称Paddle)对齐

    • reshape支持输入ShapeTensor、Tensor,见pr2377
    • slice支持输入StartsTensor、StartsTensorList,见pr2377
    • lookup_table根据 Paddle 升级修改,去除最后一维必须为1的限制,保留原op,新op为lookup_table_v2,见pr2405
    • resize_bilinear和resize_nearest根据 Paddle 升级,增加对list的Tensor输入shape和对Tensor输入scale的支持,见pr2406
  • api对齐

    • python、java、C++三种 api核心接口对齐
      • 其中,python 和 C++ 完整对齐了 MobileConfigCxxConfig 两个模式
      • Java 定位为 Android端使用,只对其了 MobileConfig
  • 升级量化模型支持

    • 支持PaddlePaddle训练后量化方法产出的量化模型,比如mobilenet_v1、 mobilenet_v2、resnet50,见pr2368,使用方法请参考文档
    • 支持PaddlePaddle量化训练方法产出权重量化方式为channel_wise_abs_max的量化模型,见pr2368
  • 预测库整理:重新整理核心库包含的(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

文档

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

07 Nov 01:32
ac0f450
Compare
Choose a tag to compare

Release Note

重点功能

  • 新增 CUDA 预测支持, 详情参考here,兼容模型列表如下:

    • INT8 量化模型
      • yolov3,P4下性能为30ms/image.
    • FP32模型
      • yolov3
      • alexnet
      • unet
  • 支持 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

  • armlinux 环境下增加python api,与c++接口api功能保持一致。#2225 #2252

  • OpenCL支持cl::Image2D格式 #2158 #2170

  • 增加算子版本,与 Paddle 训练版本对应 #2243

    1. 对齐 Lite 与 Paddle 的框架 ProtoBuf 数据结构定义,
    2. 添加设定算子版本的接口,算子版本号与 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_publishfull_publish 两种预测库的编译模式,详情可参考 源码编译指南

    • 需要将mac的cmake版本设置为cmake 3.10
    • 如果出现问题:Too many open files,使用下面命令修改最大可打开文件数ulimit -n 1024
    • 注意:full_publish 编译时,项目不能有中文路径

性能

  • 提升arm depthwise性能#2195
  • 优化conv kernel选择,提升conv性能#2223

文档

  • 增加了支持硬件的列表,参考 here
  • 增加了根据模型裁剪算子的方法,参考here
  • 更新了最新 Benchmark,参考 here

Demo

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

22 Sep 09:54
b76d82e
Compare
Choose a tag to compare

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文档
    • 返回值说明
      • 若编译当前lib的代码有相关tag,则返回tag
      • 若编译当前lib的代码没有相关tag,则返回branch(commitid)

编译

  • 新增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端交叉编译和开发板本地编译,具体参见源码编译指南

文档

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_extrabuild_extra 后缀的表示全量算子(一百多个,体积稍大),否则表示核心库,只包含核心模型所需算子,部署体积更小。

android

ios

model_optimize_tool

FPGA armlinux

v2.0.0-beta1

01 Sep 11:05
Compare
Choose a tag to compare

Release Note

功能

  • 新增以下OP以支持更多X2Paddle 转换的模型:
    • exp
    • elementwise_div
    • assign
    • floor
    • stack
    • reduce_mean
    • matmul
    • expand
    • squeeze

编译

  • 解决 docker 编译 ARM Linux 存在的问题,现支持 armv8 和 armv7 的 gcc 和 clang 编译,并增加相应文档
  • 支持ios编译和发布,并增加相应文档

框架

  • 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");

文档

bugfix

  • 修复 model_optimize_tool 的一系列问题,目前int8量化训练模型可经 model_optimize_tool 进行优化输出naive_buffer格式,且输出模型可使用 MobileConfig 正确运行int8推理过程。

附件

android

IOS

memory optimize tool

v2.0.0-beta1

27 Aug 01:38
ebcefbb
Compare
Choose a tag to compare
v2.0.0-beta1 Pre-release
Pre-release

Release Note

功能

  • MobileConfig 增加 set_power_modeset_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 核心部署库

model_optimize_tool 离线模型转化工具