From 2c7810aa0938f37aad58e5b5829b24e667027374 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 17 Dec 2020 15:22:25 +0800 Subject: [PATCH 1/6] For const input in dynamic aicpu single_op. --- ge/single_op/single_op_model.cc | 4 +- ge/single_op/single_op_model.h | 2 +- ge/single_op/stream_resource.cc | 3 +- .../task/aicpu_kernel_task_builder.cc | 2 + ge/single_op/task/aicpu_task_builder.cc | 2 + ge/single_op/task/op_task.cc | 57 +++++++++++++++++-- ge/single_op/task/op_task.h | 2 + 7 files changed, 62 insertions(+), 10 deletions(-) diff --git a/ge/single_op/single_op_model.cc b/ge/single_op/single_op_model.cc index a4a4b623..25bf6855 100755 --- a/ge/single_op/single_op_model.cc +++ b/ge/single_op/single_op_model.cc @@ -473,10 +473,10 @@ Status SingleOpModel::BuildTaskListForDynamicOp(DynamicSingleOp &single_op) { return SUCCESS; } -Status SingleOpModel::BuildDynamicOp(DynamicSingleOp &single_op) { +Status SingleOpModel::BuildDynamicOp(StreamResource &resource, DynamicSingleOp &single_op) { single_op.num_inputs_ = data_ops_.size(); single_op.num_outputs_ = netoutput_op_->GetAllInputsSize(); - ParseOpModelParams(model_helper_, model_params_); + GE_CHK_STATUS_RET_NOLOG(InitModelMem(resource)); return BuildTaskListForDynamicOp(single_op); } } // namespace ge diff --git a/ge/single_op/single_op_model.h b/ge/single_op/single_op_model.h index c3164543..6d0109fe 100755 --- a/ge/single_op/single_op_model.h +++ b/ge/single_op/single_op_model.h @@ -52,7 +52,7 @@ class SingleOpModel { Status Init(); Status BuildOp(StreamResource &resource, SingleOp &single_op); - Status BuildDynamicOp(DynamicSingleOp &single_op); + Status BuildDynamicOp(StreamResource &resource, DynamicSingleOp &single_op); private: Status InitModel(); diff --git a/ge/single_op/stream_resource.cc b/ge/single_op/stream_resource.cc index 722a1024..db6b7c47 100755 --- a/ge/single_op/stream_resource.cc +++ b/ge/single_op/stream_resource.cc @@ -155,7 +155,8 @@ Status StreamResource::BuildDynamicOperator(const string &model_name, GE_CHECK_NOTNULL(new_op); GELOGI("To build operator: %s", model_name.c_str()); - GE_CHK_STATUS_RET(model.BuildDynamicOp(*new_op), "Build op failed. op = %s, ret = %u", model_name.c_str(), ret); + GE_CHK_STATUS_RET(model.BuildDynamicOp(*this, *new_op), + "Build op failed. op = %s, ret = %u", model_name.c_str(), ret); *single_op = new_op.get(); dynamic_op_map_[model_data.model_data] = std::move(new_op); return SUCCESS; diff --git a/ge/single_op/task/aicpu_kernel_task_builder.cc b/ge/single_op/task/aicpu_kernel_task_builder.cc index f8a2bd1b..8eb4a07d 100755 --- a/ge/single_op/task/aicpu_kernel_task_builder.cc +++ b/ge/single_op/task/aicpu_kernel_task_builder.cc @@ -66,6 +66,7 @@ Status AiCpuCCTaskBuilder::BuildTask(AiCpuCCTask &task, uint64_t kernel_id, cons const std::string &kernel_name = kernel_def_.kernel_name(); task.SetSoName(so_name); task.SetkernelName(kernel_name); + GE_CHECK_NOTNULL(op_desc_); task.op_desc_ = op_desc_; const auto &context = kernel_def_.context(); @@ -96,6 +97,7 @@ Status AiCpuCCTaskBuilder::BuildTask(AiCpuCCTask &task, uint64_t kernel_id, cons GELOGE(ret, "Init ext info failed."); return ret; } + GE_CHK_STATUS_RET(task.SetInputConst(), "AicpuCCTask set input_const failed."); if (task.GetUnknownType() == DEPEND_COMPUTE) { GELOGE(FAILED, "AiCpuCCTask unknown type is depend compute, it's not supported now."); diff --git a/ge/single_op/task/aicpu_task_builder.cc b/ge/single_op/task/aicpu_task_builder.cc index 0cc5c554..e0785282 100755 --- a/ge/single_op/task/aicpu_task_builder.cc +++ b/ge/single_op/task/aicpu_task_builder.cc @@ -88,6 +88,7 @@ namespace ge { return ret; } + GE_CHECK_NOTNULL(op_desc_); task.op_desc_ = op_desc_; task.num_inputs_ = op_desc_->GetInputsSize(); task.num_outputs_ = op_desc_->GetOutputsSize(); @@ -104,6 +105,7 @@ namespace ge { fwk_op_kernel.fwkKernelBase.fwk_kernel.extInfoAddr = reinterpret_cast(task.ext_info_addr_dev_); fwk_op_kernel.fwkKernelBase.fwk_kernel.extInfoLen = kernel_ext_info_size; } + GE_CHK_STATUS_RET(task.SetInputConst(), "AicpuTask set input_const failed."); GE_CHK_STATUS_RET(task.InitForSummaryAndCopy(), "AiCpuTask init for summary and copy task failed."); fwk_op_kernel.fwkKernelBase.fwk_kernel.sessionID = ULLONG_MAX; diff --git a/ge/single_op/task/op_task.cc b/ge/single_op/task/op_task.cc index 22433ec9..4e1e9863 100755 --- a/ge/single_op/task/op_task.cc +++ b/ge/single_op/task/op_task.cc @@ -369,6 +369,25 @@ Status AiCpuBaseTask::SetExtInfoAndType(const std::string &kernel_ext_info, uint return SUCCESS; } +Status SetInputConst() { + input_is_const_.clear(); + const vector v_is_input_const = op_desc_->GetIsInputConst(); + for (size_t i = 0; i < op_desc->GetAllInputsSize(); ++i) { + const GeTensorDescPtr tensor_desc = op_desc_->MutableInputDesc(static_cast(i)); + if (tensor_desc == nullptr) { + GELOGD("SingleOp: %s, Index: %zu, has no input", op_desc_->GetName().c_str(), i); + continue; + } + if (i < v_is_input_const.size() && v_is_input_const[i]) { + GELOGD("SingleOp: %s, Index: %zu, input is const", op_desc_->GetName().c_str(), i); + input_is_const_.push_back(true); + continue; + } + input_is_const_.push_back(false); + } + return SUCCESS; +} + Status AiCpuBaseTask::UpdateExtInfo(const std::vector &input_desc, std::vector &output_desc, rtStream_t stream) { @@ -379,9 +398,23 @@ Status AiCpuBaseTask::UpdateExtInfo(const std::vector &input_desc, } GE_CHECK_NOTNULL(aicpu_ext_handle_); - for (size_t i = 0; i < num_inputs_; ++i) { - GE_CHK_STATUS_RET(aicpu_ext_handle_->UpdateInputShapeAndType(i, input_desc[i]), - "Input[%zu] update input shape failed.", i); + + size_t non_const_index = 0; + for (size_t input_index = 0; input_index < num_inputs_; input_index++) { + if (input_index < input_is_const_.size() && input_is_const_[input_index]) { + // get input_desc from op_desc if const input, num_inputs_ is op_desc_ input_size + auto const_input_desc = op_desc_->MutableInputDesc(static_cast(input_index)); + GE_CHECK_NOTNULL(const_input_desc); + GE_CHK_STATUS_RET(aicpu_ext_handle_->UpdateInputShapeAndType(i, *const_input_desc), + "Input[%zu] update input shape failed.", i); + continue; + } + GE_CHK_BOOL_RET_STATUS(non_const_index < input_desc.size(), PARAM_INVALID, + "Input_desc size is %zu, but get non_const_index is %zu", + input_desc.size(), non_const_index); + GE_CHK_STATUS_RET(aicpu_ext_handle_->UpdateInputShapeAndType(input_index, input_desc[non_const_index]), + "Input[%zu] update input shape failed.", input_index); + non_const_index++; } if (unknown_type_ != DEPEND_COMPUTE) { @@ -460,11 +493,23 @@ Status AiCpuBaseTask::UpdateIoAddr(const vector &inputs, const vecto GetIoAddr(arg_base, arg_num); // input number and output number was check in ValidateParams - for (size_t i = 0; i < inputs.size(); ++i) { - auto addr = inputs[i].data; + size_t non_const_index = 0; + for (size_t input_index = 0; input_index < num_inputs_; input_index++) { + if (input_index < input_is_const_.size() && input_is_const_[input_index]) { + // const input no need update addr + GE_CHECK_NOTNULL(arg_base); + GELOGD("AICpuTask input[%zu] addr = %p", input_index, *arg_base); + *arg_base; + continue; + } + GE_CHK_BOOL_RET_STATUS(non_const_index < inputs.size(), PARAM_INVALID, + "Input size is %zu, but get non_const_index is %zu", + inputs.size(), non_const_index); + auto addr = inputs[non_const_index].data; GE_CHECK_NOTNULL(addr); - GELOGD("AICpuTask input[%zu] addr = %p", i, addr); + GELOGD("AICpuTask input[%zu] addr = %p", input_index, addr); *arg_base++ = reinterpret_cast(addr); + non_const_index++; } for (size_t i = 0; i < outputs.size(); ++i) { diff --git a/ge/single_op/task/op_task.h b/ge/single_op/task/op_task.h index e2122b6f..761697cb 100644 --- a/ge/single_op/task/op_task.h +++ b/ge/single_op/task/op_task.h @@ -113,6 +113,7 @@ class AiCpuBaseTask : public OpTask { protected: Status UpdateIoAddr(const std::vector &inputs, const std::vector &outputs); + Status SetInputConst(); Status SetExtInfoAndType(const std::string &kernel_ext_info, uint64_t kernel_id); Status UpdateExtInfo(const std::vector &input_desc, @@ -127,6 +128,7 @@ class AiCpuBaseTask : public OpTask { UnknowShapeOpType unknown_type_ = DEPEND_IN_SHAPE; std::unique_ptr aicpu_ext_handle_; void *ext_info_addr_dev_ = nullptr; + vector input_is_const_; }; class AiCpuTask : public AiCpuBaseTask { From df480ba44f7f628299093f6c1d7ebf2a0f51b70a Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 17 Dec 2020 15:50:39 +0800 Subject: [PATCH 2/6] For const input in dynamic aicpu single_op. --- ge/single_op/task/op_task.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ge/single_op/task/op_task.cc b/ge/single_op/task/op_task.cc index 4e1e9863..84f2d8d3 100755 --- a/ge/single_op/task/op_task.cc +++ b/ge/single_op/task/op_task.cc @@ -369,10 +369,10 @@ Status AiCpuBaseTask::SetExtInfoAndType(const std::string &kernel_ext_info, uint return SUCCESS; } -Status SetInputConst() { +Status AiCpuTask::SetInputConst() { input_is_const_.clear(); const vector v_is_input_const = op_desc_->GetIsInputConst(); - for (size_t i = 0; i < op_desc->GetAllInputsSize(); ++i) { + for (size_t i = 0; i < op_desc_->GetAllInputsSize(); ++i) { const GeTensorDescPtr tensor_desc = op_desc_->MutableInputDesc(static_cast(i)); if (tensor_desc == nullptr) { GELOGD("SingleOp: %s, Index: %zu, has no input", op_desc_->GetName().c_str(), i); @@ -381,7 +381,7 @@ Status SetInputConst() { if (i < v_is_input_const.size() && v_is_input_const[i]) { GELOGD("SingleOp: %s, Index: %zu, input is const", op_desc_->GetName().c_str(), i); input_is_const_.push_back(true); - continue; + continue; } input_is_const_.push_back(false); } @@ -405,7 +405,7 @@ Status AiCpuBaseTask::UpdateExtInfo(const std::vector &input_desc, // get input_desc from op_desc if const input, num_inputs_ is op_desc_ input_size auto const_input_desc = op_desc_->MutableInputDesc(static_cast(input_index)); GE_CHECK_NOTNULL(const_input_desc); - GE_CHK_STATUS_RET(aicpu_ext_handle_->UpdateInputShapeAndType(i, *const_input_desc), + GE_CHK_STATUS_RET(aicpu_ext_handle_->UpdateInputShapeAndType(input_index, *const_input_desc), "Input[%zu] update input shape failed.", i); continue; } @@ -498,8 +498,8 @@ Status AiCpuBaseTask::UpdateIoAddr(const vector &inputs, const vecto if (input_index < input_is_const_.size() && input_is_const_[input_index]) { // const input no need update addr GE_CHECK_NOTNULL(arg_base); - GELOGD("AICpuTask input[%zu] addr = %p", input_index, *arg_base); - *arg_base; + GELOGD("AICpuTask input[%zu] addr = %u", input_index, *arg_base); + arg_base++; continue; } GE_CHK_BOOL_RET_STATUS(non_const_index < inputs.size(), PARAM_INVALID, From 56b65a7a41fdc6c9ebc07e0b0754394ff6b51046 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 17 Dec 2020 15:59:09 +0800 Subject: [PATCH 3/6] For const input in dynamic aicpu single_op. --- ge/single_op/task/op_task.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ge/single_op/task/op_task.cc b/ge/single_op/task/op_task.cc index 84f2d8d3..d1c24609 100755 --- a/ge/single_op/task/op_task.cc +++ b/ge/single_op/task/op_task.cc @@ -369,7 +369,7 @@ Status AiCpuBaseTask::SetExtInfoAndType(const std::string &kernel_ext_info, uint return SUCCESS; } -Status AiCpuTask::SetInputConst() { +Status AiCpuBaseTask::SetInputConst() { input_is_const_.clear(); const vector v_is_input_const = op_desc_->GetIsInputConst(); for (size_t i = 0; i < op_desc_->GetAllInputsSize(); ++i) { From 75d274bbb94ed5b1b5ef75b2b6d32186c9b5f936 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 17 Dec 2020 16:17:30 +0800 Subject: [PATCH 4/6] For const input in dynamic aicpu single_op. --- ge/single_op/task/op_task.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ge/single_op/task/op_task.cc b/ge/single_op/task/op_task.cc index d1c24609..4f64251c 100755 --- a/ge/single_op/task/op_task.cc +++ b/ge/single_op/task/op_task.cc @@ -406,7 +406,7 @@ Status AiCpuBaseTask::UpdateExtInfo(const std::vector &input_desc, auto const_input_desc = op_desc_->MutableInputDesc(static_cast(input_index)); GE_CHECK_NOTNULL(const_input_desc); GE_CHK_STATUS_RET(aicpu_ext_handle_->UpdateInputShapeAndType(input_index, *const_input_desc), - "Input[%zu] update input shape failed.", i); + "Input[%zu] update input shape failed.", input_index); continue; } GE_CHK_BOOL_RET_STATUS(non_const_index < input_desc.size(), PARAM_INVALID, From 97fac611e1a79d65a5c806417eca8f2f8c7f7109 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 17 Dec 2020 19:32:57 +0800 Subject: [PATCH 5/6] For const input in dynamic aicpu single_op. --- ge/single_op/task/aicpu_task_builder.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ge/single_op/task/aicpu_task_builder.cc b/ge/single_op/task/aicpu_task_builder.cc index e0785282..5fd4879e 100755 --- a/ge/single_op/task/aicpu_task_builder.cc +++ b/ge/single_op/task/aicpu_task_builder.cc @@ -105,7 +105,7 @@ namespace ge { fwk_op_kernel.fwkKernelBase.fwk_kernel.extInfoAddr = reinterpret_cast(task.ext_info_addr_dev_); fwk_op_kernel.fwkKernelBase.fwk_kernel.extInfoLen = kernel_ext_info_size; } - GE_CHK_STATUS_RET(task.SetInputConst(), "AicpuTask set input_const failed."); + GE_CHK_STATUS_RET(task.SetInputConst(), "AiCpuTask set input_const failed."); GE_CHK_STATUS_RET(task.InitForSummaryAndCopy(), "AiCpuTask init for summary and copy task failed."); fwk_op_kernel.fwkKernelBase.fwk_kernel.sessionID = ULLONG_MAX; From c5fcb5d2f22842bf0cc79828e9c075d357e21604 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 17 Dec 2020 19:33:27 +0800 Subject: [PATCH 6/6] For const input in dynamic aicpu single_op. --- ge/single_op/task/aicpu_kernel_task_builder.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ge/single_op/task/aicpu_kernel_task_builder.cc b/ge/single_op/task/aicpu_kernel_task_builder.cc index 8eb4a07d..34f1ba7b 100755 --- a/ge/single_op/task/aicpu_kernel_task_builder.cc +++ b/ge/single_op/task/aicpu_kernel_task_builder.cc @@ -97,7 +97,7 @@ Status AiCpuCCTaskBuilder::BuildTask(AiCpuCCTask &task, uint64_t kernel_id, cons GELOGE(ret, "Init ext info failed."); return ret; } - GE_CHK_STATUS_RET(task.SetInputConst(), "AicpuCCTask set input_const failed."); + GE_CHK_STATUS_RET(task.SetInputConst(), "AiCpuCCTask set input_const failed."); if (task.GetUnknownType() == DEPEND_COMPUTE) { GELOGE(FAILED, "AiCpuCCTask unknown type is depend compute, it's not supported now.");