forked from huawei/mindspore2022
215 lines
6.3 KiB
C++
215 lines
6.3 KiB
C++
/**
|
|
* Copyright 2019 Huawei Technologies Co., Ltd
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#include "transform/df_graph_manager.h"
|
|
|
|
#include <dirent.h>
|
|
#include <dlfcn.h>
|
|
#include <limits.h>
|
|
#include <sstream>
|
|
|
|
#include "securec/include/securec.h"
|
|
#include "pipeline/parse/python_adapter.h"
|
|
#include "pipeline/pipeline.h"
|
|
#include "utils/config_manager.h"
|
|
#ifndef NO_DLIB
|
|
#include "tdt/tsd_client.h"
|
|
#endif
|
|
|
|
namespace mindspore {
|
|
namespace transform {
|
|
DfGraphWrapper::DfGraphWrapper(const std::string& name, const int& id, const DfGraphPtr& graph_ptr,
|
|
const OptionMap& options)
|
|
: name_(name), id_(id), graph_ptr_(graph_ptr), options_(options) {}
|
|
|
|
DfGraphManager::DfGraphManager() {
|
|
graph_id_ = 0;
|
|
graph_runner_ptr_ = nullptr;
|
|
sess_ptr_ = nullptr;
|
|
}
|
|
|
|
DfGraphManager::~DfGraphManager() {
|
|
// in python fisrt destroy after atexit but in c++ destoy before atexit
|
|
DeleteGraphRunner();
|
|
DeleteGeSession();
|
|
ClearGraph();
|
|
parse::python_adapter::set_python_env_flag(false);
|
|
}
|
|
|
|
DfGraphManager& DfGraphManager::GetInstance() {
|
|
static DfGraphManager instance;
|
|
return instance;
|
|
}
|
|
|
|
int DfGraphManager::GenerateId() {
|
|
graph_id_++;
|
|
if (graph_id_ <= 0) {
|
|
graph_id_ = 1;
|
|
}
|
|
MS_LOG(INFO) << "Generate graph Id : " << graph_id_;
|
|
return graph_id_;
|
|
}
|
|
|
|
Status DfGraphManager::AddGraph(const std::string& name, const DfGraphPtr& graph_ptr, const OptionMap& options) {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
if (name.empty()) {
|
|
MS_LOG(ERROR) << "The graph name is null, add graph failed";
|
|
return Status::INVALID_ARGUMENT;
|
|
}
|
|
|
|
if (graph_ptr == nullptr) {
|
|
MS_LOG(WARNING) << "The new graph {" << name << "}'s pointer is null, add graph failed";
|
|
return Status::INVALID_ARGUMENT;
|
|
}
|
|
|
|
int id = GenerateId();
|
|
DfGraphWrapperPtr wrap_ptr = std::make_shared<DfGraphWrapper>(name, id, graph_ptr, options);
|
|
auto ret = graphs_.emplace(name, wrap_ptr);
|
|
if (ret.second == false) {
|
|
MS_LOG(WARNING) << "The graph name:{ " << name << " }is already exists! The old graph will be overwritten!!";
|
|
ret.first->second = wrap_ptr;
|
|
}
|
|
MS_LOG(INFO) << "Add graph " << name << " to GraphManager success!";
|
|
return Status::SUCCESS;
|
|
}
|
|
|
|
std::vector<DfGraphWrapperPtr> DfGraphManager::GetAllGraphs() {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
std::vector<DfGraphWrapperPtr> ret;
|
|
std::stringstream ss;
|
|
ss << "{ ";
|
|
for (auto it = graphs_.begin(); it != graphs_.end(); ++it) {
|
|
ss << it->first << ", ";
|
|
ret.emplace_back(it->second);
|
|
}
|
|
ss << "}";
|
|
MS_LOG(INFO) << "Return graphs: " << ss.str();
|
|
return ret;
|
|
}
|
|
std::set<string> DfGraphManager::GetSavedGraphs() { return saved_graphs_; }
|
|
|
|
void DfGraphManager::AddSavedGraphs(const std::string& id) { saved_graphs_.insert(id); }
|
|
|
|
DfGraphWrapperPtr DfGraphManager::GetGraphByName(const std::string& name) {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
if (name.empty()) {
|
|
MS_LOG(ERROR) << "The graph name is null";
|
|
return nullptr;
|
|
}
|
|
|
|
auto it = graphs_.find(name);
|
|
if (it == graphs_.end()) {
|
|
MS_LOG(INFO) << "Can't found graph name: " << name;
|
|
return nullptr;
|
|
}
|
|
MS_LOG(INFO) << "Return graph: " << name;
|
|
return it->second;
|
|
}
|
|
|
|
void DfGraphManager::ClearGraph() noexcept {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
graphs_.clear();
|
|
anf_graphs_.clear();
|
|
MS_LOG(INFO) << "Remove all graphs in GraphManager";
|
|
}
|
|
|
|
void DfGraphManager::SetAnfGraph(const std::string& name, const AnfGraphPtr& anf_graph_ptr) {
|
|
DfGraphWrapperPtr df_graph = GetGraphByName(name);
|
|
if (df_graph == nullptr) {
|
|
MS_LOG(ERROR) << "Can't found graph name: " << name;
|
|
return;
|
|
}
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
anf_graphs_[df_graph->id_] = anf_graph_ptr;
|
|
}
|
|
|
|
AnfGraphPtr DfGraphManager::GetAnfGraph(uint32_t graph_id) {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
auto iter = anf_graphs_.find(graph_id);
|
|
if (iter == anf_graphs_.end()) {
|
|
MS_LOG(ERROR) << "Can't found anf graph, graph_id = " << graph_id;
|
|
return nullptr;
|
|
}
|
|
|
|
return iter->second;
|
|
}
|
|
|
|
void DfGraphManager::EraseAnfGraph() {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
anf_graphs_.clear();
|
|
}
|
|
|
|
void DfGraphManager::SetGeSession(const std::shared_ptr<ge::Session>& sess_ptr) {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
if (sess_ptr == nullptr) {
|
|
MS_LOG(WARNING) << "You are adding a empty Ge Session";
|
|
}
|
|
|
|
if (sess_ptr_ == nullptr) {
|
|
MS_LOG(INFO) << "Add a new Ge Session success";
|
|
} else {
|
|
MS_LOG(INFO) << "Add a new Ge Session success, the old Ge Session will be overwritten!!";
|
|
}
|
|
sess_ptr_ = sess_ptr;
|
|
}
|
|
|
|
std::shared_ptr<ge::Session> DfGraphManager::GetGeSession() {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
return sess_ptr_;
|
|
}
|
|
|
|
void DfGraphManager::DeleteGeSession() noexcept {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
if (sess_ptr_ == nullptr) {
|
|
MS_LOG(INFO) << "Ge Session is not exist";
|
|
} else {
|
|
sess_ptr_ = nullptr;
|
|
saved_graphs_.clear();
|
|
MS_LOG(INFO) << "Delete Ge Session success";
|
|
}
|
|
}
|
|
|
|
void DfGraphManager::SetGraphRunner(const std::shared_ptr<transform::GraphRunner>& graph_runner_ptr) noexcept {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
if (graph_runner_ptr == nullptr) {
|
|
MS_LOG(WARNING) << "You are adding a empty GraphRunner";
|
|
}
|
|
|
|
if (graph_runner_ptr_ == nullptr) {
|
|
MS_LOG(INFO) << "Add a new GraphRunner success";
|
|
} else {
|
|
MS_LOG(INFO) << "Add a new GraphRunner success, the old GraphRunner will be overwritten!!";
|
|
}
|
|
graph_runner_ptr_ = graph_runner_ptr;
|
|
}
|
|
|
|
std::shared_ptr<transform::GraphRunner> DfGraphManager::GetGraphRunner() {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
return graph_runner_ptr_;
|
|
}
|
|
|
|
void DfGraphManager::DeleteGraphRunner() noexcept {
|
|
std::lock_guard<std::mutex> lg(lock_);
|
|
if (graph_runner_ptr_ == nullptr) {
|
|
MS_LOG(INFO) << "GraphRunner is not exist";
|
|
} else {
|
|
graph_runner_ptr_ = nullptr;
|
|
MS_LOG(INFO) << "Delete GraphRunner success";
|
|
}
|
|
}
|
|
} // namespace transform
|
|
} // namespace mindspore
|