提交 696949e6 编写于 作者: L Luo Tao

Merge branch 'develop' into inference_lib_dist

...@@ -67,26 +67,26 @@ ProgramDesc::ProgramDesc(const std::string &binary_str) { ...@@ -67,26 +67,26 @@ ProgramDesc::ProgramDesc(const std::string &binary_str) {
} }
} }
const std::vector<std::string> ProgramDesc::GetFeedVarNames() { const std::vector<std::string> ProgramDesc::GetFeedTargetNames() {
BlockDesc *global_block = blocks_[0].get(); BlockDesc *global_block = blocks_[0].get();
std::vector<std::string> feed_var_names; std::vector<std::string> feed_target_names;
for (auto *op : global_block->AllOps()) { for (auto *op : global_block->AllOps()) {
if (op->Type() == "feed") { if (op->Type() == kFeedOpType) {
feed_var_names.insert(feed_var_names.begin(), op->Output("Out")[0]); feed_target_names.insert(feed_target_names.begin(), op->Output("Out")[0]);
} }
} }
return feed_var_names; return feed_target_names;
} }
const std::vector<std::string> ProgramDesc::GetFetchVarNames() { const std::vector<std::string> ProgramDesc::GetFetchTargetNames() {
BlockDesc *global_block = blocks_[0].get(); BlockDesc *global_block = blocks_[0].get();
std::vector<std::string> fetch_var_names; std::vector<std::string> fetch_target_names;
for (auto *op : global_block->AllOps()) { for (auto *op : global_block->AllOps()) {
if (op->Type() == "fetch") { if (op->Type() == kFetchOpType) {
fetch_var_names.push_back(op->Input("X")[0]); fetch_target_names.push_back(op->Input("X")[0]);
} }
} }
return fetch_var_names; return fetch_target_names;
} }
} // namespace framework } // namespace framework
......
...@@ -45,9 +45,8 @@ class ProgramDesc { ...@@ -45,9 +45,8 @@ class ProgramDesc {
proto::ProgramDesc *Proto(); proto::ProgramDesc *Proto();
const std::vector<std::string> GetFeedVarNames(); const std::vector<std::string> GetFeedTargetNames();
const std::vector<std::string> GetFetchTargetNames();
const std::vector<std::string> GetFetchVarNames();
private: private:
proto::ProgramDesc desc_; proto::ProgramDesc desc_;
......
...@@ -40,15 +40,15 @@ int main(int argc, char** argv) { ...@@ -40,15 +40,15 @@ int main(int argc, char** argv) {
std::string dirname = FLAGS_dirname; std::string dirname = FLAGS_dirname;
// 2. Initialize the inference program // 2. Initialize the inference program
auto* inference_program = paddle::inference::Load(*executor, *scope, dirname); auto inference_program = paddle::inference::Load(*executor, *scope, dirname);
// 3. Optional: perform optimization on the inference_program // 3. Optional: perform optimization on the inference_program
// 4. Get the feed_var_names and fetch_var_names // 4. Get the feed_target_names and fetch_target_names
const std::vector<std::string>& feed_var_names = const std::vector<std::string>& feed_target_names =
inference_program->GetFeedVarNames(); inference_program->GetFeedTargetNames();
const std::vector<std::string>& fetch_var_names = const std::vector<std::string>& fetch_target_names =
inference_program->GetFetchVarNames(); inference_program->GetFetchTargetNames();
// 5. Generate input // 5. Generate input
paddle::framework::LoDTensor input; paddle::framework::LoDTensor input;
...@@ -68,14 +68,14 @@ int main(int argc, char** argv) { ...@@ -68,14 +68,14 @@ int main(int argc, char** argv) {
std::map<std::string, paddle::framework::LoDTensor*> fetch_targets; std::map<std::string, paddle::framework::LoDTensor*> fetch_targets;
// set_feed_variable // set_feed_variable
for (size_t i = 0; i < feed_var_names.size(); ++i) { for (size_t i = 0; i < feed_target_names.size(); ++i) {
feed_targets[feed_var_names[i]] = &feeds[i]; feed_targets[feed_target_names[i]] = &feeds[i];
} }
// get_fetch_variable // get_fetch_variable
fetchs.resize(fetch_var_names.size()); fetchs.resize(fetch_target_names.size());
for (size_t i = 0; i < fetch_var_names.size(); ++i) { for (size_t i = 0; i < fetch_target_names.size(); ++i) {
fetch_targets[fetch_var_names[i]] = &fetchs[i]; fetch_targets[fetch_target_names[i]] = &fetchs[i];
} }
// Run the inference program // Run the inference program
...@@ -97,7 +97,6 @@ int main(int argc, char** argv) { ...@@ -97,7 +97,6 @@ int main(int argc, char** argv) {
std::cout << std::endl; std::cout << std::endl;
} }
delete inference_program;
delete scope; delete scope;
delete executor; delete executor;
......
...@@ -21,11 +21,11 @@ namespace inference { ...@@ -21,11 +21,11 @@ namespace inference {
const std::string kFeedOpType = "feed"; const std::string kFeedOpType = "feed";
bool IsParameter(const framework::VarDesc* var, bool IsParameter(const framework::VarDesc* var,
const framework::ProgramDesc* main_program) { const framework::ProgramDesc& main_program) {
if (var->Persistable()) { if (var->Persistable()) {
// There are many unreachable variables in the program // There are many unreachable variables in the program
for (size_t i = 0; i < main_program->Size(); ++i) { for (size_t i = 0; i < main_program.Size(); ++i) {
const framework::BlockDesc& block = main_program->Block(i); const framework::BlockDesc& block = main_program.Block(i);
for (auto* op : block.AllOps()) { for (auto* op : block.AllOps()) {
if (op->Type() == kFeedOpType) { if (op->Type() == kFeedOpType) {
continue; continue;
...@@ -44,12 +44,12 @@ bool IsParameter(const framework::VarDesc* var, ...@@ -44,12 +44,12 @@ bool IsParameter(const framework::VarDesc* var,
void LoadPersistables(framework::Executor& executor, void LoadPersistables(framework::Executor& executor,
framework::Scope& scope, framework::Scope& scope,
const std::string& dirname, const std::string& dirname,
framework::ProgramDesc* main_program) { const framework::ProgramDesc& main_program) {
framework::BlockDesc* global_block = main_program->MutableBlock(0); const framework::BlockDesc& global_block = main_program.Block(0);
framework::ProgramDesc* load_program = new framework::ProgramDesc(); framework::ProgramDesc* load_program = new framework::ProgramDesc();
framework::BlockDesc* load_block = load_program->MutableBlock(0); framework::BlockDesc* load_block = load_program->MutableBlock(0);
for (auto* var : global_block->AllVars()) { for (auto* var : global_block.AllVars()) {
if (IsParameter(var, main_program)) { if (IsParameter(var, main_program)) {
LOG(INFO) << "parameter's name: " << var->Name(); LOG(INFO) << "parameter's name: " << var->Name();
...@@ -72,7 +72,7 @@ void LoadPersistables(framework::Executor& executor, ...@@ -72,7 +72,7 @@ void LoadPersistables(framework::Executor& executor,
delete load_program; delete load_program;
} }
framework::ProgramDesc* Load(framework::Executor& executor, std::unique_ptr<framework::ProgramDesc> Load(framework::Executor& executor,
framework::Scope& scope, framework::Scope& scope,
const std::string& dirname) { const std::string& dirname) {
std::string model_filename = dirname + "/__model__"; std::string model_filename = dirname + "/__model__";
...@@ -86,10 +86,10 @@ framework::ProgramDesc* Load(framework::Executor& executor, ...@@ -86,10 +86,10 @@ framework::ProgramDesc* Load(framework::Executor& executor,
inputfs.read(&program_desc_str[0], program_desc_str.size()); inputfs.read(&program_desc_str[0], program_desc_str.size());
inputfs.close(); inputfs.close();
framework::ProgramDesc* main_program = std::unique_ptr<framework::ProgramDesc> main_program(
new framework::ProgramDesc(program_desc_str); new framework::ProgramDesc(program_desc_str));
LoadPersistables(executor, scope, dirname, main_program); LoadPersistables(executor, scope, dirname, *main_program);
return main_program; return main_program;
} }
......
...@@ -14,6 +14,7 @@ limitations under the License. */ ...@@ -14,6 +14,7 @@ limitations under the License. */
#pragma once #pragma once
#include <memory>
#include <string> #include <string>
#include <vector> #include <vector>
#include "paddle/framework/block_desc.h" #include "paddle/framework/block_desc.h"
...@@ -26,14 +27,14 @@ namespace paddle { ...@@ -26,14 +27,14 @@ namespace paddle {
namespace inference { namespace inference {
bool IsParameter(const framework::VarDesc* var, bool IsParameter(const framework::VarDesc* var,
const framework::ProgramDesc* main_program); const framework::ProgramDesc& main_program);
void LoadPersistables(framework::Executor& executor, void LoadPersistables(framework::Executor& executor,
framework::Scope& scope, framework::Scope& scope,
const std::string& dirname, const std::string& dirname,
framework::ProgramDesc* main_program); const framework::ProgramDesc& main_program);
framework::ProgramDesc* Load(framework::Executor& executor, std::unique_ptr<framework::ProgramDesc> Load(framework::Executor& executor,
framework::Scope& scope, framework::Scope& scope,
const std::string& dirname); const std::string& dirname);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册