Skip to content

v2.0.0

Compare
Choose a tag to compare
@Superjomn Superjomn released this 07 Nov 01:32
ac0f450

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、控制流及其他所有算子