Created by: DannyIsFunny
(1)使cxx_predictor->clone()得到的Predictor共享权重参数 https://github.com/PaddlePaddle/Paddle-Lite/pull/3244 【问题描述】:使cxx_predictor->clone()得到的Predictor共享权重参数 【修改】: 1、Clone得到Predictor共享 ProgramDesc和部分block_desc(模型的权重参数) 2、cxx_api.h: 将Predictor->programdesc修改为share_ptr格式,需要共享,较多关联函数需要修改 3、lite/core/scope.cc中添加读取线程锁。(当前加入了写入线程锁)
(2) 添加接口GetMutableTensor(name)
https://github.com/PaddlePaddle/Paddle-Lite/pull/3099
【问题描述】NLP业务需要在加载模型后修改模型终端权重参数,之后再运行。需要接口: GetMutableTensor(name)返回一个可修改的张量
【方案设计】在模型加载后修改权重在多线程下有风险,可能导致不确定输出;且当前只有x86 平台下提出该需求,不推荐一般用户使用
【本PR工作】设计一个内部develop接口,Cxx_predictor->GetMutableTensor(std::string “varname”)。该接口只有cxx_predictor可以调用,而且不对外开放使用文档。为内部调试接口。
(3) 添加接口 const std::vector<std::string> Predictor::GetParamNames()
https://github.com/PaddlePaddle/Paddle-Lite/pull/3099
【方案设计】接口只输出模型的权重参数的名称,不输出输入变量
、输出变量
、中间变量
和feed/fetch
名称
【本PR工作】设计一个内部develop接口,const std::vector<std::string> Cxx_predictor->GetParamNames()
。
该接口只有cxx_predictor可以调用,而且不对外开放使用文档。为内部调试接口。
(4)修复 infer_init 模型变化sequence_size 下出core错误问题
【问题定位】:gru算子中的batch_gate
参数,在执行mutable_data参数后,如果dims->production 过大,op->run 后会提前释放内存。导致下次mutable_data 或程序析构时出现重复释放同一块内存问题。
【修复方法】:算子修复
注 : 为什么本PR当前不能通过一些单测? 响应开发需求将protobuf版本修改为v3.2.0,在x86环境编译正常没有问题,可以通过server端单测;Lite arm端不允许修改protobuf版本,本PR修改protobuf版本不能通过 arm端单测检查(还原third_party/protobuf版本后本PR可以正常通过单测)
(5)修复 运行infer_init 模型是CPU占用率过高问题 1、 infer_init 运行时CPU占用率,100% 。 定位问题 x86_fc_kernel实现问题,已修复 2、修复后CPU占用率50% ,优化sequence_reshape、compute 算子,降低到8% 3、 运行时线程不能控制