From f95850b4341e8d75f3681ee7864078019499ac07 Mon Sep 17 00:00:00 2001 From: wqtshg Date: Tue, 13 Apr 2021 09:40:37 +0800 Subject: [PATCH] modify dump bug --- ge/graph/load/model_manager/data_dumper.cc | 36 ++++++++++++++++++---- metadef | 2 +- parser | 2 +- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/ge/graph/load/model_manager/data_dumper.cc b/ge/graph/load/model_manager/data_dumper.cc index f74272a5..5dea8deb 100644 --- a/ge/graph/load/model_manager/data_dumper.cc +++ b/ge/graph/load/model_manager/data_dumper.cc @@ -309,12 +309,13 @@ Status DataDumper::DumpRefOutput(const DataDumper::InnerDumpInfo &inner_dump_inf Status DataDumper::DumpOutputWithTask(const InnerDumpInfo &inner_dump_info, aicpu::dump::Task &task) { const auto &output_descs = inner_dump_info.op->GetAllOutputsDesc(); const std::vector output_addrs = ModelUtils::GetOutputDataAddrs(*runtime_param_, inner_dump_info.op); - if (output_descs.size() != output_addrs.size()) { - REPORT_INNER_ERROR("E19999", "output_desc size:%zu != output addr size:%zu in op:%s(%s)", - output_descs.size(), output_addrs.size(), - inner_dump_info.op->GetName().c_str(), inner_dump_info.op->GetType().c_str()); - GELOGE(PARAM_INVALID, "Invalid output desc addrs size %zu, op %s has %zu output desc.", output_addrs.size(), - inner_dump_info.op->GetName().c_str(), output_descs.size()); + if (output_descs.size() < output_addrs.size()) { + REPORT_INNER_ERROR("E19999", "The size[%zu] of output descs should not less than the size[%zu] of output addrs " + "in op %s(%s).", output_descs.size(), output_addrs.size(), inner_dump_info.op->GetName().c_str(), + inner_dump_info.op->GetType().c_str()); + GELOGE(PARAM_INVALID, "The size[%zu] of output descs should not less than the size[%zu] of output addrs in " + "op %s(%s).", output_descs.size(), output_addrs.size(), inner_dump_info.op->GetName().c_str(), + inner_dump_info.op->GetType().c_str()); return PARAM_INVALID; } std::vector v_memory_type; @@ -324,10 +325,33 @@ Status DataDumper::DumpOutputWithTask(const InnerDumpInfo &inner_dump_info, aicp inner_dump_info.op->GetName().c_str(), output_descs.size(), v_memory_type.size()); + size_t no_need_dump_output_num = 0; for (size_t i = 0; i < output_descs.size(); ++i) { aicpu::dump::Output output; std::string node_name_index; const auto &output_desc = output_descs.at(i); + int32_t calc_type = 0; + bool has_calc_type = ge::AttrUtils::GetInt(output_desc, ATTR_NAME_MEMORY_SIZE_CALC_TYPE, calc_type); + if (has_calc_type && (calc_type == static_cast(ge::MemorySizeCalcType::ALWAYS_EMPTY))) { + GELOGD("Node[%s] output[index:%zu] [name:%s] is an optional output, don't need to dump this output.", + inner_dump_info.op->GetName().c_str(), i, output_desc.GetName().c_str()); + ++no_need_dump_output_num; + continue; + } + + if (output_descs.size() - output_addrs.size() < no_need_dump_output_num) { + REPORT_INNER_ERROR("E19999", "The number of output does not match in op:%s(%s). The size[%zu] of output which is " + "no need to dump should not greater than the size[%zu] of output descs minus the size[%zu] of " + "output which is need to dump.", inner_dump_info.op->GetName().c_str(), + inner_dump_info.op->GetType().c_str(), no_need_dump_output_num, output_descs.size(), + output_addrs.size()); + GELOGE(PARAM_INVALID, "The number of output does not match in op:%s(%s). The size[%zu] of output which is no need" + " to dump should not greater than the size[%zu] of output descs minus the size[%zu] of output which is " + "need to dump.", inner_dump_info.op->GetName().c_str(), inner_dump_info.op->GetType().c_str(), + no_need_dump_output_num, output_descs.size(), output_addrs.size()); + return PARAM_INVALID; + } + // check dump output tensor desc is redirected by attr ATTR_DATA_DUMP_REF if (AttrUtils::GetStr(&output_desc, ATTR_DATA_DUMP_REF, node_name_index)) { GE_CHK_STATUS_RET(DumpRefOutput(inner_dump_info, output, i, node_name_index), "DumpRefOutput failed"); diff --git a/metadef b/metadef index fcebf37d..366b1557 160000 --- a/metadef +++ b/metadef @@ -1 +1 @@ -Subproject commit fcebf37d7428caf4e0bd6e6c3a4f8143f6eac8b7 +Subproject commit 366b15574218befa11454311879a4f436eeb67a9 diff --git a/parser b/parser index 424ac060..d744541c 160000 --- a/parser +++ b/parser @@ -1 +1 @@ -Subproject commit 424ac0609fe17f455865436462a2c62f85aea2b1 +Subproject commit d744541c6ca7f6966c1befacc9f83f53b0829e0a