diff --git a/paddle/fluid/jit/engine/interpreter_engine.cc b/paddle/fluid/jit/engine/interpreter_engine.cc index 36f8a2271d1efefc02e55905b86c7d8ee7aef8a1..b16d0c98dee81b94e0ce2ded1a6086856c8248af 100644 --- a/paddle/fluid/jit/engine/interpreter_engine.cc +++ b/paddle/fluid/jit/engine/interpreter_engine.cc @@ -25,9 +25,10 @@ namespace paddle { namespace jit { -InterpreterEngine::InterpreterEngine(const std::shared_ptr &info, - const VariableMap ¶ms_dict, - const phi::Place &place) +InterpreterEngine::InterpreterEngine( + const std::shared_ptr &info, + const std::shared_ptr ¶ms_dict, + const phi::Place &place) : info_(info), params_dict_(params_dict), place_(place) { info_->RemoveDescFeedFetch(); PADDLE_ENFORCE_GT( diff --git a/paddle/fluid/jit/engine/interpreter_engine.h b/paddle/fluid/jit/engine/interpreter_engine.h index d7aa5d610a50eaeaf6c898b638d67ee582da031f..367bc1b86dcc6e8df5348c6ca8c1aecc12abe573 100644 --- a/paddle/fluid/jit/engine/interpreter_engine.h +++ b/paddle/fluid/jit/engine/interpreter_engine.h @@ -36,7 +36,7 @@ using InterpreterCore = framework::InterpreterCore; class InterpreterEngine : public BaseEngine { public: InterpreterEngine(const std::shared_ptr &info, - const VariableMap ¶ms_dict, + const std::shared_ptr ¶ms_dict, const phi::Place &place); ~InterpreterEngine() noexcept {} @@ -54,7 +54,7 @@ class InterpreterEngine : public BaseEngine { private: std::shared_ptr info_; - VariableMap params_dict_; + std::shared_ptr params_dict_; framework::Scope scope_; phi::Place place_; std::shared_ptr inner_interpreter_; diff --git a/paddle/fluid/jit/engine/predictor_engine.cc b/paddle/fluid/jit/engine/predictor_engine.cc index bac6f993b04f6e4956be5fc953adeddc91b376e8..d18f4f487dbe2ebf302e0357777649077ba83d6a 100644 --- a/paddle/fluid/jit/engine/predictor_engine.cc +++ b/paddle/fluid/jit/engine/predictor_engine.cc @@ -27,11 +27,15 @@ static bool PaddleTensorToDenseTensor(const PaddleTensor &pt, DenseTensor *t, const platform::Place &place); -PredictorEngine::PredictorEngine(const std::shared_ptr &info, - const VariableMap ¶ms_dict, - const phi::Place &place) - : info_(info), scope_(new framework::Scope()), place_(place) { - utils::ShareParamsIntoScope(info_->ParamNames(), params_dict, scope_.get()); +PredictorEngine::PredictorEngine( + const std::shared_ptr &info, + const std::shared_ptr ¶ms_dict, + const phi::Place &place) + : info_(info), + params_dict_(params_dict), + scope_(new framework::Scope()), + place_(place) { + utils::ShareParamsIntoScope(info_->ParamNames(), params_dict_, scope_.get()); VLOG(6) << framework::GenScopeTreeDebugInfo(scope_.get()); // TODO(Aurelius84): Expose AnalysisConfig to user. @@ -66,6 +70,12 @@ PredictorEngine::PredictorEngine( predictor_(std::dynamic_pointer_cast( predictor)) {} +std::unique_ptr PredictorEngine::Clone(void *stream) { + auto *x = new PredictorEngine( + info_, scope_, place_, std::move(predictor_->Clone(stream))); + return std::unique_ptr(x); +} + std::vector PredictorEngine::operator()( const std::vector &inputs) { auto dense_tensors = utils::ToDenseTensors(inputs); @@ -199,11 +209,5 @@ static bool PaddleTensorToDenseTensor(const PaddleTensor &pt, return true; } -std::unique_ptr PredictorEngine::Clone(void *stream) { - auto *x = new PredictorEngine( - info_, scope_, place_, std::move(predictor_->Clone(stream))); - return std::unique_ptr(x); -} - } // namespace jit } // namespace paddle diff --git a/paddle/fluid/jit/engine/predictor_engine.h b/paddle/fluid/jit/engine/predictor_engine.h index ad07a7a7ffbf575b2c5b0b5b389f4d76776fbb76..b2da6f4210a37a7223e1d8cf07a5cd2cf38f4184 100644 --- a/paddle/fluid/jit/engine/predictor_engine.h +++ b/paddle/fluid/jit/engine/predictor_engine.h @@ -31,7 +31,7 @@ namespace jit { class PredictorEngine : public BaseEngine { public: PredictorEngine(const std::shared_ptr &info, - const VariableMap ¶ms_dict, + const std::shared_ptr ¶ms_dict, const phi::Place &place); PredictorEngine(const std::shared_ptr &info, @@ -50,6 +50,7 @@ class PredictorEngine : public BaseEngine { private: std::shared_ptr info_; + std::shared_ptr params_dict_; std::shared_ptr scope_; phi::Place place_; std::shared_ptr predictor_; diff --git a/paddle/fluid/jit/function_utils.cc b/paddle/fluid/jit/function_utils.cc index b67b5ba5b0518d8d7e6367ebaf7f155326c34c45..3bd8c234113157276338ac0d1ed89cfa3cfae687 100644 --- a/paddle/fluid/jit/function_utils.cc +++ b/paddle/fluid/jit/function_utils.cc @@ -71,18 +71,18 @@ void ShareIntoScope(const std::vector &ordered_input_names, } void ShareParamsIntoScope(const std::vector ¶m_names, - const VariableMap ¶ms_dict, + const std::shared_ptr ¶ms_dict, framework::Scope *scope) { for (size_t i = 0; i < param_names.size(); ++i) { std::string name = param_names[i]; - PADDLE_ENFORCE_EQ(params_dict.count(name), + PADDLE_ENFORCE_EQ(params_dict->count(name), 1, phi::errors::InvalidArgument( "Parameter named %s is not existed in params_dict. " "Please check that your model was saved correctly", name)); - auto ¶m = params_dict.find(name)->second; + auto ¶m = params_dict->find(name)->second; auto &dense_tensor = param->Get(); auto *var = scope->Var(name); auto *dst_tensor = var->GetMutable(); diff --git a/paddle/fluid/jit/function_utils.h b/paddle/fluid/jit/function_utils.h index d61b720cec88fd1ea8877b4bcc8eb4c2757f1894..5daa5ada200f48adf595d5b62218fa305fcfd95d 100644 --- a/paddle/fluid/jit/function_utils.h +++ b/paddle/fluid/jit/function_utils.h @@ -51,14 +51,14 @@ void ShareIntoScope(const std::vector &ordered_input_names, framework::Scope *scope); void ShareParamsIntoScope(const std::vector ¶m_names, - const VariableMap ¶ms_dict, + const std::shared_ptr ¶ms_dict, framework::Scope *scope); void RemoveFeedFetch(framework::ProgramDesc *program_desc); template std::shared_ptr MakeEngine(const std::shared_ptr &info, - const VariableMap ¶ms_dict, + const std::shared_ptr ¶ms_dict, const phi::Place &place) { return std::make_shared(info, params_dict, place); } diff --git a/paddle/fluid/jit/layer.cc b/paddle/fluid/jit/layer.cc index 332c53a8e36492474ce3af11fb97d03ae585807e..2e8dba0f5a731b9e4e6ace901e08accba58ec481 100644 --- a/paddle/fluid/jit/layer.cc +++ b/paddle/fluid/jit/layer.cc @@ -26,8 +26,8 @@ namespace paddle { namespace jit { -Layer::Layer(const VariableMap& params_map, - const VariableMap& attrs_map, +Layer::Layer(const std::shared_ptr& params_map, + const std::shared_ptr& attrs_map, const FunctionInfoMap& info_map, const phi::Place& place) : params_map_(params_map), @@ -80,12 +80,12 @@ std::vector Layer::FunctionNames() const { #define PD_SPECIALZE_ATTRIBUTE_TYPE(T) \ template <> \ T Layer::Attribute(const std::string& name) const { \ - if (attrs_map_.find(name) == attrs_map_.end()) { \ + if (attrs_map_->find(name) == attrs_map_->end()) { \ PADDLE_THROW(phi::errors::NotFound( \ "Attribute can not found %s, please check if it exists.")); \ return T(); \ } \ - auto var = attrs_map_.at(name); \ + auto var = attrs_map_->at(name); \ T ret = var->Get(); \ return ret; \ } diff --git a/paddle/fluid/jit/layer.h b/paddle/fluid/jit/layer.h index ed8b739a0b72f830e6b397ab82bd9eeece2ac00c..4f76a41d06f3ea3d2d26aea30fb3ed8db6791c93 100644 --- a/paddle/fluid/jit/layer.h +++ b/paddle/fluid/jit/layer.h @@ -43,8 +43,8 @@ using FunctionInfoMap = class Layer { public: - Layer(const VariableMap& params_map, - const VariableMap& attrs_map_, + Layer(const std::shared_ptr& params_map, + const std::shared_ptr& attrs_map_, const FunctionInfoMap& info_map, const phi::Place& place); @@ -70,8 +70,8 @@ class Layer { std::shared_ptr Clone(void* stream = nullptr); private: - VariableMap params_map_; - VariableMap attrs_map_; + std::shared_ptr params_map_; + std::shared_ptr attrs_map_; FunctionInfoMap info_map_; phi::Place place_; std::shared_ptr unit_; diff --git a/paddle/fluid/jit/serializer.cc b/paddle/fluid/jit/serializer.cc index 436717a8dc38974e10ba1cb636f1d1ceeceff3d2..21a187ad6710052d4d5c5085616bf34fba45db0c 100644 --- a/paddle/fluid/jit/serializer.cc +++ b/paddle/fluid/jit/serializer.cc @@ -58,12 +58,12 @@ Layer Deserializer::operator()(const std::string& path, info_map[func_name]->SetProgramFilePath(it.second); } - VariableMap params_dict; - VariableMap attrs_dict; - ReadTensorData(path + PDPARAMS_SUFFIX, param_names_set, place, ¶ms_dict); + auto params_dict = std::make_shared(); + auto attrs_dict = std::make_shared(); + ReadTensorData(path + PDPARAMS_SUFFIX, param_names_set, place, params_dict); if (utils::FileExists(path + PROPERTY_SUFFIX)) { - ReadAttributeData(path + PROPERTY_SUFFIX, &attrs_dict); + ReadAttributeData(path + PROPERTY_SUFFIX, attrs_dict); VLOG(3) << "Read Property Success!"; } @@ -90,10 +90,11 @@ Layer Deserializer::operator()(const std::string& path, return layer; } -void Deserializer::ReadTensorData(const std::string& file_name, - const std::set& var_name, - const phi::Place& place, - VariableMap* params_dict) const { +void Deserializer::ReadTensorData( + const std::string& file_name, + const std::set& var_name, + const phi::Place& place, + std::shared_ptr params_dict) const { VLOG(3) << "ReadTensorData from: " << file_name; std::ifstream fin(file_name, std::ios::binary); platform::DeviceContextPool& pool = platform::DeviceContextPool::Instance(); @@ -108,12 +109,15 @@ void Deserializer::ReadTensorData(const std::string& file_name, } } -void Deserializer::ReadAttributeData(const std::string& file_path, - VariableMap* attrs_dict) const { +void Deserializer::ReadAttributeData( + const std::string& file_path, + std::shared_ptr attrs_dict) const { VLOG(3) << "ReadPropertyData from: " << file_path; Property p; p.Deserialization(file_path); - *attrs_dict = static_cast(p.Values()); + for (auto& it : p.Values()) { + attrs_dict->emplace(it.first, it.second); + } return; } diff --git a/paddle/fluid/jit/serializer.h b/paddle/fluid/jit/serializer.h index b93eaa44fe63268b13bfd86b66e998ac77da3392..926e9a6afda3718626c6629664867d01c72afa92 100644 --- a/paddle/fluid/jit/serializer.h +++ b/paddle/fluid/jit/serializer.h @@ -55,11 +55,11 @@ class Deserializer { void ReadTensorData(const std::string& file_name, const std::set& var_name, const phi::Place& place, - VariableMap* params_dict) const; + std::shared_ptr params_dict) const; // property pb void ReadAttributeData(const std::string& file_path, - VariableMap* attrs_dict) const; + std::shared_ptr attrs_dict) const; // void ReadExtraInfo(const std::string& file_name) const;