diff --git a/ge/ge_local_engine/engine/host_cpu_engine.cc b/ge/ge_local_engine/engine/host_cpu_engine.cc index 35ecfb2d..06dc2b96 100755 --- a/ge/ge_local_engine/engine/host_cpu_engine.cc +++ b/ge/ge_local_engine/engine/host_cpu_engine.cc @@ -36,7 +36,6 @@ namespace { GELOGD("node:%s allocate output %zu success, size=%lld", op_desc->GetName().c_str(), i, size); \ ge_tensor->MutableTensorDesc().SetDataType(out_desc.GetDataType()); \ ge_tensor->MutableTensorDesc().SetShape(out_desc.GetShape()); \ - outputs.emplace_back(ge_tensor); \ } else { \ ge_tensor = outputs[i]; \ GE_CHECK_NOTNULL(ge_tensor); \ @@ -222,16 +221,30 @@ Status HostCpuEngine::Run(NodePtr &node, const vector &inputs, GELOGD("Run node by host cpu engine. node name = %s", node->GetName().c_str()); std::unique_ptr op_kernel; GE_CHK_STATUS_RET_NOLOG(FindOpKernel(node, op_kernel)); - std::map named_inputs; - std::vector tmp_outputs; - tmp_outputs.swap(outputs); std::map named_outputs; auto op_desc = node->GetOpDesc(); GE_CHK_STATUS_RET_NOLOG(PrepareInputs(op_desc, inputs, named_inputs)); - GE_CHK_STATUS_RET_NOLOG(PrepareOutputs(op_desc, tmp_outputs, named_outputs)); + GE_CHK_STATUS_RET_NOLOG(PrepareOutputs(op_desc, outputs, named_outputs)); GE_CHK_STATUS_RET_NOLOG(RunInternal(op_desc, *op_kernel, named_inputs, named_outputs)); + std::vector tmp_outputs; + for (size_t i = 0; i < op_desc->GetOutputsSize(); i++) { + auto tensor_name = op_desc->GetOutputNameByIndex(i); + if (tensor_name.empty()) { + GELOGE(INTERNAL_ERROR, "Failed to get output name. node = %s, index = %zu", op_desc->GetName().c_str(), i); + return INTERNAL_ERROR; + } + auto iter = named_outputs.find(tensor_name); + if (iter == named_outputs.end()) { + GELOGE(INTERNAL_ERROR, "Failed to get output tensor. node = %s, index = %zu, tensor_name = %s", + op_desc->GetName().c_str(), i, tensor_name.c_str()); + return INTERNAL_ERROR; + } + auto ge_tensor = MakeShared(TensorAdapter::AsGeTensor(iter->second)); + GE_CHECK_NOTNULL(ge_tensor); + tmp_outputs.emplace_back(ge_tensor); + } GELOGD("Run node by host cpu engine successfully. name node = %s", node->GetName().c_str()); outputs.swap(tmp_outputs); return SUCCESS; diff --git a/ge/graph/build/model_builder.cc b/ge/graph/build/model_builder.cc index 09ada60d..ec891f70 100755 --- a/ge/graph/build/model_builder.cc +++ b/ge/graph/build/model_builder.cc @@ -562,7 +562,7 @@ Status ModelBuilder::MergeWeights() { return FAILED; } } - weight_data.clear(); + weight->ClearData(); } return SUCCESS;