|
|
@@ -54,46 +54,6 @@ PyObject *GetParamDefaultInputTensor(const AnfNodePtr &node) { |
|
|
return py_param.ptr(); |
|
|
return py_param.ptr(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void GetSummaryNodes(const KernelGraph *graph, std::unordered_map<std::string, std::pair<AnfNodePtr, int>> *summary) { |
|
|
|
|
|
MS_LOG(DEBUG) << "Update summary Start"; |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(graph); |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(summary); |
|
|
|
|
|
summary->clear(); |
|
|
|
|
|
auto apply_list = TopoSort(graph->get_return()); |
|
|
|
|
|
for (auto &n : apply_list) { |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(n); |
|
|
|
|
|
if (IsPrimitiveCNode(n, prim::kPrimScalarSummary) || IsPrimitiveCNode(n, prim::kPrimTensorSummary) || |
|
|
|
|
|
IsPrimitiveCNode(n, prim::kPrimImageSummary) || IsPrimitiveCNode(n, prim::kPrimHistogramSummary)) { |
|
|
|
|
|
auto cnode = n->cast<CNodePtr>(); |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(cnode); |
|
|
|
|
|
if (cnode->inputs().size() <= kSummaryGetItem) { |
|
|
|
|
|
MS_LOG(EXCEPTION) << "the node Summary should have 2 inputs at least!"; |
|
|
|
|
|
} |
|
|
|
|
|
auto node = cnode->input(kSummaryGetItem); |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(node); |
|
|
|
|
|
auto item_with_index = AnfAlgo::VisitKernelWithReturnType(node, 0); |
|
|
|
|
|
if (!AnfAlgo::IsRealKernel(item_with_index.first)) { |
|
|
|
|
|
MS_LOG(EXCEPTION) << "Unexpected node:" << item_with_index.first->DebugString(); |
|
|
|
|
|
} |
|
|
|
|
|
(*summary)[n->fullname_with_scope()] = item_with_index; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
MS_LOG(DEBUG) << "Update summary end size: " << (*summary).size(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool ExistSummaryNode(const KernelGraph *graph) { |
|
|
|
|
|
auto ret = graph->get_return(); |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(ret); |
|
|
|
|
|
auto all_nodes = DeepLinkedGraphSearch(ret); |
|
|
|
|
|
for (auto &n : all_nodes) { |
|
|
|
|
|
if (IsPrimitiveCNode(n, prim::kPrimScalarSummary) || IsPrimitiveCNode(n, prim::kPrimTensorSummary) || |
|
|
|
|
|
IsPrimitiveCNode(n, prim::kPrimImageSummary) || IsPrimitiveCNode(n, prim::kPrimHistogramSummary)) { |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
BaseRef CreateOneTensor(const AnfNodePtr &node, size_t output_index, const KernelGraph &graph, |
|
|
BaseRef CreateOneTensor(const AnfNodePtr &node, size_t output_index, const KernelGraph &graph, |
|
|
const std::vector<tensor::TensorPtr> &input_tensors) { |
|
|
const std::vector<tensor::TensorPtr> &input_tensors) { |
|
|
MS_EXCEPTION_IF_NULL(node); |
|
|
MS_EXCEPTION_IF_NULL(node); |
|
|
@@ -742,17 +702,44 @@ void SessionBasic::Reorder(std::vector<CNodePtr> *node_list) { |
|
|
(void)std::copy(all_opt_list.begin(), all_opt_list.end(), std::back_inserter(*node_list)); |
|
|
(void)std::copy(all_opt_list.begin(), all_opt_list.end(), std::back_inserter(*node_list)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void SessionBasic::GetSummaryNodes(const KernelGraph *graph, |
|
|
|
|
|
std::unordered_map<std::string, std::pair<AnfNodePtr, int>> *summary) { |
|
|
|
|
|
MS_LOG(DEBUG) << "Update summary Start"; |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(graph); |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(summary); |
|
|
|
|
|
auto apply_list = TopoSort(graph->get_return()); |
|
|
|
|
|
for (auto &n : apply_list) { |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(n); |
|
|
|
|
|
if (IsPrimitiveCNode(n, prim::kPrimScalarSummary) || IsPrimitiveCNode(n, prim::kPrimTensorSummary) || |
|
|
|
|
|
IsPrimitiveCNode(n, prim::kPrimImageSummary) || IsPrimitiveCNode(n, prim::kPrimHistogramSummary)) { |
|
|
|
|
|
auto cnode = n->cast<CNodePtr>(); |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(cnode); |
|
|
|
|
|
if (cnode->inputs().size() <= kSummaryGetItem) { |
|
|
|
|
|
MS_LOG(EXCEPTION) << "the node Summary should have 2 inputs at least!"; |
|
|
|
|
|
} |
|
|
|
|
|
auto node = cnode->input(kSummaryGetItem); |
|
|
|
|
|
MS_EXCEPTION_IF_NULL(node); |
|
|
|
|
|
auto item_with_index = AnfAlgo::VisitKernelWithReturnType(node, 0); |
|
|
|
|
|
if (!AnfAlgo::IsRealKernel(item_with_index.first)) { |
|
|
|
|
|
MS_LOG(EXCEPTION) << "Unexpected node:" << item_with_index.first->DebugString(); |
|
|
|
|
|
} |
|
|
|
|
|
(*summary)[n->fullname_with_scope()] = item_with_index; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
MS_LOG(DEBUG) << "Update summary end size: " << (*summary).size(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void SessionBasic::Summary(KernelGraph *graph) { |
|
|
void SessionBasic::Summary(KernelGraph *graph) { |
|
|
if (summary_callback_ == nullptr) { |
|
|
if (summary_callback_ == nullptr) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
MS_EXCEPTION_IF_NULL(graph); |
|
|
MS_EXCEPTION_IF_NULL(graph); |
|
|
bool exist_summary = ExistSummaryNode(graph); |
|
|
|
|
|
if (!exist_summary) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
std::unordered_map<std::string, std::pair<AnfNodePtr, int>> summary_outputs; |
|
|
std::unordered_map<std::string, std::pair<AnfNodePtr, int>> summary_outputs; |
|
|
GetSummaryNodes(graph, &summary_outputs); |
|
|
GetSummaryNodes(graph, &summary_outputs); |
|
|
|
|
|
// do not exist summary node |
|
|
|
|
|
if (summary_outputs.empty()) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
std::map<std::string, tensor::TensorPtr> params_list; |
|
|
std::map<std::string, tensor::TensorPtr> params_list; |
|
|
// fetch outputs apply kernel in session & run callback functions |
|
|
// fetch outputs apply kernel in session & run callback functions |
|
|
for (auto &output_item : summary_outputs) { |
|
|
for (auto &output_item : summary_outputs) { |
|
|
|