forked from mindspore-Ecosystem/mindspore
review code second
This commit is contained in:
parent
927278be44
commit
3ea75e0d98
|
@ -162,7 +162,7 @@ void KernelRuntime::RunOpAssignMemory(const std::vector<tensor::TensorPtr> &inpu
|
|||
UpdateRefNodeOutputMem(graph);
|
||||
}
|
||||
|
||||
void KernelRuntime::RunOpClearMemory(session::KernelGraph *graph) {
|
||||
void KernelRuntime::RunOpClearMemory(const session::KernelGraph *graph) {
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
// clear input parameter memory resource
|
||||
for (const auto &input_node : graph->inputs()) {
|
||||
|
|
|
@ -54,7 +54,7 @@ class KernelRuntime {
|
|||
virtual bool Init() = 0;
|
||||
virtual void AssignMemory(session::KernelGraph *graph);
|
||||
void RunOpAssignMemory(const std::vector<tensor::TensorPtr> &input_tensors, session::KernelGraph *graph);
|
||||
void RunOpClearMemory(session::KernelGraph *graph);
|
||||
void RunOpClearMemory(const session::KernelGraph *graph);
|
||||
virtual bool Run(session::KernelGraph *graph);
|
||||
virtual bool DumpData(session::KernelGraph *graph);
|
||||
virtual bool LoadData(session::KernelGraph *graph, Debugger *debugger);
|
||||
|
|
|
@ -303,7 +303,7 @@ size_t AnfRuntimeAlgorithm::GetInputTensorNum(const AnfNodePtr &node) {
|
|||
MS_EXCEPTION_IF_NULL(cnode);
|
||||
size_t input_num = cnode->inputs().size();
|
||||
if (input_num == 0) {
|
||||
MS_LOG(EXCEPTION) << "cnode inputs size can't be zero";
|
||||
MS_LOG(EXCEPTION) << "Cnode inputs size can't be zero";
|
||||
}
|
||||
// exclude intputs[0],which is value_node storing attr,inputs left are real input
|
||||
return input_num - 1;
|
||||
|
@ -994,10 +994,10 @@ FuncGraphPtr AnfRuntimeAlgorithm::GetValueNodeFuncGraph(const AnfNodePtr &node)
|
|||
}
|
||||
|
||||
std::vector<KernelGraphPtr> AnfRuntimeAlgorithm::GetCallNodeKernelGraph(const CNodePtr &call_node) {
|
||||
if (!AnfAlgo::CheckPrimitiveType(call_node, std::make_shared<Primitive>("call"))) {
|
||||
MS_LOG(EXCEPTION) << "anf node: " << call_node->DebugString() << "is not a call node.";
|
||||
}
|
||||
MS_EXCEPTION_IF_NULL(call_node);
|
||||
if (!AnfAlgo::CheckPrimitiveType(call_node, std::make_shared<Primitive>("call"))) {
|
||||
MS_LOG(EXCEPTION) << "Anf node: " << call_node->DebugString() << "is not a call node.";
|
||||
}
|
||||
auto input1 = call_node->input(1);
|
||||
MS_EXCEPTION_IF_NULL(input1);
|
||||
if (input1->isa<ValueNode>()) {
|
||||
|
@ -1009,7 +1009,7 @@ std::vector<KernelGraphPtr> AnfRuntimeAlgorithm::GetCallNodeKernelGraph(const CN
|
|||
} else if (input1->isa<CNode>() && AnfAlgo::CheckPrimitiveType(input1, prim::kPrimSwitch)) {
|
||||
auto switch_node = input1->cast<CNodePtr>();
|
||||
MS_EXCEPTION_IF_NULL(switch_node);
|
||||
auto get_switch_kernel_graph = [&](size_t input_index) -> KernelGraphPtr {
|
||||
auto get_switch_kernel_graph = [switch_node](size_t input_index) -> KernelGraphPtr {
|
||||
auto partial = switch_node->input(input_index);
|
||||
MS_EXCEPTION_IF_NULL(partial);
|
||||
auto partial_cnode = partial->cast<CNodePtr>();
|
||||
|
@ -1031,7 +1031,7 @@ std::vector<KernelGraphPtr> AnfRuntimeAlgorithm::GetCallNodeKernelGraph(const CN
|
|||
bool AnfRuntimeAlgorithm::IsSwitchCall(const CNodePtr &call_node) {
|
||||
MS_EXCEPTION_IF_NULL(call_node);
|
||||
if (!CheckPrimitiveType(call_node, prim::kPrimCall)) {
|
||||
MS_LOG(EXCEPTION) << "call node should be a 'call', but is a " << call_node->DebugString();
|
||||
MS_LOG(EXCEPTION) << "Call node should be a 'call', but is a " << call_node->DebugString();
|
||||
}
|
||||
auto input1 = call_node->input(1);
|
||||
if (input1->isa<ValueNode>()) {
|
||||
|
|
|
@ -14,9 +14,9 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "session/ascend_control_parser.h"
|
||||
#include <utility>
|
||||
#include <memory>
|
||||
#include "session/ascend_control_parser.h"
|
||||
#include "session/anf_runtime_algorithm.h"
|
||||
#include "utils/union_find_set.h"
|
||||
|
||||
|
@ -96,7 +96,7 @@ static void RecursiveReplaceNode(NotNull<KernelGraphPtr> kg, NotNull<AnfNodePtr>
|
|||
const std::set<AnfNodePtr> ¶meter_reuse_set,
|
||||
const NotNull<std::set<KernelGraphPtr> *> memo) {
|
||||
if (parameter_reuse_set.empty()) {
|
||||
MS_LOG(EXCEPTION) << "parameter_reuse_set is empty.";
|
||||
MS_LOG(EXCEPTION) << "Parameter_reuse_set is empty.";
|
||||
}
|
||||
if (memo->find(kg.get()) != memo->end()) {
|
||||
return;
|
||||
|
@ -155,6 +155,7 @@ void AscendControlParser::LinkGraph(NotNull<KernelGraphPtr> kg) {
|
|||
(void)ProcessKernelGraph(kg, nullptr, nullptr, NOT_NULL(&memo));
|
||||
std::map<uint32_t, KernelGraphPtr> graph_id_map;
|
||||
for (auto &g : memo) {
|
||||
MS_EXCEPTION_IF_NULL(g);
|
||||
if (graph_id_map.find(g->graph_id()) != graph_id_map.end()) {
|
||||
MS_LOG(EXCEPTION) << "Two graph has same graph id " << g->graph_id()
|
||||
<< ", graph: " << graph_id_map[g->graph_id()]->ToString() << " " << g->ToString();
|
||||
|
@ -206,6 +207,20 @@ void AscendControlParser::ChildGraphDataAssign(const std::map<uint32_t, KernelGr
|
|||
}
|
||||
}
|
||||
|
||||
NotNull<CNodePtr> AscendControlParser::GetStartLabel(NotNull<KernelGraphPtr> kg, const CNodePtr &last_node,
|
||||
const CNodePtr &last_label) {
|
||||
CNodePtr start_label;
|
||||
if (last_node != nullptr && last_label != nullptr) {
|
||||
start_label = kg->NewCNode({std::make_shared<ValueNode>(std::make_shared<Primitive>(kLabelSetOpName))});
|
||||
MS_LOG(INFO) << "Insert start label " << start_label->DebugString() << " to " << kg->ToString();
|
||||
kg->set_start_label(start_label);
|
||||
} else {
|
||||
// no goto node will jump to start label of root graph, so return a fake label
|
||||
start_label = std::make_shared<CNode>(std::vector<AnfNodePtr>(), FuncGraphPtr(nullptr));
|
||||
}
|
||||
return NOT_NULL(start_label);
|
||||
}
|
||||
|
||||
NotNull<CNodePtr> AscendControlParser::ProcessKernelGraph(NotNull<KernelGraphPtr> kg, const CNodePtr &last_node,
|
||||
const CNodePtr &last_label,
|
||||
const NotNull<std::set<KernelGraphPtr> *> memo) {
|
||||
|
@ -225,28 +240,22 @@ NotNull<CNodePtr> AscendControlParser::ProcessKernelGraph(NotNull<KernelGraphPtr
|
|||
kg->SetExecOrderByDefault();
|
||||
const std::vector<CNodePtr> &nodes = kg->execution_order();
|
||||
// 4. insert first_label
|
||||
CNodePtr start_label;
|
||||
if (last_node != nullptr && last_label != nullptr) {
|
||||
start_label = kg->NewCNode({std::make_shared<ValueNode>(std::make_shared<Primitive>(kLabelSetOpName))});
|
||||
MS_LOG(INFO) << "Insert start label " << start_label->DebugString() << " to " << kg->ToString();
|
||||
kg->set_start_label(start_label);
|
||||
} else {
|
||||
// no goto node will jump to start label of root graph, so return a fake label
|
||||
start_label = std::make_shared<CNode>(std::vector<AnfNodePtr>(), FuncGraphPtr(nullptr));
|
||||
}
|
||||
CNodePtr start_label = GetStartLabel(kg, last_node, last_label);
|
||||
|
||||
// 5. traverse
|
||||
for (size_t i = 0; i < nodes.size(); ++i) {
|
||||
auto &cnode = nodes[i];
|
||||
MS_EXCEPTION_IF_NULL(cnode);
|
||||
if (cnode->size() < kCNodePrim + 1) {
|
||||
MS_LOG(EXCEPTION) << "Inputs of apply node is empty";
|
||||
}
|
||||
AnfNodePtr fn = cnode->input(kAnfPrimitiveIndex);
|
||||
if (!IsPrimitive(fn, prim::kPrimCall) || cnode->size() < kCNodeCallArg + 1) {
|
||||
MS_LOG(DEBUG) << "continue node " << cnode->DebugString();
|
||||
MS_LOG(DEBUG) << "Continue node " << cnode->DebugString();
|
||||
continue;
|
||||
}
|
||||
AnfNodePtr arg = cnode->input(kFirstDataInputIndex);
|
||||
MS_EXCEPTION_IF_NULL(arg);
|
||||
if (IsValueNode<KernelGraph>(arg)) {
|
||||
RecurseCall(kg, NOT_NULL(cnode), GetNextRealKernel(nodes, i + 1), memo);
|
||||
} else if (!arg->isa<CNode>()) {
|
||||
|
@ -293,6 +302,7 @@ void AscendControlParser::LinkParentGraph(NotNull<KernelGraphPtr> kg, const CNod
|
|||
if (from_graph_call_node != nullptr && last_label != nullptr) {
|
||||
auto label_goto =
|
||||
kg->NewCNode({std::make_shared<ValueNode>(std::make_shared<Primitive>(kLabelGotoOpName)), last_label});
|
||||
MS_EXCEPTION_IF_NULL(label_goto);
|
||||
MS_LOG(INFO) << "Insert end goto " << label_goto->DebugString() << " to " << kg->ToString();
|
||||
kg->set_end_goto(label_goto);
|
||||
}
|
||||
|
@ -342,6 +352,7 @@ void AscendControlParser::RecurseSwitch(NotNull<KernelGraphPtr> kg, NotNull<CNod
|
|||
}
|
||||
// 1 return label
|
||||
auto back_label = kg->NewCNode({std::make_shared<ValueNode>(std::make_shared<Primitive>(kLabelSetOpName))});
|
||||
MS_EXCEPTION_IF_NULL(back_label);
|
||||
MS_LOG(INFO) << "Insert back label " << back_label->DebugString() << " to " << kg->ToString() << " switch node "
|
||||
<< cur_node->DebugString();
|
||||
// 2 add depend relationship
|
||||
|
@ -351,6 +362,9 @@ void AscendControlParser::RecurseSwitch(NotNull<KernelGraphPtr> kg, NotNull<CNod
|
|||
}
|
||||
// 3 recurse sub graph
|
||||
const std::vector<AnfNodePtr> &origin_switch_inputs = cur_node->inputs();
|
||||
if (kCNodeSwitchCond >= origin_switch_inputs.size()) {
|
||||
MS_LOG(EXCEPTION) << "The size of origin_switch_inputs is not more than " << kCNodeSwitchCond;
|
||||
}
|
||||
std::vector<AnfNodePtr> new_switch_inputs = {
|
||||
std::make_shared<ValueNode>(std::make_shared<Primitive>(kLabelSwitchOpName)),
|
||||
origin_switch_inputs[kCNodeSwitchCond]};
|
||||
|
@ -538,6 +552,8 @@ bool AscendControlParser::CheckLabelIndex(uint32_t order_index, uint32_t label_i
|
|||
auto start_label_set = child_graph->get_start_label();
|
||||
uint32_t start_label_set_index = AnfAlgo::GetNodeAttr<uint32_t>(start_label_set, kAttrLabelIndex);
|
||||
if (label_index != start_label_set_index) {
|
||||
MS_EXCEPTION_IF_NULL(cur_label);
|
||||
MS_EXCEPTION_IF_NULL(start_label_set);
|
||||
MS_LOG(WARNING) << cur_label->DebugString() << " index " << label_index << " but " << start_label_set->DebugString()
|
||||
<< " index " << start_label_set_index << " current child graph order : " << order_index;
|
||||
return false;
|
||||
|
@ -563,7 +579,7 @@ void AscendControlParser::UpdateChildGraphOrder(NotNull<KernelGraphPtr> kg) {
|
|||
}
|
||||
}
|
||||
for (size_t i = 0; i < child_graph_order.size(); i++) {
|
||||
MS_LOG(INFO) << "child graph[" << i << "][id:" << child_graph_order[i]->graph_id() << "]";
|
||||
MS_LOG(INFO) << "Child graph[" << i << "][id:" << child_graph_order[i]->graph_id() << "]";
|
||||
}
|
||||
kg->set_child_graph_order(child_graph_order);
|
||||
}
|
||||
|
|
|
@ -38,6 +38,8 @@ class AscendControlParser {
|
|||
static void UpdateChildGraphOrder(NotNull<KernelGraphPtr> kg);
|
||||
|
||||
private:
|
||||
static NotNull<CNodePtr> GetStartLabel(NotNull<KernelGraphPtr> kg, const CNodePtr &last_node,
|
||||
const CNodePtr &last_label);
|
||||
static NotNull<CNodePtr> ProcessKernelGraph(NotNull<KernelGraphPtr> kg, const CNodePtr &last_node,
|
||||
const CNodePtr &last_label,
|
||||
const NotNull<std::set<KernelGraphPtr> *> memo);
|
||||
|
|
|
@ -139,16 +139,16 @@ std::vector<BaseRef> GetRealArgs(const KernelGraphPtr graph, const VectorRef &ar
|
|||
}
|
||||
}
|
||||
if (graph_inputs.size() != valid_inputs.size()) {
|
||||
MS_LOG(EXCEPTION) << "graph_inputs.size(): " << graph_inputs.size()
|
||||
MS_LOG(EXCEPTION) << "Graph_inputs.size(): " << graph_inputs.size()
|
||||
<< ", valid_inputs.size(): " << valid_inputs.size() << " not equal";
|
||||
}
|
||||
if (real_args_size != graph_inputs.size()) {
|
||||
for (size_t j = 0; j < valid_inputs.size(); j++) {
|
||||
if (valid_inputs[j]) {
|
||||
MS_LOG(INFO) << "index: " << j << ", nodes: " << graph_inputs[j]->DebugString();
|
||||
MS_LOG(INFO) << "Index: " << j << ", nodes: " << graph_inputs[j]->DebugString();
|
||||
}
|
||||
}
|
||||
MS_LOG(WARNING) << "real_args_size: " << real_args_size << ", graph_inputs.size(): " << graph_inputs.size()
|
||||
MS_LOG(WARNING) << "Real_args_size: " << real_args_size << ", graph_inputs.size(): " << graph_inputs.size()
|
||||
<< " not equal";
|
||||
}
|
||||
return real_args;
|
||||
|
@ -158,7 +158,7 @@ std::vector<CNodePtr> GetCNodes(const std::vector<AnfNodePtr> &anf_nodes) {
|
|||
std::vector<CNodePtr> cnodes = {};
|
||||
size_t i = 0;
|
||||
for (const auto &anf : anf_nodes) {
|
||||
MS_LOG(INFO) << "apply_list[" << i++ << "] = " << anf->DebugString();
|
||||
MS_LOG(INFO) << "Apply_list[" << i++ << "] = " << anf->DebugString();
|
||||
MS_EXCEPTION_IF_NULL(anf);
|
||||
if (anf->isa<CNode>()) {
|
||||
cnodes.push_back(anf->cast<CNodePtr>());
|
||||
|
@ -276,7 +276,7 @@ static void RecurseToUpdateCallRealInput(NotNull<KernelGraphPtr> graph,
|
|||
} // namespace
|
||||
|
||||
GraphId AscendSession::CompileGraph(const AnfNodePtrList &lst, const AnfNodePtrList &outputs) {
|
||||
MS_LOG(INFO) << "start";
|
||||
MS_LOG(INFO) << "Start";
|
||||
// construct graph, if successfully, graph_sum_ + 1
|
||||
auto graph = ConstructKernelGraph(lst, outputs);
|
||||
auto graph_id = graph->graph_id();
|
||||
|
@ -285,7 +285,7 @@ GraphId AscendSession::CompileGraph(const AnfNodePtrList &lst, const AnfNodePtrL
|
|||
}
|
||||
|
||||
GraphId AscendSession::CompileGraph(NotNull<FuncGraphPtr> func_graph) {
|
||||
MS_LOG(INFO) << "start";
|
||||
MS_LOG(INFO) << "Start";
|
||||
std::vector<KernelGraphPtr> all_graphs;
|
||||
auto root_graph = ConstructKernelGraph(func_graph, &all_graphs);
|
||||
BackendOptimization(all_graphs);
|
||||
|
@ -338,7 +338,7 @@ void AscendSession::SetFinalGraphSummaryFlag(const std::shared_ptr<KernelGraph>
|
|||
}
|
||||
|
||||
void AscendSession::BuildGraph(GraphId graph_id) {
|
||||
MS_LOG(INFO) << "start";
|
||||
MS_LOG(INFO) << "Start";
|
||||
auto graph = GetGraph(graph_id);
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
// resource initialize
|
||||
|
@ -369,6 +369,7 @@ void AscendSession::BuildGraph(GraphId graph_id) {
|
|||
MergeGraphExecOrder();
|
||||
} else {
|
||||
auto single_graph = GetGraph(graph_id);
|
||||
MS_EXCEPTION_IF_NULL(single_graph);
|
||||
CompileChildGraph(single_graph);
|
||||
// set the distinction label of single graph
|
||||
single_graph->set_stream_distinction_label(graph_id);
|
||||
|
@ -397,7 +398,7 @@ void AscendSession::BuildGraph(GraphId graph_id) {
|
|||
// sync the inital const tensor to device
|
||||
SyncInitialTenosrToDevice();
|
||||
ExportChildGraphs(graph_id);
|
||||
MS_LOG(INFO) << "end";
|
||||
MS_LOG(INFO) << "End";
|
||||
}
|
||||
|
||||
void AscendSession::CompileChildGraph(const KernelGraphPtr &child_graph) {
|
||||
|
@ -439,7 +440,7 @@ void AscendSession::CompileChildGraph(const KernelGraphPtr &child_graph) {
|
|||
|
||||
void AscendSession::RunGraph(const GraphId &graph_id, const std::vector<tensor::TensorPtr> &inputs,
|
||||
VectorRef *const outputs) {
|
||||
MS_LOG(INFO) << "start";
|
||||
MS_LOG(INFO) << "Start";
|
||||
auto kernel_graph = GetGraph(graph_id);
|
||||
MS_EXCEPTION_IF_NULL(kernel_graph);
|
||||
// if none of child graph and no anf output exists
|
||||
|
@ -499,7 +500,7 @@ void AscendSession::RunOpExecTask(const std::shared_ptr<KernelGraph> &kernel_gra
|
|||
MS_EXCEPTION_IF_NULL(runtime_instance);
|
||||
bool ret_ok = runtime_instance->LaunchKernel(kernel_graph.get());
|
||||
if (!ret_ok) {
|
||||
MS_LOG(EXCEPTION) << "run task error!";
|
||||
MS_LOG(EXCEPTION) << "Run task error!";
|
||||
}
|
||||
MS_LOG(INFO) << "Finish!";
|
||||
}
|
||||
|
@ -696,7 +697,7 @@ void AscendSession::RunOpMemoryAlloc(const std::vector<tensor::TensorPtr> &input
|
|||
MS_LOG(INFO) << "Finish!";
|
||||
}
|
||||
|
||||
void AscendSession::RunOpMemoryClear(KernelGraph *kernel_graph) const {
|
||||
void AscendSession::RunOpMemoryClear(const KernelGraph *kernel_graph) const {
|
||||
MS_EXCEPTION_IF_NULL(kernel_graph);
|
||||
auto runtime_instance = device::KernelRuntimeManager::Instance().GetKernelRuntime(kAscendDevice, device_id_);
|
||||
MS_EXCEPTION_IF_NULL(runtime_instance);
|
||||
|
@ -796,6 +797,7 @@ void AscendSession::LoadTensor(const std::shared_ptr<KernelGraph> &kernel_graph)
|
|||
GraphId AscendSession::SetFinalGraphInput(const std::vector<AnfNodePtr> &args) {
|
||||
MS_LOG(INFO) << "Start! Args size " << args.size();
|
||||
auto final_graph = NewKernelGraph();
|
||||
MS_EXCEPTION_IF_NULL(final_graph);
|
||||
final_graph_id_ = final_graph->graph_id();
|
||||
MS_LOG(INFO) << "Create a new final graph" << final_graph_id_ << " success";
|
||||
// init private variables and bind them with final_graph_id
|
||||
|
@ -826,7 +828,7 @@ GraphId AscendSession::SetFinalGraphInput(const std::vector<AnfNodePtr> &args) {
|
|||
final_graph_inputs->push_back(parameter_backend);
|
||||
}
|
||||
MS_EXCEPTION_IF_NULL(parameter_backend);
|
||||
MS_LOG(INFO) << "parameter backend " << parameter_backend->DebugString() << " belong_graph_id "
|
||||
MS_LOG(INFO) << "Parameter backend " << parameter_backend->DebugString() << " belong_graph_id "
|
||||
<< AnfAlgo::GetGraphId(parameter_backend.get());
|
||||
}
|
||||
MS_LOG(INFO) << "End final_graph_id " << final_graph_id_;
|
||||
|
@ -842,7 +844,7 @@ void AscendSession::RecurseGetSummaryNodes(KernelGraph *graph,
|
|||
if (graph_order_iter == graph_execute_orders_.end()) {
|
||||
SessionBasic::GetSummaryNodes(graph);
|
||||
auto summary_nodes = graph->summary_nodes();
|
||||
(*summary).insert(summary_nodes.begin(), summary_nodes.end());
|
||||
summary->insert(summary_nodes.begin(), summary_nodes.end());
|
||||
return;
|
||||
}
|
||||
// for every child graph, find summary nodes
|
||||
|
@ -854,7 +856,7 @@ void AscendSession::RecurseGetSummaryNodes(KernelGraph *graph,
|
|||
}
|
||||
SessionBasic::GetSummaryNodes(child_graph.get());
|
||||
auto child_graph_summary = child_graph->summary_nodes();
|
||||
(*summary).insert(child_graph_summary.begin(), child_graph_summary.end());
|
||||
summary->insert(child_graph_summary.begin(), child_graph_summary.end());
|
||||
RecurseGetSummaryNodes(child_graph.get(), summary);
|
||||
}
|
||||
graph->set_summary_nodes(*summary);
|
||||
|
@ -941,6 +943,7 @@ void AscendSession::SetFinalGraphOutput(const ValuePtr &value) {
|
|||
MS_EXCEPTION_IF_NULL(final_graph);
|
||||
final_graph->set_output(final_graph->NewCNode({NewValueNode(prim::kPrimMakeTuple), value_node}));
|
||||
final_graph->set_executable(false);
|
||||
MS_EXCEPTION_IF_NULL(value);
|
||||
MS_LOG(INFO) << "Not anf output[" << value->ToString() << "]";
|
||||
}
|
||||
|
||||
|
@ -1047,6 +1050,7 @@ void AscendSession::CopyOutputOfIf(GraphId false_graph_id) {
|
|||
MS_LOG(INFO) << "The last graph of false branch is " << false_graph_id;
|
||||
// create fake output
|
||||
auto fake_output_graph = NewKernelGraph();
|
||||
MS_EXCEPTION_IF_NULL(fake_output_graph);
|
||||
graph_execute_order.push_back(fake_output_graph->graph_id());
|
||||
graph_order_type.push_back(COMMON_GRAPH);
|
||||
fake_output_graph->set_output(CreateFakeOutput(fake_output_graph->graph_id(), final_graph->output()));
|
||||
|
@ -1079,7 +1083,7 @@ void AscendSession::SwitchCompile(GraphId cond_graph_id, GraphId true_graph_id,
|
|||
auto cond_graph_index = ExecOrderOfChildGraph(final_graph_id_, cond_graph_id);
|
||||
auto &graph_order_type = GetGraphOrderType(final_graph_id_);
|
||||
if (cond_graph_index >= graph_order_type.size()) {
|
||||
MS_LOG(EXCEPTION) << "cond_graph_index " << cond_graph_index << " out of range " << graph_order_types_.size();
|
||||
MS_LOG(EXCEPTION) << "Cond_graph_index " << cond_graph_index << " out of range " << graph_order_types_.size();
|
||||
}
|
||||
graph_order_type[cond_graph_index] = CONDITION_GRAPH;
|
||||
// update distinction label of false graph,update before merge to sure the distinction
|
||||
|
@ -1156,7 +1160,7 @@ void AscendSession::InsertAllAssigns() {
|
|||
MS_EXCEPTION_IF_NULL(to_graph);
|
||||
std::vector<AnfNodePtr> graph_inputs = to_graph->inputs();
|
||||
if (input_idx >= graph_inputs.size()) {
|
||||
MS_LOG(EXCEPTION) << "input_index " << input_idx << " out of range size " << graph_inputs.size();
|
||||
MS_LOG(EXCEPTION) << "Input_index " << input_idx << " out of range size " << graph_inputs.size();
|
||||
}
|
||||
auto backend_parameter = graph_inputs[input_idx];
|
||||
assigns.emplace_back(std::pair<AnfNodePtr, AnfNodePtr>(front_anf, backend_parameter));
|
||||
|
@ -1180,7 +1184,7 @@ void AscendSession::InsertAllAssigns() {
|
|||
// insert active to graph
|
||||
void AscendSession::SetActive(GraphId from, GraphId to) {
|
||||
if (while_condition_graphs_.find(to) != while_condition_graphs_.end()) {
|
||||
MS_LOG(WARNING) << " to " << to << " has been exits in map,from " << from << ",exist from "
|
||||
MS_LOG(WARNING) << "To " << to << " has been exits in map,from " << from << ",exist from "
|
||||
<< while_condition_graphs_[to];
|
||||
return;
|
||||
}
|
||||
|
@ -1216,7 +1220,7 @@ void AscendSession::SetChildGraphParameter(const AnfNodePtr &front_anf, GraphId
|
|||
MS_EXCEPTION_IF_NULL(to_graph);
|
||||
std::vector<AnfNodePtr> graph_inputs = to_graph->inputs();
|
||||
if (input_idx >= graph_inputs.size()) {
|
||||
MS_LOG(EXCEPTION) << "input_index " << input_idx << " out of range size " << graph_inputs.size();
|
||||
MS_LOG(EXCEPTION) << "Input_index " << input_idx << " out of range size " << graph_inputs.size();
|
||||
}
|
||||
auto backend_parameter = graph_inputs[input_idx];
|
||||
MS_EXCEPTION_IF_NULL(backend_parameter);
|
||||
|
@ -1250,7 +1254,7 @@ void AscendSession::SetChildGraphParameter(const tensor::TensorPtr &front_tensor
|
|||
}
|
||||
|
||||
void AscendSession::UpdateGraphOrder(GraphId to_graph_id) {
|
||||
MS_LOG(INFO) << "to_graph_id " << to_graph_id;
|
||||
MS_LOG(INFO) << "To_graph_id " << to_graph_id;
|
||||
auto &graph_order = GetGraphOrder(final_graph_id_);
|
||||
auto &graph_type = GetGraphOrderType(final_graph_id_);
|
||||
for (size_t i = 0; i < graph_order.size(); i++) {
|
||||
|
@ -1268,6 +1272,8 @@ void AscendSession::UpdateGraphOrder(GraphId to_graph_id) {
|
|||
}
|
||||
|
||||
size_t AscendSession::SetChildGraphInput(const KernelGraphPtr &graph, const AnfNodePtr &node, size_t input_index) {
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
MS_EXCEPTION_IF_NULL(node);
|
||||
auto output_num = AnfAlgo::GetOutputTensorNum(node);
|
||||
if (output_num > 1 && !AnfAlgo::CheckPrimitiveType(node, prim::kPrimTupleGetItem)) {
|
||||
return input_index + output_num;
|
||||
|
@ -1282,6 +1288,7 @@ size_t AscendSession::SetChildGraphInput(const KernelGraphPtr &graph, const AnfN
|
|||
}
|
||||
|
||||
size_t AscendSession::SetChildGraphInput(const KernelGraphPtr &graph, const ValuePtr &value, size_t input_index) {
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
MS_EXCEPTION_IF_NULL(value);
|
||||
if (!value->isa<Tensor>()) {
|
||||
MS_LOG(EXCEPTION) << "Value Node should be a tensor, unexpected value: " << value->ToString();
|
||||
|
@ -1319,7 +1326,7 @@ void AscendSession::SetChildGraphInput(GraphId g, const VectorRef &args) {
|
|||
size_t input_index = 0;
|
||||
for (size_t i = 0; i < real_args.size(); i++) {
|
||||
if (input_index >= graph_inputs.size()) {
|
||||
MS_LOG(EXCEPTION) << "input_index " << input_index << " out of range size " << graph_inputs.size();
|
||||
MS_LOG(EXCEPTION) << "Input_index " << input_index << " out of range size " << graph_inputs.size();
|
||||
}
|
||||
auto &real_arg = real_args[i];
|
||||
if (utils::isa<AnfNodePtr>(real_arg)) {
|
||||
|
@ -1351,7 +1358,7 @@ GraphId AscendSession::GetGraphIdByNode(const AnfNodePtr &front_anf) const {
|
|||
}
|
||||
}
|
||||
MS_EXCEPTION_IF_NULL(front_anf);
|
||||
MS_LOG(DEBUG) << "front_anf " << front_anf->DebugString() << " is not exist in any graph";
|
||||
MS_LOG(DEBUG) << "Front_anf " << front_anf->DebugString() << " is not exist in any graph";
|
||||
return kInvalidGraphId;
|
||||
}
|
||||
|
||||
|
@ -1514,7 +1521,7 @@ void AscendSession::SyncInitialTenosrToDevice() {
|
|||
MS_EXCEPTION_IF_NULL(to_graph);
|
||||
std::vector<AnfNodePtr> graph_inputs = to_graph->inputs();
|
||||
if (input_idx >= graph_inputs.size()) {
|
||||
MS_LOG(EXCEPTION) << "input_index " << input_idx << " out of range size " << graph_inputs.size();
|
||||
MS_LOG(EXCEPTION) << "Input_index " << input_idx << " out of range size " << graph_inputs.size();
|
||||
}
|
||||
auto backend_parameter = graph_inputs[input_idx];
|
||||
// sync data from host to device
|
||||
|
@ -1548,6 +1555,7 @@ static void ConstructSplitedGraphOutput(const KernelGraphPtr &new_kernel_graph,
|
|||
new_kernel_graph->set_return(anf_node);
|
||||
}
|
||||
if (has_output_nodes.find(anf_node) == has_output_nodes.end()) {
|
||||
MS_EXCEPTION_IF_NULL(anf_node);
|
||||
MS_LOG(INFO) << "Output[" << output_idx++ << "]:" << anf_node->DebugString();
|
||||
make_tuple_inputs.push_back(anf_node);
|
||||
}
|
||||
|
@ -1560,7 +1568,7 @@ static void ConstructSplitedGraphOutput(const KernelGraphPtr &new_kernel_graph,
|
|||
std::vector<AnfNodePtr> AscendSession::ConstructSplitedGraph(const KernelGraphPtr &new_kernel_graph,
|
||||
const std::vector<CNodePtr> &list) {
|
||||
MS_EXCEPTION_IF_NULL(new_kernel_graph);
|
||||
MS_LOG(INFO) << "start contruct splited kernel graph:" << new_kernel_graph->graph_id();
|
||||
MS_LOG(INFO) << "Start contruct splited kernel graph:" << new_kernel_graph->graph_id();
|
||||
MS_LOG(INFO) << "Construct input of kernel graph:" << new_kernel_graph->graph_id();
|
||||
std::vector<AnfNodePtr> call_node_inputs;
|
||||
std::vector<AnfNodePtr> new_graph_inputs;
|
||||
|
@ -1604,7 +1612,7 @@ std::vector<AnfNodePtr> AscendSession::ConstructSplitedGraph(const KernelGraphPt
|
|||
|
||||
MS_LOG(INFO) << "Construct output of kernel graph:" << new_kernel_graph->graph_id();
|
||||
ConstructSplitedGraphOutput(new_kernel_graph, list);
|
||||
MS_LOG(INFO) << "end";
|
||||
MS_LOG(INFO) << "End";
|
||||
return call_node_inputs;
|
||||
}
|
||||
|
||||
|
@ -1699,7 +1707,7 @@ void AscendSession::SplitGraph(NotNull<KernelGraphPtr> graph, const std::set<Pri
|
|||
}
|
||||
AscendControlParser::UpdateChildGraphOrder(graph);
|
||||
UpdateRealInput(graph);
|
||||
MS_LOG(INFO) << "split graph[" << graph->graph_id() << "] end";
|
||||
MS_LOG(INFO) << "Split graph[" << graph->graph_id() << "] end";
|
||||
// recurse to split child graph
|
||||
}
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ class AscendSession : public SessionBasic {
|
|||
void BuildKernel(const std::shared_ptr<KernelGraph> &kernel_graph) const;
|
||||
void MemoryAlloc(KernelGraph *kernel_graph) const;
|
||||
void RunOpMemoryAlloc(const std::vector<tensor::TensorPtr> &input_tensors, KernelGraph *kernel_graph) const;
|
||||
void RunOpMemoryClear(KernelGraph *kernel_graph) const;
|
||||
void RunOpMemoryClear(const KernelGraph *kernel_graph) const;
|
||||
void GenerateTaskInfo(const std::shared_ptr<KernelGraph> &kernel_graph) const;
|
||||
void LoadTask(const std::shared_ptr<KernelGraph> &kernel_graph) const;
|
||||
void ExecTask(const std::shared_ptr<KernelGraph> &kernel_graph) const;
|
||||
|
|
|
@ -33,6 +33,7 @@ namespace mindspore {
|
|||
namespace session {
|
||||
ParameterPtr CPUSession::CreateNewParameterFromParameter(const AnfNodePtr &anf, bool valid_input, KernelGraph *graph) {
|
||||
MS_EXCEPTION_IF_NULL(anf);
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
if (!anf->isa<Parameter>()) {
|
||||
MS_LOG(EXCEPTION) << "anf[" << anf->DebugString() << "] is not a parameter";
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ constexpr auto kIsFeatureMapOutput = "IsFeatureMapOutput";
|
|||
constexpr auto kIsFeatureMapInputList = "IsFeatureMapInputList";
|
||||
void PushNoVisitedNode(const AnfNodePtr &node, std::queue<AnfNodePtr> *que,
|
||||
std::unordered_set<AnfNodePtr> *visited_nodes) {
|
||||
MS_EXCEPTION_IF_NULL(node);
|
||||
MS_EXCEPTION_IF_NULL(que);
|
||||
MS_EXCEPTION_IF_NULL(visited_nodes);
|
||||
if (visited_nodes->find(node) == visited_nodes->end()) {
|
||||
|
@ -131,11 +132,10 @@ void KernelGraph::VisitNodeDescendants(const AnfNodePtr &node, std::queue<AnfNod
|
|||
std::vector<AnfNodePtr> active_nodes;
|
||||
for (const auto &output_edge : it->second) {
|
||||
auto next_node = output_edge.first;
|
||||
MS_EXCEPTION_IF_NULL(next_node);
|
||||
if (node_input_num_.find(next_node) == node_input_num_.end()) {
|
||||
MS_EXCEPTION_IF_NULL(next_node);
|
||||
MS_LOG(EXCEPTION) << "Can't find node[" << next_node->DebugString() << "]";
|
||||
}
|
||||
MS_EXCEPTION_IF_NULL(next_node);
|
||||
MS_LOG(DEBUG) << "Decrease input:" << next_node->DebugString() << ",node:" << node->DebugString()
|
||||
<< ",num: " << node_input_num_[next_node] << ",decrease num:" << output_edge.second;
|
||||
if (node_input_num_[next_node] < output_edge.second) {
|
||||
|
@ -147,7 +147,7 @@ void KernelGraph::VisitNodeDescendants(const AnfNodePtr &node, std::queue<AnfNod
|
|||
if (node_input_num_[next_node] == 0 && visited_nodes->find(next_node) == visited_nodes->end()) {
|
||||
(void)visited_nodes->insert(next_node);
|
||||
if (AnfAlgo::IsCommunicationOp(next_node)) {
|
||||
MS_LOG(DEBUG) << "visit node:" << next_node->DebugString();
|
||||
MS_LOG(DEBUG) << "Visit node:" << next_node->DebugString();
|
||||
visit_queue->push(next_node);
|
||||
} else {
|
||||
active_nodes.emplace_back(next_node);
|
||||
|
@ -156,7 +156,8 @@ void KernelGraph::VisitNodeDescendants(const AnfNodePtr &node, std::queue<AnfNod
|
|||
}
|
||||
|
||||
for (auto &node : active_nodes) {
|
||||
MS_LOG(DEBUG) << "visit node:" << node->DebugString();
|
||||
MS_EXCEPTION_IF_NULL(node);
|
||||
MS_LOG(DEBUG) << "Visit node:" << node->DebugString();
|
||||
visit_queue->push(node);
|
||||
}
|
||||
}
|
||||
|
@ -380,12 +381,12 @@ std::vector<AnfNodePtr> KernelGraph::SplitTupleValueNodeToNodeList(const ValueNo
|
|||
auto output_size = AnfAlgo::GetOutputTensorNum(value_node);
|
||||
std::vector<AnfNodePtr> convert_inputs;
|
||||
if (!node_value->isa<ValueTuple>()) {
|
||||
MS_LOG(EXCEPTION) << "multiple output valuenode's value must be a value tuple but got " << node_value->ToString();
|
||||
MS_LOG(EXCEPTION) << "Multiple output valuenode's value must be a value tuple but got " << node_value->ToString();
|
||||
}
|
||||
auto value_tuple = node_value->cast<ValueTuplePtr>();
|
||||
MS_EXCEPTION_IF_NULL(value_tuple);
|
||||
if (value_tuple->size() != output_size) {
|
||||
MS_LOG(EXCEPTION) << "value tuple size" << value_tuple->size()
|
||||
MS_LOG(EXCEPTION) << "Value tuple size" << value_tuple->size()
|
||||
<< " is not mathced with the value node's output size" << output_size;
|
||||
}
|
||||
for (size_t index = 0; index < value_tuple->value().size(); ++index) {
|
||||
|
@ -408,7 +409,7 @@ std::vector<AnfNodePtr> KernelGraph::SplitTupleValueNodeToNodeList(const ValueNo
|
|||
convert_inputs.emplace_back(new_value_node);
|
||||
}
|
||||
if (!RemoveValueNodeFromGraph(value_node)) {
|
||||
MS_LOG(WARNING) << "failed to remove the value_node " << value_node->DebugString();
|
||||
MS_LOG(WARNING) << "Failed to remove the value_node " << value_node->DebugString();
|
||||
}
|
||||
return convert_inputs;
|
||||
}
|
||||
|
@ -429,10 +430,10 @@ void KernelGraph::FrontBackendlMapAdd(const AnfNodePtr &front_anf, const AnfNode
|
|||
MS_EXCEPTION_IF_NULL(front_anf);
|
||||
MS_EXCEPTION_IF_NULL(backend_anf);
|
||||
if (front_backend_anf_map_.find(front_anf) != front_backend_anf_map_.end()) {
|
||||
MS_LOG(EXCEPTION) << "anf " << front_anf->DebugString() << " has been exist in the front_backend_anf_map_";
|
||||
MS_LOG(EXCEPTION) << "Anf " << front_anf->DebugString() << " has been exist in the front_backend_anf_map_";
|
||||
}
|
||||
if (backend_front_anf_map_.find(backend_anf) != backend_front_anf_map_.end()) {
|
||||
MS_LOG(EXCEPTION) << "kernel " << backend_anf->DebugString() << "has been exist in the backend_front_anf_map_";
|
||||
MS_LOG(EXCEPTION) << "Kernel " << backend_anf->DebugString() << "has been exist in the backend_front_anf_map_";
|
||||
}
|
||||
front_backend_anf_map_[front_anf] = backend_anf;
|
||||
backend_front_anf_map_[backend_anf] = front_anf;
|
||||
|
@ -442,15 +443,15 @@ void KernelGraph::FrontBackendlMapUpdate(const AnfNodePtr &old_backend_anf, cons
|
|||
MS_EXCEPTION_IF_NULL(old_backend_anf);
|
||||
MS_EXCEPTION_IF_NULL(new_backend_anf);
|
||||
if (old_backend_anf == new_backend_anf) {
|
||||
MS_LOG(DEBUG) << "old same with new:" << old_backend_anf->DebugString();
|
||||
MS_LOG(DEBUG) << "Old same with new:" << old_backend_anf->DebugString();
|
||||
return;
|
||||
}
|
||||
if (backend_front_anf_map_.find(old_backend_anf) == backend_front_anf_map_.end()) {
|
||||
MS_LOG(DEBUG) << "old_backend_anf " << old_backend_anf->DebugString() << " is not exist in the map";
|
||||
MS_LOG(DEBUG) << "Old_backend_anf " << old_backend_anf->DebugString() << " is not exist in the map";
|
||||
return;
|
||||
}
|
||||
if (front_backend_anf_map_.find(backend_front_anf_map_[old_backend_anf]) == front_backend_anf_map_.end()) {
|
||||
MS_LOG(EXCEPTION) << "anf is not exist in the map ,old " << old_backend_anf->DebugString();
|
||||
MS_LOG(EXCEPTION) << "Anf is not exist in the map ,old " << old_backend_anf->DebugString();
|
||||
}
|
||||
front_backend_anf_map_[backend_front_anf_map_[old_backend_anf]] = new_backend_anf;
|
||||
backend_front_anf_map_[new_backend_anf] = backend_front_anf_map_[old_backend_anf];
|
||||
|
@ -483,6 +484,8 @@ void KernelGraph::TensorValueNodeMapAdd(const tensor::TensorPtr &tensor, const V
|
|||
}
|
||||
|
||||
void KernelGraph::AddDependEdge(const AnfNodePtr &node, const AnfNodePtr &input, size_t depend_edge_num) {
|
||||
MS_EXCEPTION_IF_NULL(node);
|
||||
MS_EXCEPTION_IF_NULL(input);
|
||||
MS_LOG(DEBUG) << "Input:" << input->DebugString() << ", node:" << node->DebugString() << ",num:" << depend_edge_num;
|
||||
auto output_depend_edge = std::pair<AnfNodePtr, size_t>(node, depend_edge_num);
|
||||
// add output depend edge of input
|
||||
|
@ -571,6 +574,8 @@ void KernelGraph::UpdateControlDependRelations(const std::vector<AnfNodePtr> &de
|
|||
bool KernelGraph::HandleControlDependNode(const AnfNodePtr &node, std::queue<AnfNodePtr> *que,
|
||||
std::unordered_set<AnfNodePtr> *visited_nodes) {
|
||||
MS_EXCEPTION_IF_NULL(node);
|
||||
MS_EXCEPTION_IF_NULL(que);
|
||||
MS_EXCEPTION_IF_NULL(visited_nodes);
|
||||
if (!node->isa<CNode>()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -596,6 +601,7 @@ bool KernelGraph::HandleControlDependNode(const AnfNodePtr &node, std::queue<Anf
|
|||
}
|
||||
|
||||
void KernelGraph::UpdateNodeEdgeList(std::queue<AnfNodePtr> *seed_nodes) {
|
||||
MS_EXCEPTION_IF_NULL(seed_nodes);
|
||||
node_output_edges_.clear();
|
||||
node_input_num_.clear();
|
||||
node_input_edges_.clear();
|
||||
|
@ -637,14 +643,14 @@ bool KernelGraph::IsInRefOutputMap(const AnfWithOutIndex &pair) const { return r
|
|||
|
||||
AnfWithOutIndex KernelGraph::GetRefCorrespondOutput(const AnfWithOutIndex &out_pair) const {
|
||||
if (!IsInRefOutputMap(out_pair)) {
|
||||
MS_LOG(EXCEPTION) << "out_pair is not in RefOutputMap";
|
||||
MS_LOG(EXCEPTION) << "Out_pair is not in RefOutputMap";
|
||||
}
|
||||
return ref_out_in_map_.at(out_pair);
|
||||
}
|
||||
|
||||
void KernelGraph::AddRefCorrespondPairs(const AnfWithOutIndex &final_pair, const AnfWithOutIndex &origin_pair) {
|
||||
if (IsInRefOutputMap(final_pair)) {
|
||||
MS_LOG(EXCEPTION) << "out_pair is already in RefOutputMap";
|
||||
MS_LOG(EXCEPTION) << "Out_pair is already in RefOutputMap";
|
||||
}
|
||||
(void)ref_out_in_map_.insert(std::make_pair(final_pair, origin_pair));
|
||||
}
|
||||
|
@ -750,7 +756,7 @@ std::vector<CNodePtr> KernelGraph::FindNodeByPrimitive(const PrimitivePtr &primi
|
|||
void KernelGraph::SetRealInput(const AnfNodePtr ¶meter, const AnfNodePtr &arg) {
|
||||
MS_EXCEPTION_IF_NULL(parameter);
|
||||
MS_EXCEPTION_IF_NULL(arg);
|
||||
MS_LOG(INFO) << "parameter: " << parameter->DebugString() << ", real input : " << arg->DebugString();
|
||||
MS_LOG(INFO) << "Parameter: " << parameter->DebugString() << ", real input : " << arg->DebugString();
|
||||
MS_EXCEPTION_IF_NULL(parameter);
|
||||
MS_EXCEPTION_IF_NULL(arg);
|
||||
auto iter = std::find_if(
|
||||
|
@ -783,7 +789,7 @@ void KernelGraph::UpdateCallRealInput() {
|
|||
}
|
||||
|
||||
void KernelGraph::PrintGraphExecuteOrder() const {
|
||||
MS_LOG(INFO) << "graph:" << graph_id_ << "execution order";
|
||||
MS_LOG(INFO) << "Graph:" << graph_id_ << "execution order";
|
||||
for (size_t i = 0; i < execution_order_.size(); i++) {
|
||||
CNodePtr cur_cnode_ptr = execution_order_[i];
|
||||
MS_EXCEPTION_IF_NULL(cur_cnode_ptr);
|
||||
|
@ -805,7 +811,7 @@ void KernelGraph::PrintGraphExecuteOrder() const {
|
|||
}
|
||||
}
|
||||
|
||||
MS_LOG(INFO) << "index[" << i << "], node name[" << cur_cnode_ptr->fullname_with_scope() << "], logic id["
|
||||
MS_LOG(INFO) << "Index[" << i << "], node name[" << cur_cnode_ptr->fullname_with_scope() << "], logic id["
|
||||
<< AnfAlgo::GetStreamDistinctionLabel(cur_cnode_ptr.get()) << "], stream id["
|
||||
<< AnfAlgo::GetStreamId(cur_cnode_ptr) << "], node info[" << cur_cnode_ptr->DebugString() << "]"
|
||||
<< event_str << label_str;
|
||||
|
|
|
@ -75,7 +75,7 @@ class KernelGraph : public FuncGraph {
|
|||
// add value node tensor relation map
|
||||
void TensorValueNodeMapAdd(const tensor::TensorPtr &tensor, const ValueNodePtr &value_node);
|
||||
// get all value nodes of graph
|
||||
std::unordered_set<ValueNodePtr> graph_value_nodes() { return graph_value_nodes_; }
|
||||
const std::unordered_set<ValueNodePtr> graph_value_nodes() const { return graph_value_nodes_; }
|
||||
// add value node to graph
|
||||
void AddValueNodeToGraph(const ValueNodePtr &value_node);
|
||||
// ref output is in map
|
||||
|
|
|
@ -60,7 +60,7 @@ PyObject *GetParamDefaultInputTensor(const AnfNodePtr &node) {
|
|||
BaseRef CreateOneTensor(const AnfNodePtr &node, size_t output_index, const KernelGraph &graph,
|
||||
const std::vector<tensor::TensorPtr> &input_tensors) {
|
||||
MS_EXCEPTION_IF_NULL(node);
|
||||
MS_LOG(INFO) << "create tensor for output[" << node->DebugString() << "] index[" << output_index << "]";
|
||||
MS_LOG(INFO) << "Create tensor for output[" << node->DebugString() << "] index[" << output_index << "]";
|
||||
// if node is a value node, no need sync addr from device to host
|
||||
if (!AnfAlgo::OutputAddrExist(node, output_index)) {
|
||||
if (node->isa<ValueNode>()) {
|
||||
|
@ -71,13 +71,13 @@ BaseRef CreateOneTensor(const AnfNodePtr &node, size_t output_index, const Kerne
|
|||
if (node->isa<Parameter>()) {
|
||||
for (size_t input_idx = 0; input_idx < graph.inputs().size(); input_idx++) {
|
||||
if (input_idx >= input_tensors.size()) {
|
||||
MS_LOG(EXCEPTION) << "input idx:" << input_idx << "out of range:" << input_tensors.size();
|
||||
MS_LOG(EXCEPTION) << "Input idx:" << input_idx << "out of range:" << input_tensors.size();
|
||||
}
|
||||
if (graph.inputs()[input_idx] == node) {
|
||||
return input_tensors[input_idx];
|
||||
}
|
||||
}
|
||||
MS_LOG(EXCEPTION) << "parameter : " << node->DebugString() << "has no output addr";
|
||||
MS_LOG(EXCEPTION) << "Parameter : " << node->DebugString() << "has no output addr";
|
||||
}
|
||||
}
|
||||
// if proccess reach here,it remarks item_with_index is a real node(Parameter,or executable CNode)
|
||||
|
@ -97,7 +97,7 @@ BaseRef CreateOneTensor(const AnfNodePtr &node, size_t output_index, const Kerne
|
|||
tensor->set_dirty(false);
|
||||
} else if (!address->SyncDeviceToHost(trans::GetRuntimePaddingShape(node, output_index),
|
||||
LongToSize(tensor->data().nbytes()), tensor->data_type(), tensor->data_c())) {
|
||||
MS_LOG(INFO) << "output sync device to host error!!!";
|
||||
MS_LOG(INFO) << "Output sync device to host error!!!";
|
||||
tensor->set_dirty(false);
|
||||
}
|
||||
return tensor;
|
||||
|
@ -106,10 +106,10 @@ BaseRef CreateOneTensor(const AnfNodePtr &node, size_t output_index, const Kerne
|
|||
BaseRef CreatTensorForOutput(const AnfNodePtr &anf, const KernelGraph &graph,
|
||||
const std::vector<tensor::TensorPtr> &input_tensors) {
|
||||
MS_EXCEPTION_IF_NULL(anf);
|
||||
MS_LOG(INFO) << "create tensor for output[" << anf->DebugString() << "]";
|
||||
MS_LOG(INFO) << "Create tensor for output[" << anf->DebugString() << "]";
|
||||
auto item_with_index = AnfAlgo::VisitKernelWithReturnType(anf, 0);
|
||||
MS_EXCEPTION_IF_NULL(item_with_index.first);
|
||||
MS_LOG(INFO) << "create tensor for output after visit:" << item_with_index.first->DebugString();
|
||||
MS_LOG(INFO) << "Create tensor for output after visit:" << item_with_index.first->DebugString();
|
||||
// special handle for maketuple
|
||||
if (AnfAlgo::CheckPrimitiveType(item_with_index.first, prim::kPrimMakeTuple)) {
|
||||
auto cnode = item_with_index.first->cast<CNodePtr>();
|
||||
|
@ -133,7 +133,7 @@ BaseRef CreatTupleForOutput(const AnfNodePtr &anf, const KernelGraph &graph,
|
|||
const std::vector<tensor::TensorPtr> &input_tensors) {
|
||||
MS_EXCEPTION_IF_NULL(anf);
|
||||
if (!AnfAlgo::IsRealKernel(anf)) {
|
||||
MS_LOG(EXCEPTION) << "anf[" << anf->DebugString() << "] should be a executable kernel";
|
||||
MS_LOG(EXCEPTION) << "Anf[" << anf->DebugString() << "] should be a executable kernel";
|
||||
}
|
||||
if (anf->isa<ValueNode>()) {
|
||||
return CreateOneTensor(anf, 0, graph, input_tensors);
|
||||
|
@ -194,7 +194,7 @@ std::vector<AnfNodePtr> CreateParameterFromTuple(const AnfNodePtr &node, bool va
|
|||
if (abstract->isa<abstract::AbstractTuple>() && !AnfAlgo::CheckPrimitiveType(out_node, prim::kPrimTupleGetItem)) {
|
||||
auto tuple_abstract = abstract->cast<abstract::AbstractTuplePtr>();
|
||||
MS_EXCEPTION_IF_NULL(tuple_abstract);
|
||||
MS_LOG(INFO) << "tuple_size [" << tuple_abstract->size() << "]";
|
||||
MS_LOG(INFO) << "Tuple_size [" << tuple_abstract->size() << "]";
|
||||
for (size_t output_idx = 0; output_idx < tuple_abstract->size(); output_idx++) {
|
||||
create_parameter((*tuple_abstract)[output_idx]);
|
||||
}
|
||||
|
@ -207,6 +207,7 @@ std::vector<AnfNodePtr> CreateParameterFromTuple(const AnfNodePtr &node, bool va
|
|||
}
|
||||
|
||||
size_t LoadCtrlInputTensor(const std::shared_ptr<KernelGraph> &graph, std::vector<tensor::TensorPtr> *inputs) {
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
MS_LOG(INFO) << "Load kInputCtrlTensors";
|
||||
auto inputs_params = graph->input_ctrl_tensors();
|
||||
if (inputs_params == nullptr) {
|
||||
|
@ -274,10 +275,10 @@ ParameterPtr ConstructRunOpParameter(const std::shared_ptr<KernelGraph> &graph,
|
|||
}
|
||||
|
||||
void DumpGraphOutput(const Any &any, size_t recurse_level = 0) {
|
||||
MS_LOG(INFO) << "graph outputs:";
|
||||
MS_LOG(INFO) << "Graph outputs:";
|
||||
const size_t max_deep = 10;
|
||||
if (recurse_level > max_deep) {
|
||||
MS_LOG(INFO) << "recurse too deep";
|
||||
MS_LOG(INFO) << "Recurse too deep";
|
||||
return;
|
||||
}
|
||||
std::string tab_str;
|
||||
|
@ -318,7 +319,7 @@ ParameterPtr SessionBasic::CreateNewParameterFromParameter(const AnfNodePtr &anf
|
|||
KernelGraph *graph) {
|
||||
MS_EXCEPTION_IF_NULL(anf);
|
||||
if (!anf->isa<Parameter>()) {
|
||||
MS_LOG(EXCEPTION) << "anf[" << anf->DebugString() << "] is not a parameter";
|
||||
MS_LOG(EXCEPTION) << "Anf[" << anf->DebugString() << "] is not a parameter";
|
||||
}
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
auto m_tensor = GetParamDefaultInputTensor(anf);
|
||||
|
@ -523,7 +524,7 @@ ParameterPtr SessionBasic::CreateNewParameter(const AnfNodePtr &anf, KernelGraph
|
|||
MS_EXCEPTION_IF_NULL(anf);
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
if (!anf->isa<Parameter>()) {
|
||||
MS_LOG(EXCEPTION) << "anf[" << anf->DebugString() << "] is not a parameter";
|
||||
MS_LOG(EXCEPTION) << "Anf[" << anf->DebugString() << "] is not a parameter";
|
||||
}
|
||||
|
||||
auto m_tensor = GetParamDefaultInputTensor(anf);
|
||||
|
@ -593,6 +594,22 @@ KernelGraphPtr SessionBasic::ConstructKernelGraph(const AnfNodePtrList &lst, con
|
|||
return graph;
|
||||
}
|
||||
|
||||
void SessionBasic::CreateCNodeKernelGraph(const AnfNodePtr node, KernelGraphPtr graph) {
|
||||
MS_EXCEPTION_IF_NULL(node);
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
auto cnode = node->cast<CNodePtr>();
|
||||
MS_EXCEPTION_IF_NULL(cnode);
|
||||
// create a new cnode object
|
||||
auto new_cnode = CreateNewCNode(cnode, graph.get());
|
||||
MS_EXCEPTION_IF_NULL(new_cnode);
|
||||
new_cnode->set_abstract(cnode->abstract());
|
||||
new_cnode->set_fullname_with_scope(cnode->fullname_with_scope());
|
||||
new_cnode->set_scope(cnode->scope());
|
||||
graph->FrontBackendlMapAdd(node, new_cnode);
|
||||
if (AnfAlgo::CheckPrimitiveType(new_cnode, prim::kPrimReturn)) {
|
||||
graph->set_return(new_cnode);
|
||||
}
|
||||
}
|
||||
std::shared_ptr<KernelGraph> SessionBasic::ConstructKernelGraph(const FuncGraphPtr &func_graph,
|
||||
std::vector<KernelGraphPtr> *all_out_graph) {
|
||||
MS_EXCEPTION_IF_NULL(func_graph);
|
||||
|
@ -630,18 +647,7 @@ std::shared_ptr<KernelGraph> SessionBasic::ConstructKernelGraph(const FuncGraphP
|
|||
}
|
||||
continue;
|
||||
} else {
|
||||
auto cnode = node->cast<CNodePtr>();
|
||||
MS_EXCEPTION_IF_NULL(cnode);
|
||||
// create a new cnode object
|
||||
auto new_cnode = CreateNewCNode(cnode, graph.get());
|
||||
MS_EXCEPTION_IF_NULL(new_cnode);
|
||||
new_cnode->set_abstract(cnode->abstract());
|
||||
new_cnode->set_fullname_with_scope(cnode->fullname_with_scope());
|
||||
new_cnode->set_scope(cnode->scope());
|
||||
graph->FrontBackendlMapAdd(node, new_cnode);
|
||||
if (AnfAlgo::CheckPrimitiveType(new_cnode, prim::kPrimReturn)) {
|
||||
graph->set_return(new_cnode);
|
||||
}
|
||||
CreateCNodeKernelGraph(node, graph);
|
||||
}
|
||||
}
|
||||
// if a graph jump back unconditionally, return op of this graph will never be executed, so output is null.
|
||||
|
@ -670,7 +676,7 @@ void SessionBasic::AddParameterToGraphInputs(const std::vector<AnfNodePtr> ¶
|
|||
MS_LOG(INFO) << "Can't find parameter:" << parameter->DebugString();
|
||||
continue;
|
||||
}
|
||||
MS_LOG(INFO) << "graph[" << graph->graph_id() << "],parameter:" << parameter->DebugString();
|
||||
MS_LOG(INFO) << "Graph[" << graph->graph_id() << "],parameter:" << parameter->DebugString();
|
||||
graph_inputs->push_back(backend_parameter);
|
||||
}
|
||||
}
|
||||
|
@ -686,7 +692,7 @@ void SessionBasic::LoadInputData(const std::shared_ptr<KernelGraph> &kernel_grap
|
|||
}
|
||||
auto input_nodes = kernel_graph->inputs();
|
||||
if ((inputs.size() + input_ctrl_size) - 1 != input_nodes.size()) {
|
||||
MS_LOG(EXCEPTION) << "tensor input:" << inputs.size() << " is not equal graph inputs:" << input_nodes.size()
|
||||
MS_LOG(EXCEPTION) << "Tensor input:" << inputs.size() << " is not equal graph inputs:" << input_nodes.size()
|
||||
<< ", input_ctrl_size:" << input_ctrl_size;
|
||||
}
|
||||
auto ms_context = MsContext::GetInstance();
|
||||
|
@ -740,7 +746,7 @@ void SessionBasic::UpdateOutputs(const std::shared_ptr<KernelGraph> &kernel_grap
|
|||
auto anf_outputs = kernel_graph->outputs();
|
||||
for (auto &item : anf_outputs) {
|
||||
MS_EXCEPTION_IF_NULL(item);
|
||||
MS_LOG(INFO) << "update output[" << item->DebugString() << "]";
|
||||
MS_LOG(INFO) << "Update output[" << item->DebugString() << "]";
|
||||
if (AnfAlgo::IsTupleOutput(item) && AnfAlgo::IsRealKernel(item)) {
|
||||
outputs->emplace_back(CreatTupleForOutput(item, *kernel_graph, input_tensors));
|
||||
continue;
|
||||
|
@ -771,7 +777,7 @@ void SessionBasic::GetSummaryNodes(KernelGraph *graph) {
|
|||
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!";
|
||||
MS_LOG(EXCEPTION) << "The node Summary should have 2 inputs at least!";
|
||||
}
|
||||
auto node = cnode->input(kSummaryGetItem);
|
||||
MS_EXCEPTION_IF_NULL(node);
|
||||
|
@ -829,7 +835,7 @@ CNodePtr SessionBasic::ConstructOutput(const AnfNodePtrList &outputs, const std:
|
|||
std::vector<AnfNodePtr> output_args;
|
||||
for (const auto &output : outputs) {
|
||||
MS_EXCEPTION_IF_NULL(output);
|
||||
MS_LOG(INFO) << "output:" << output->DebugString();
|
||||
MS_LOG(INFO) << "Output:" << output->DebugString();
|
||||
}
|
||||
auto FindEqu = [graph, outputs](const AnfNodePtr &out) -> AnfNodePtr {
|
||||
auto backend_anf = graph->GetBackendAnfByFrontAnf(out);
|
||||
|
@ -848,13 +854,13 @@ void SessionBasic::CreateOutputNode(const CNodePtr &cnode, const std::shared_ptr
|
|||
MS_LOG(INFO) << "Start!";
|
||||
std::vector<AnfNodePtr> make_tuple_inputs;
|
||||
make_tuple_inputs.push_back(NewValueNode(prim::kPrimMakeTuple));
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
if (AnfRuntimeAlgorithm::GetOutputTensorNum(cnode) > 1) {
|
||||
for (size_t output_index = 0; output_index < AnfRuntimeAlgorithm::GetOutputTensorNum(cnode); output_index++) {
|
||||
auto idx = NewValueNode(SizeToInt(output_index));
|
||||
MS_EXCEPTION_IF_NULL(idx);
|
||||
auto imm = std::make_shared<Int32Imm>(output_index);
|
||||
idx->set_abstract(std::make_shared<abstract::AbstractScalar>(imm));
|
||||
MS_EXCEPTION_IF_NULL(graph);
|
||||
auto getitem = graph->NewCNode({NewValueNode(prim::kPrimTupleGetItem), cnode, idx});
|
||||
std::vector<TypeId> types = {AnfAlgo::GetOutputInferDataType(cnode, output_index)};
|
||||
std::vector<std::vector<size_t>> shapes = {AnfAlgo::GetOutputInferShape(cnode, output_index)};
|
||||
|
|
|
@ -77,6 +77,8 @@ class SessionBasic {
|
|||
|
||||
virtual void RegisterSummaryCallBackFunc(const CallBackFunc &callback);
|
||||
|
||||
void CreateCNodeKernelGraph(const AnfNodePtr node, KernelGraphPtr graph);
|
||||
|
||||
std::shared_ptr<KernelGraph> ConstructKernelGraph(const AnfNodePtrList &lst, const AnfNodePtrList &outputs);
|
||||
std::shared_ptr<KernelGraph> ConstructKernelGraph(const FuncGraphPtr &func_graph,
|
||||
std::vector<KernelGraphPtr> *all_out_graph);
|
||||
|
|
Loading…
Reference in New Issue