Created by: DannyIsFunny
本PR目的:修改Paddle-Lite的模型格式,新的模型格式要求请参考:[设计说明]() 【本PR的修改】:
【1】修改Lite的version,当前代码最后一个commit 不是git log时,将最后一个short commit id作为version : lite/api/version.h.in
【2】修改model_parser.cc
模型保存与加载方法:
模型存储: SaveModelNaive
方法,修改为保存为单个文件
模型加载: 原来加载方法保存LoadModelNaive
、LoadModelNaiveFromMemory(...)
添加新模型的加载方法: LoadModelNaiveFromFile
、LoadModelNaiveFromMemory(...)
【3】API接口:
paddle_api.cc
: MobileConfig添加新接口set_model_from_file
、set_model_from_buffer
,添加变 lite_model_file
和返回值函数lite_model_file()
light_api.cc
: 重载新的Build函数、和predictor的构造函数(老方法保存)。用于light_api加载新格式的模型
light_api_impl.cc
: 修改CreatePredictor(MobileConfig)方法,实现根据MobileConfig的值选择调用老接口、还是新接口。 (当set_model_dir
或set_model_buffer
后会使用老方法;set_model_from_file
、set_model_from_buffer
后会使用新方法)
注意:因为发现light_api实际没有加载pb格式模型的接口,本PR在新的light_predictor::build()函数中去除了model_type接口,只加载naive_buffer格式模型。
【4】相关单测修改:
model_parser_test.cc
light_api_test.cc
, cxx_api_test.cc
, paddle_api_test.cc
, apis_test.cc
其他:subgraph_pass_test.cc
(因为调用了SaveOptimizedModel + LoadNaiveModel 过程)
【5】关联模块修改 (因为下面两者都调用了SaveOptimizedModel + LoadNaiveModel过程)
benchmark: benchmark.cc
model_test: model_test.cc
【6】添加Python
接口: pybind.cc
中mobileconfig添加接口: set_model_from_buffer
和set_model_from_file
【7】添加Java
接口: 在MobileConfig.java
和convert_util_jni.h
中为JavaAPI添加MobileConfig接口: setModelFromFile
和setModelFromBuffer
编译时默认不编译Java API,只有当build_java=ON时才编译java预测库。
【8】本PR将模型转化工具名称修改为opt 编译出的二进制文件名为 opt 流程:输入命令: ./lite/tool/build.sh build_optimize_tool 编译结果:build.opt/lite/api/opt 工具使用方法 : ./opt --model_dir= ...
【9】本次修改对预测库体积大小的影响: 经测试:本PR加入前armv8、GCC Android动态库大小:1653528字节,本PR加入后动态库大小1653528字节,对动态库大小没有影响