From df425aa02795d8121f6e79cbd80fe46d47aaf569 Mon Sep 17 00:00:00 2001 From: Parastoo Ashtari Date: Mon, 12 Jul 2021 15:48:43 -0400 Subject: [PATCH] fixed core dump issue in bert net --- mindspore/ccsrc/debug/debugger/debugger.cc | 24 +++++++++++++++++-- mindspore/ccsrc/debug/debugger/debugger.h | 2 ++ .../runtime/framework/actor/debug_actor.cc | 9 +++++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/mindspore/ccsrc/debug/debugger/debugger.cc b/mindspore/ccsrc/debug/debugger/debugger.cc index 79776a8c8d6..613a11c43d6 100644 --- a/mindspore/ccsrc/debug/debugger/debugger.cc +++ b/mindspore/ccsrc/debug/debugger/debugger.cc @@ -622,6 +622,20 @@ void Debugger::CheckDatasetGraph() { is_dataset_graph_ = false; } +bool Debugger::CheckDatasetGraph(const KernelGraphPtr &graph_ptr) { + const auto &nodes = graph_ptr->execution_order(); + for (const auto &node : nodes) { + auto node_name = AnfAlgo::GetCNodeName(node); + MS_LOG(INFO) << "node: " << GetKernelNodeName(node); + if (node_name == "GetNext" || node_name == "InitDataSetQueue") { + MS_LOG(INFO) << "Not enabling debugger for graph " << graph_ptr->graph_id() << ": found dataset graph node " + << node_name; + return true; + } + } + return false; +} + GraphProto Debugger::GetGraphProto(const KernelGraphPtr &graph_ptr) const { // convert kernel graph to debugger modelproto ModelProto model = GetDebuggerFuncGraphProto(graph_ptr); @@ -1423,8 +1437,14 @@ void Debugger::UpdateStepNumGPU() { } void Debugger::ClearCurrentData() { - if (device_target_ == kGPUDevice && (debugger_enabled_ || device::KernelRuntime::DumpDataEnabledIteration())) - debug_services_->EmptyCurrentTensor(); + if ((device_target_ == kGPUDevice) && (debugger_enabled_ || device::KernelRuntime::DumpDataEnabledIteration())) { + if (debug_services_) { + debug_services_->EmptyCurrentTensor(); + + } else { + MS_LOG(ERROR) << "debug_services_ is nullptr"; + } + } } bool Debugger::TensorExistsInCurrent(const std::string &tensor_name) { return debug_services_->TensorExistsInCurrent(tensor_name); diff --git a/mindspore/ccsrc/debug/debugger/debugger.h b/mindspore/ccsrc/debug/debugger/debugger.h index c71afc129f8..9c58bc84f85 100644 --- a/mindspore/ccsrc/debug/debugger/debugger.h +++ b/mindspore/ccsrc/debug/debugger/debugger.h @@ -170,6 +170,8 @@ class Debugger : public std::enable_shared_from_this { // check if dump using debugger backend is enabled bool CheckDebuggerDumpEnabled() const; + bool CheckDatasetGraph(const KernelGraphPtr &graph_ptr); + private: // private constructor for singleton Debugger(); diff --git a/mindspore/ccsrc/runtime/framework/actor/debug_actor.cc b/mindspore/ccsrc/runtime/framework/actor/debug_actor.cc index f9e23452079..9aeeaecdeac 100644 --- a/mindspore/ccsrc/runtime/framework/actor/debug_actor.cc +++ b/mindspore/ccsrc/runtime/framework/actor/debug_actor.cc @@ -27,6 +27,7 @@ #include "debug/debugger/debugger_utils.h" #endif +using KernelGraph = mindspore::session::KernelGraph; namespace mindspore { namespace runtime { @@ -52,6 +53,14 @@ void DebugActor::Debug(const AnfNodePtr &node, const KernelLaunchInfo *launch_in } } else if (device_context->GetDeviceAddressType() == device::DeviceAddressType::kGPU) { #ifdef ENABLE_DEBUGGER + auto kernel_graph = std::dynamic_pointer_cast(cnode->func_graph()); + MS_EXCEPTION_IF_NULL(kernel_graph); + // debugger is not enabled for dataset graphs + if (Debugger::GetInstance()->CheckDatasetGraph(kernel_graph)) { + // Call back to the from actor to process after debug finished. + Async(*from_aid, &DebugAwareActor::OnDebugFinish, op_context); + return; + } auto debugger = Debugger::GetInstance(); if (debugger) { std::string kernel_name = cnode->fullname_with_scope();