// Copyright (c) 2018 PaddlePaddle Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #include #include #include #include #include "paddle/fluid/framework/lod_tensor.h" #include "paddle/fluid/inference/engine.h" #include "paddle/fluid/inference/utils/singleton.h" #include "framework/core/net/net.h" #include "framework/core/types.h" #include "framework/graph/graph.h" #include "saber/saber_types.h" namespace anakin { template class Net; namespace graph { template class Graph; } // namespace graph } // namespace anakin namespace paddle { namespace inference { namespace anakin { template class AnakinEngine { using NetT = ::anakin::Net; using GraphT = ::anakin::graph::Graph; public: explicit AnakinEngine(bool need_summary = false); ~AnakinEngine(); void InitGraph(); void SetInputShape(const std::string &name, std::vector shape); void AddOp(const std::string &name, const std::string &type, const std::vector &inputs, const std::vector &outputs); template void AddOpAttr(const std::string &op_name, const std::string &attr_name, const T &attr_value) { PADDLE_ENFORCE(graph_->AddOpAttr(op_name, attr_name, attr_value), "Add operation's attribution."); } NetT *Net() { return net_.get(); } std::unique_ptr Clone(); void Freeze(); void Optimize(); void Save(std::string path) { graph_->save(path); } void Execute(const std::map &inputs, const std::map &outputs); private: std::unique_ptr graph_; std::unique_ptr net_; }; } // namespace anakin } // namespace inference } // namespace paddle