@@ -474,9 +474,6 @@ set(INFER_SRC_LIST | |||
"common/ge/plugin_manager.cc" | |||
"common/ge/op_tiling_manager.cc" | |||
"init/gelib.cc" | |||
"session/inner_session.cc" | |||
"session/session_manager.cc" | |||
"graph/execute/model_executor.cc" | |||
"engine_manager/dnnengine_manager.cc" | |||
"opskernel_manager/ops_kernel_manager.cc" | |||
"opskernel_manager/ops_kernel_builder_manager.cc" | |||
@@ -721,6 +718,12 @@ set(INFER_SRC_LIST | |||
"ge_opt_info/ge_opt_info.cc" | |||
) | |||
set(RUNNER_SRC_LIST | |||
"client/ge_api.cc" | |||
"session/inner_session.cc" | |||
"session/session_manager.cc" | |||
) | |||
if (NOT ENABLE_D AND NOT ENABLE_ACL AND NOT ENABLE_MS_TESTCASES) | |||
message("CMAKE_CXX_COMPILER_VERSION = ${CMAKE_CXX_COMPILER_VERSION}") | |||
############ libge_runner.so ############ | |||
@@ -47,6 +47,7 @@ const int32_t kMaxStrLen = 128; | |||
static bool g_ge_initialized = false; | |||
static std::mutex g_ge_release_mutex; // GEFinalize and ~Session use | |||
static std::shared_ptr<ge::SessionManager> g_session_manager; | |||
namespace ge { | |||
void GetOpsProtoPath(std::string &opsproto_path) { | |||
@@ -148,6 +149,22 @@ Status GEInitializeImpl(const std::map<string, string> &options) { | |||
return FAILED; | |||
} | |||
ErrorManager::GetInstance().SetStage(error_message::kInitialize, error_message::kOther); | |||
GELOGI("sessionManager initial."); | |||
GE_TIMESTAMP_START(SessionManagerInitialize); | |||
g_session_manager = MakeShared<ge::SessionManager>(); | |||
if (g_session_manager == nullptr) { | |||
GELOGE(GE_CLI_INIT_FAILED, "[Init][Create]SessionManager failed"); | |||
return FAILED; | |||
} | |||
ret = g_session_manager->Initialize(options); | |||
GE_TIMESTAMP_END(SessionManagerInitialize, "InnerInitialize::SessionManagerInitialize"); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, "[Init][SessionManager] GE session manager initial failed."); | |||
REPORT_CALL_ERROR("E19999", "SessionManager initialize failed."); | |||
return ret; | |||
} | |||
// 7.check return status, return | |||
if (!g_ge_initialized) { | |||
// Initialize success, first time calling initialize | |||
@@ -217,6 +234,12 @@ Status GEFinalize() { | |||
ret = middle_ret; | |||
} | |||
} | |||
GELOGI("SessionManager finalization."); | |||
if (g_session_manager != nullptr) { | |||
(void)g_session_manager->Finalize(); // always success. | |||
} | |||
middle_ret = TBEPluginManager::Instance().Finalize(); | |||
if (middle_ret != SUCCESS) { | |||
ret = middle_ret; | |||
@@ -272,7 +295,7 @@ Session::Session(const std::map<string, string> &options) { | |||
GELOGT(TRACE_RUNNING, "Creating session"); | |||
uint64_t session_id = 0; | |||
Status ret = instance_ptr->SessionManagerObj().CreateSession(options, session_id); | |||
Status ret = g_session_manager->CreateSession(options, session_id); | |||
GELOGT(TRACE_RUNNING, "Session id is %lu", session_id); | |||
// check return status, return, update session id if success | |||
@@ -321,7 +344,7 @@ Session::Session(const std::map<AscendString, AscendString> &options) { | |||
str_options[key] = val; | |||
} | |||
uint64_t session_id = 0; | |||
Status ret = instance_ptr->SessionManagerObj().CreateSession(str_options, session_id); | |||
Status ret = g_session_manager->CreateSession(str_options, session_id); | |||
GELOGT(TRACE_RUNNING, "Session id is %lu", session_id); | |||
// check return status, return, update session id if success | |||
@@ -359,7 +382,7 @@ Session::~Session() { | |||
GELOGT(TRACE_RUNNING, "Destroying session"); | |||
ret = instance_ptr->SessionManagerObj().DestroySession(session_id); | |||
ret = g_session_manager->DestroySession(session_id); | |||
} catch (google::protobuf::FatalException &e) { | |||
GELOGE(GE_CLI_SESS_DESTROY_FAILED, "[Destruct][Session]Failed " | |||
"because get fatalException."); | |||
@@ -397,7 +420,7 @@ Status Session::AddGraph(uint32_t graph_id, const Graph &graph, const std::map<s | |||
return FAILED; | |||
} | |||
GELOGD("Adding graph to session"); | |||
Status ret = instance_ptr->SessionManagerObj().AddGraph(sessionId_, graph_id, graph, options); | |||
Status ret = g_session_manager->AddGraph(sessionId_, graph_id, graph, options); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, | |||
"[Add][Graph]Failed, error code:%u, session_id:%lu, graph_id:%u.", | |||
@@ -435,7 +458,7 @@ Status Session::AddGraph(uint32_t graph_id, const Graph &graph, | |||
std::string val = option.second.GetString(); | |||
str_options[key] = val; | |||
} | |||
Status ret = instance_ptr->SessionManagerObj().AddGraph(sessionId_, graph_id, graph, str_options); | |||
Status ret = g_session_manager->AddGraph(sessionId_, graph_id, graph, str_options); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, | |||
"[Add][Graph]Failed, error code:%u, session_id:%lu, graph_id:%u.", | |||
@@ -472,7 +495,7 @@ Status Session::AddGraphWithCopy(uint32_t graph_id, const Graph &graph, | |||
str_options.insert({it->first.GetString(), it->second.GetString()}); | |||
} | |||
GELOGD("Adding graph to session"); | |||
Status ret = instance_ptr->SessionManagerObj().AddGraphWithCopy(sessionId_, graph_id, graph, str_options); | |||
Status ret = g_session_manager->AddGraphWithCopy(sessionId_, graph_id, graph, str_options); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, | |||
"[Add][Graph]Failed, error code:%u, session_id:%lu, graph_id:%u.", | |||
@@ -502,7 +525,7 @@ Status Session::RemoveGraph(uint32_t graph_id) { | |||
} | |||
GELOGT(TRACE_RUNNING, "Removing Graph from session"); | |||
Status ret = instance_ptr->SessionManagerObj().RemoveGraph(sessionId_, graph_id); | |||
Status ret = g_session_manager->RemoveGraph(sessionId_, graph_id); | |||
// check return status, return | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, | |||
@@ -583,7 +606,7 @@ Status Session::RunGraph(uint32_t graph_id, const std::vector<Tensor> &inputs, s | |||
return FAILED; | |||
} | |||
GELOGT(TRACE_RUNNING, "Running Graph"); | |||
Status ret = instance_ptr->SessionManagerObj().RunGraph(sessionId_, graph_id, graph_inputs, outputs); | |||
Status ret = g_session_manager->RunGraph(sessionId_, graph_id, graph_inputs, outputs); | |||
// check return status | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, | |||
@@ -631,7 +654,7 @@ Status Session::RunGraphWithStreamAsync(uint32_t graph_id, void *stream, const s | |||
return FAILED; | |||
} | |||
GELOGT(TRACE_RUNNING, "Run Graph Run graph with stream asyn."); | |||
Status ret = instance_ptr->SessionManagerObj().RunGraphWithStreamAsync(sessionId_, graph_id, stream, inputs, | |||
Status ret = g_session_manager->RunGraphWithStreamAsync(sessionId_, graph_id, stream, inputs, | |||
outputs); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, "[Run][Graph]Run graph with stream asyn Failed," | |||
@@ -648,7 +671,7 @@ Status Session::RunGraphWithStreamAsync(uint32_t graph_id, void *stream, const s | |||
// Register Call Back | |||
Status Session::RegisterCallBackFunc(const std::string &key, const pCallBackFunc &callback) { | |||
ErrorManager::GetInstance().GenWorkStreamIdDefault(); | |||
return ge::GELib::GetInstance()->SessionManagerObj().RegisterCallBackFunc(sessionId_, key, callback); | |||
return g_session_manager->RegisterCallBackFunc(sessionId_, key, callback); | |||
} | |||
Status Session::RegisterCallBackFunc(const char *key, const session::pCallBackFunc &callback) { | |||
@@ -657,7 +680,7 @@ Status Session::RegisterCallBackFunc(const char *key, const session::pCallBackFu | |||
if (key != nullptr) { | |||
str_key = key; | |||
} | |||
return ge::GELib::GetInstance()->SessionManagerObj().RegisterCallBackFunc(sessionId_, str_key, callback); | |||
return g_session_manager->RegisterCallBackFunc(sessionId_, str_key, callback); | |||
} | |||
// Build Graph | |||
@@ -675,7 +698,7 @@ Status Session::BuildGraph(uint32_t graph_id, const std::vector<InputTensorInfo> | |||
return FAILED; | |||
} | |||
GELOGT(TRACE_RUNNING, "Building Graph"); | |||
Status ret = instance_ptr->SessionManagerObj().BuildGraph(sessionId_, graph_id, inputs); | |||
Status ret = g_session_manager->BuildGraph(sessionId_, graph_id, inputs); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, | |||
"[Build][Graph]Failed, error code:%u, session_id:%lu, graph_id:%u.", | |||
@@ -702,7 +725,7 @@ Status Session::BuildGraph(uint32_t graph_id, const std::vector<ge::Tensor> &inp | |||
return FAILED; | |||
} | |||
GELOGT(TRACE_RUNNING, "Building Graph"); | |||
Status ret = instance_ptr->SessionManagerObj().BuildGraph(sessionId_, graph_id, inputs); | |||
Status ret = g_session_manager->BuildGraph(sessionId_, graph_id, inputs); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, | |||
"[Build][Graph]Failed, error code:%u, session_id:%lu, graph_id:%u.", | |||
@@ -733,7 +756,7 @@ Status Session::RunGraphAsync(uint32_t graph_id, const std::vector<ge::Tensor> & | |||
GELOGW( | |||
"The callback function will not be checked. Please ensure that the implementation of the function is trusted."); | |||
Status ret = ge::GELib::GetInstance()->SessionManagerObj().RunGraphAsync(sessionId_, graph_id, inputs, callback); | |||
Status ret = g_session_manager->RunGraphAsync(sessionId_, graph_id, inputs, callback); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, "[Run][Graph]RunGraphAsync Failed, error code:%u, session_id:%lu, graph_id:%u.", | |||
ret, sessionId_, graph_id); | |||
@@ -757,7 +780,7 @@ Status Session::GetVariables(const std::vector<std::string> &var_names, std::vec | |||
return FAILED; | |||
} | |||
GELOGT(TRACE_RUNNING, "Get Variables"); | |||
Status ret = ge::GELib::GetInstance()->SessionManagerObj().GetVariables(sessionId_, var_names, var_values); | |||
Status ret = g_session_manager->GetVariables(sessionId_, var_names, var_values); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, "[Get][Variables]Failed, error code:%u, session_id:%lu.", ret, sessionId_); | |||
return FAILED; | |||
@@ -787,7 +810,7 @@ Status Session::GetVariables(const std::vector<AscendString> &var_names, std::ve | |||
} | |||
str_var_names.emplace_back(var_name.GetString()); | |||
} | |||
Status ret = ge::GELib::GetInstance()->SessionManagerObj().GetVariables(sessionId_, str_var_names, var_values); | |||
Status ret = g_session_manager->GetVariables(sessionId_, str_var_names, var_values); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, "[Get][Variables]Failed, error code:%u, session_id:%lu.", ret, sessionId_); | |||
REPORT_CALL_ERROR("E19999", "Get variables failed, error code:%u, session_id:%lu.", | |||
@@ -798,6 +821,6 @@ Status Session::GetVariables(const std::vector<AscendString> &var_names, std::ve | |||
} | |||
bool Session::IsGraphNeedRebuild(uint32_t graph_id) { | |||
return ge::GELib::GetInstance()->SessionManagerObj().IsGraphNeedRebuild(sessionId_, graph_id); | |||
return g_session_manager->IsGraphNeedRebuild(sessionId_, graph_id); | |||
} | |||
} // namespace ge |
@@ -23,6 +23,7 @@ | |||
#include "graph/manager/graph_var_manager.h" | |||
#include "graph/utils/tensor_adapter.h" | |||
#include "graph/load/graph_loader.h" | |||
#include "graph/load/model_manager/model_manager.h" | |||
#include "common/math/math_util.h" | |||
#include "common/formats/utils/formats_trans_utils.h" | |||
@@ -38,7 +39,7 @@ namespace ge { | |||
/// @param [in] options user config params | |||
/// @return Status result of function | |||
/// | |||
Status ModelExecutor::Initialize(const map<string, string> &options) { | |||
Status ModelExecutor::Initialize(const map<string, string> &options, uint64_t session_id) { | |||
graph_run_listener_ = MakeShared<GraphModelListener>(sync_run_mutex_, condition_); | |||
if (graph_run_listener_ == nullptr) { | |||
REPORT_CALL_ERROR("E19999", "New GraphModelListener fail"); | |||
@@ -46,6 +47,14 @@ Status ModelExecutor::Initialize(const map<string, string> &options) { | |||
return MEMALLOC_FAILED; | |||
} | |||
auto model_manager = ModelManager::GetInstance(); | |||
GE_CHECK_NOTNULL(model_manager); | |||
GE_IF_BOOL_EXEC(model_manager->EnableExceptionDump(options) != SUCCESS, | |||
REPORT_CALL_ERROR("E19999", "ModelManager EnableExceptionDump failed."); | |||
GELOGE(FAILED, "[Enable][ExceptionDump] failed."); | |||
return FAILED); | |||
session_id_ = session_id; | |||
train_graph_flag_ = ParseTrainGraphFlag(); | |||
thread_run_flag_.store(true); | |||
run_thread_ = std::thread(&ModelExecutor::RunThread, this); | |||
@@ -74,6 +83,7 @@ Status ModelExecutor::Finalize() { | |||
GELOGW("Graph executor FreeExecuteMemory failed, resources may not be released correctly."); | |||
} | |||
ModelManager::GetInstance()->DestroyAicpuSession(session_id_); | |||
return SUCCESS; | |||
} | |||
@@ -30,7 +30,7 @@ class ModelExecutor : public Executor { | |||
/// @param [in] options user config params | |||
/// @return Status result of function | |||
/// | |||
Status Initialize(const map<string, string> &options); | |||
Status Initialize(const map<string, string> &options, uint64_t session_id); | |||
/// | |||
/// @ingroup ge | |||
@@ -120,6 +120,7 @@ class ModelExecutor : public Executor { | |||
bool init_flag_{false}; | |||
bool train_graph_flag_{false}; | |||
uint64_t session_id_{0}; | |||
GraphExecutor graph_executor_; | |||
std::mutex mutex_; | |||
@@ -38,7 +38,6 @@ | |||
#include "graph/common/ge_call_wrapper.h" | |||
#include "graph/ge_context.h" | |||
#include "graph/ge_global_options.h" | |||
#include "graph/load/model_manager/model_manager.h" | |||
#include "graph/manager/graph_mem_manager.h" | |||
#include "graph/manager/host_mem_manager.h" | |||
#include "graph/manager/graph_var_manager.h" | |||
@@ -160,18 +159,6 @@ Status GELib::InnerInitialize(const map<string, string> &options) { | |||
return initOpsBuilderStatus; | |||
} | |||
ErrorManager::GetInstance().SetStage(error_message::kInitialize, error_message::kOther); | |||
GELOGI("sessionManager initial."); | |||
GE_TIMESTAMP_START(SessionManagerInitialize); | |||
Status initSmStatus = sessionManager_.Initialize(options); | |||
GE_TIMESTAMP_END(SessionManagerInitialize, "InnerInitialize::SessionManagerInitialize"); | |||
if (initSmStatus != SUCCESS) { | |||
GELOGE(initSmStatus, "[Init][SessionManager] GE session manager initial failed."); | |||
REPORT_CALL_ERROR("E19999", "SessionManager initialize failed."); | |||
RollbackInit(); | |||
return initSmStatus; | |||
} | |||
GELOGI("Start to initialize HostCpuEngine"); | |||
GE_TIMESTAMP_START(HostCpuEngineInitialize); | |||
Status initHostCpuEngineStatus = HostCpuEngine::GetInstance().Initialize(); | |||
@@ -209,12 +196,6 @@ Status GELib::SystemInitialize(const map<string, string> &options) { | |||
// In train and infer, profiling is always needed. | |||
InitProfiling(this->options_); | |||
auto model_manager = ModelManager::GetInstance(); | |||
GE_CHECK_NOTNULL(model_manager); | |||
GE_IF_BOOL_EXEC(model_manager->EnableExceptionDump(options) != SUCCESS, | |||
REPORT_CALL_ERROR("E19999", "ModelManager EnableExceptionDump failed."); | |||
GELOGE(FAILED, "[Enable][ExceptionDump] failed."); | |||
return FAILED); | |||
// 1.`is_train_mode_` means case: train | |||
// 2.`(!is_train_mode_) && (options_.device_id != kDefaultDeviceIdForInfer)` means case: online infer | |||
// these two case with logical device id | |||
@@ -454,12 +435,6 @@ Status GELib::Finalize() { | |||
GELOGW("engineManager finalize failed"); | |||
final_state = mid_state; | |||
} | |||
GELOGI("sessionManager finalization."); | |||
mid_state = sessionManager_.Finalize(); | |||
if (mid_state != SUCCESS) { | |||
GELOGW("sessionManager finalize failed"); | |||
final_state = mid_state; | |||
} | |||
GELOGI("opsBuilderManager finalization."); | |||
mid_state = OpsKernelBuilderManager::Instance().Finalize(); | |||
@@ -539,9 +514,6 @@ void GELib::RollbackInit() { | |||
if (opsManager_.init_flag_) { | |||
(void)opsManager_.Finalize(); | |||
} | |||
if (sessionManager_.init_flag_) { | |||
(void)sessionManager_.Finalize(); | |||
} | |||
MemManager::Instance().Finalize(); | |||
HostMemManager::Instance().Finalize(); | |||
VarManagerPool::Instance().Destory(); | |||
@@ -22,7 +22,13 @@ | |||
#include <vector> | |||
#include "engine_manager/dnnengine_manager.h" | |||
#include "opskernel_manager/ops_kernel_manager.h" | |||
#include "session/session_manager.h" | |||
#include "graph/tuning_utils.h" | |||
#include "graph/operator_factory.h" | |||
#include "graph/ge_local_context.h" | |||
#include "graph/debug/ge_attr_define.h" | |||
#include "graph/utils/graph_utils.h" | |||
#include "graph/utils/anchor_utils.h" | |||
#include "graph/manager/graph_var_manager.h" | |||
#include "framework/common/ge_inner_error_codes.h" | |||
#include "framework/common/ge_types.h" | |||
@@ -53,9 +59,6 @@ class GE_FUNC_VISIBILITY GELib { | |||
// get OpsKernelManager object | |||
OpsKernelManager &OpsKernelManagerObj() { return opsManager_; } | |||
// get SessionManager object | |||
SessionManager &SessionManagerObj() { return sessionManager_; } | |||
// get Initial flag | |||
bool InitFlag() const { return init_flag_; } | |||
@@ -90,7 +93,6 @@ class GE_FUNC_VISIBILITY GELib { | |||
DNNEngineManager engineManager_; | |||
OpsKernelManager opsManager_; | |||
SessionManager sessionManager_; | |||
std::mutex status_mutex_; | |||
bool init_flag_ = false; | |||
Options options_; | |||
@@ -30,7 +30,6 @@ | |||
#include "graph/ge_global_options.h" | |||
#include "graph/ge_local_context.h" | |||
#include "graph/common/local_context.h" | |||
#include "graph/load/model_manager/model_manager.h" | |||
#include "graph/manager/graph_var_manager.h" | |||
#include "graph/manager/graph_mem_manager.h" | |||
#include "graph/utils/tensor_adapter.h" | |||
@@ -169,7 +168,6 @@ Status InnerSession::Finalize() { | |||
REPORT_CALL_ERROR("E19999", "GraphManager Finalize failed, InnerSession:%lu.", session_id_); | |||
} | |||
ModelManager::GetInstance()->DestroyAicpuSession(session_id_); | |||
init_flag_ = false; | |||
// release var memory | |||
GELOGI("VarManager free var memory."); | |||
@@ -189,7 +187,7 @@ Status InnerSession::Finalize() { | |||
} | |||
Status InnerSession::InnerInitialize() { | |||
Status ret = model_executor_.Initialize(options_); | |||
Status ret = model_executor_.Initialize(options_, session_id_); | |||
if (ret != SUCCESS) { | |||
GELOGE(ret, "[Init][GraphExecutor] failed, InnerSession:%lu.", session_id_); | |||
REPORT_CALL_ERROR("E19999", "GraphExecutor initialize failed, InnerSession:%lu.", session_id_); | |||
@@ -20,7 +20,6 @@ | |||
#include "common/ge/ge_util.h" | |||
#include "framework/common/debug/ge_log.h" | |||
#include "graph/ge_context.h" | |||
#include "graph/load/model_manager/model_manager.h" | |||
#include "graph/manager/util/rt_context_util.h" | |||
using std::map; | |||
@@ -105,10 +104,6 @@ Status SessionManager::DestroySession(SessionId session_id) { | |||
return GE_SESSION_NOT_EXIST; | |||
} | |||
if (ModelManager::GetInstance() != nullptr) { | |||
ModelManager::GetInstance()->DestroyAicpuSession(session_id); | |||
} | |||
// Unified destruct rt_context | |||
RtContextUtil::GetInstance().DestroyRtContexts(session_id); | |||
@@ -31,9 +31,26 @@ namespace ge { | |||
using SessionPtr = std::shared_ptr<InnerSession>; | |||
class SessionManager { | |||
friend class GELib; | |||
public: | |||
SessionManager() = default; | |||
~SessionManager() = default; | |||
/// | |||
/// @ingroup ge_session | |||
/// @brief initialize session manager | |||
/// @param [in] options session manager config options | |||
/// @return Status result of function | |||
/// | |||
Status Initialize(const std::map<std::string, std::string> &options); | |||
/// | |||
/// @ingroup ge_session | |||
/// @brief finalize session manager | |||
/// @return Status result of function | |||
/// | |||
Status Finalize(); | |||
/// | |||
/// @ingroup ge_session | |||
/// @brief create session | |||
@@ -181,25 +198,6 @@ class SessionManager { | |||
bool IsGraphNeedRebuild(SessionId session_id, uint32_t graph_id); | |||
private: | |||
SessionManager() = default; | |||
~SessionManager() = default; | |||
/// | |||
/// @ingroup ge_session | |||
/// @brief initialize session manager | |||
/// @param [in] options session manager config options | |||
/// @return Status result of function | |||
/// | |||
Status Initialize(const std::map<std::string, std::string> &options); | |||
/// | |||
/// @ingroup ge_session | |||
/// @brief finalize session manager | |||
/// @return Status result of function | |||
/// | |||
Status Finalize(); | |||
bool HasSession(SessionId session_id); | |||
Status GetNextSessionId(SessionId &next_session_id); | |||