Browse Source

!1124 Fix No NetOutput Logic

From: @zhangxiaokun9
Reviewed-by: @wqtshg,@ji_chen
Signed-off-by: @ji_chen
tags/v1.2.0
mindspore-ci-bot Gitee 3 years ago
parent
commit
3b06556743
3 changed files with 27 additions and 10 deletions
  1. +8
    -8
      ge/graph/load/model_manager/davinci_model.cc
  2. +1
    -0
      ge/graph/load/model_manager/davinci_model.h
  3. +18
    -2
      tests/ut/ge/graph/load/davinci_model_unittest.cc

+ 8
- 8
ge/graph/load/model_manager/davinci_model.cc View File

@@ -1095,6 +1095,7 @@ Status DavinciModel::InitNetOutput(const ComputeGraphPtr &graph, const NodePtr &


GELOGI("Init NetOutput node: %s.", op_desc->GetName().c_str()); GELOGI("Init NetOutput node: %s.", op_desc->GetName().c_str());
output_op_list.push_back(op_desc); output_op_list.push_back(op_desc);
has_output_node_ = true;
if (known_node_) { if (known_node_) {
return SUCCESS; return SUCCESS;
} }
@@ -2422,9 +2423,8 @@ void DavinciModel::SetProfileTime(ModelProcStage stage, int64_t endTime) {
/// @author /// @author
/// ///
Status DavinciModel::CopyOutputData(uint32_t data_id, OutputData &output_data, rtMemcpyKind_t kind) { Status DavinciModel::CopyOutputData(uint32_t data_id, OutputData &output_data, rtMemcpyKind_t kind) {
if (output_addrs_list_.empty()) {
Status ret = SyncVarData();
return ret;
if (!has_output_node_) {
return SyncVarData();
} }


output_data.index = data_id; output_data.index = data_id;
@@ -2582,7 +2582,7 @@ Status DavinciModel::ReturnResult(uint32_t data_id, const bool rslt_flg, const b
return INTERNAL_ERROR; return INTERNAL_ERROR;
} }


if (output_addrs_list_.empty()) {
if (!has_output_node_) {
GELOGW("Output tensor list is empty, model id: %u", model_id_); GELOGW("Output tensor list is empty, model id: %u", model_id_);
GE_CHK_STATUS(listener_->OnComputeDone(model_id_, data_id, INTERNAL_ERROR, outputs), "OnComputeDone failed."); GE_CHK_STATUS(listener_->OnComputeDone(model_id_, data_id, INTERNAL_ERROR, outputs), "OnComputeDone failed.");
return INTERNAL_ERROR; return INTERNAL_ERROR;
@@ -2735,10 +2735,10 @@ void *DavinciModel::Run(DavinciModel *model) {
model->SetProfileTime(MODEL_AFTER_PROC_START)); model->SetProfileTime(MODEL_AFTER_PROC_START));
GE_TIMESTAMP_START(ReturnResult3); GE_TIMESTAMP_START(ReturnResult3);
// copy output data from device to host // copy output data from device to host
GE_IF_BOOL_EXEC(!model->output_addrs_list_.empty(),
(void)model->ReturnResult(current_data.index, rslt_flg, false, data_wrapper->GetOutput()))
GE_IF_BOOL_EXEC(model->has_output_node_,
(void)model->ReturnResult(current_data.index, rslt_flg, false, data_wrapper->GetOutput()));
// copy output data from device to host for variable graph // copy output data from device to host for variable graph
GE_IF_BOOL_EXEC(model->output_addrs_list_.empty(), (void)model->ReturnNoOutput(current_data.index));
GE_IF_BOOL_EXEC(!model->has_output_node_, (void)model->ReturnNoOutput(current_data.index));
GE_IF_BOOL_EXEC(model->is_first_execute_, GE_IF_BOOL_EXEC(model->is_first_execute_,
GE_TIMESTAMP_EVENT_END(ReturnResult3, "GraphExcute::CopyDataFromDeviceToHost")); GE_TIMESTAMP_EVENT_END(ReturnResult3, "GraphExcute::CopyDataFromDeviceToHost"));
GE_IF_BOOL_EXEC(ProfilingManager::Instance().ProfilingModelExecuteOn(), GE_IF_BOOL_EXEC(ProfilingManager::Instance().ProfilingModelExecuteOn(),
@@ -2890,7 +2890,7 @@ Status DavinciModel::CreateKnownZeroCopyMap(const vector<void *> &inputs, const
GELOGI("input %zu, v addr %p, r addr %p, p addr %p", i, addr_list[kDataIndex], addr, inputs[i]); GELOGI("input %zu, v addr %p, r addr %p, p addr %p", i, addr_list[kDataIndex], addr, inputs[i]);
} }


if (output_addrs_list_.empty()) {
if (!has_output_node_) {
GELOGW("output op num in graph is %zu", output_addrs_list_.size()); GELOGW("output op num in graph is %zu", output_addrs_list_.size());
return SUCCESS; return SUCCESS;
} }


+ 1
- 0
ge/graph/load/model_manager/davinci_model.h View File

@@ -1042,6 +1042,7 @@ class DavinciModel {
// For super kernel. // For super kernel.
SuperKernelTaskInfo skt_info_; SuperKernelTaskInfo skt_info_;


bool has_output_node_ = false;
bool is_dynamic_aipp_ = false; bool is_dynamic_aipp_ = false;
vector<string> dynamic_output_shape_info_; vector<string> dynamic_output_shape_info_;




+ 18
- 2
tests/ut/ge/graph/load/davinci_model_unittest.cc View File

@@ -27,6 +27,16 @@ using namespace std;
namespace ge { namespace ge {
extern OpDescPtr CreateOpDesc(string name, string type); extern OpDescPtr CreateOpDesc(string name, string type);


class DModelListener : public ModelListener {
public:
DModelListener(){};
uint32_t OnComputeDone(uint32_t model_id, uint32_t data_index, uint32_t result, vector<OutputTensorInfo> &outputs) {
return 0;
}
};

shared_ptr<ModelListener> g_local_call_back(new DModelListener());

class UtestDavinciModel : public testing::Test { class UtestDavinciModel : public testing::Test {
protected: protected:
void SetUp() {} void SetUp() {}
@@ -309,7 +319,7 @@ TEST_F(UtestDavinciModel, init_unknown) {
} }


TEST_F(UtestDavinciModel, Init_variable_op) { TEST_F(UtestDavinciModel, Init_variable_op) {
DavinciModel model(0, nullptr);
DavinciModel model(0, g_local_call_back);
model.ge_model_ = make_shared<GeModel>(); model.ge_model_ = make_shared<GeModel>();
model.runtime_param_.mem_base = (uint8_t *)0x08000000; model.runtime_param_.mem_base = (uint8_t *)0x08000000;
model.runtime_param_.mem_size = 5120000; model.runtime_param_.mem_size = 5120000;
@@ -335,8 +345,14 @@ TEST_F(UtestDavinciModel, Init_variable_op) {


EXPECT_EQ(model.InitNodes(graph), SUCCESS); EXPECT_EQ(model.InitNodes(graph), SUCCESS);


EXPECT_EQ(model.ReturnNoOutput(1), PARAM_INVALID);
EXPECT_EQ(model.ReturnNoOutput(1), SUCCESS);
EXPECT_EQ(model.SyncVarData(), SUCCESS); EXPECT_EQ(model.SyncVarData(), SUCCESS);

OutputData output_data;
EXPECT_FALSE(model.has_output_node_);
EXPECT_EQ(model.CopyOutputData(1, output_data, RT_MEMCPY_DEVICE_TO_HOST), SUCCESS);

EXPECT_EQ(model.ReturnResult(1, false, true, &output_data), INTERNAL_ERROR);
} }


TEST_F(UtestDavinciModel, InitRealSizeAndShapeInfo_succ1) { TEST_F(UtestDavinciModel, InitRealSizeAndShapeInfo_succ1) {


Loading…
Cancel
Save