fix some bug find by zhouli

pull/412/head
zhou_lili 4 years ago
parent dc37412456
commit 15763e5f39

@ -2556,8 +2556,10 @@ Status DavinciModel::CopyOutputData(uint32_t data_id, OutputData &output_data, r
int64_t data_size = output.second.GetDataSize();
if (is_online_infer_dynamic_) {
auto gear_and_real_out_size_info = merge_nodes_gear_and_real_out_size_info_[idx];
data_size = gear_and_real_out_size_info[cur_dynamic_dims_];
if (merge_nodes_gear_and_real_out_size_info_.find(idx) != merge_nodes_gear_and_real_out_size_info_.end()) {
auto gear_and_real_out_size_info = merge_nodes_gear_and_real_out_size_info_[idx];
data_size = gear_and_real_out_size_info[cur_dynamic_dims_];
}
}
uint64_t buffer_length = buffer.length;
void *buffer_addr = reinterpret_cast<void *>(reinterpret_cast<uintptr_t>(buffer.data));
@ -2594,11 +2596,13 @@ Status DavinciModel::GenOutputTensorInfo(const OpDescPtr &op_desc, uint32_t data
return ret);
std::vector<int64_t> output_shape = input_desc->GetShape().GetDims();
if (is_online_infer_dynamic_) {
auto gear_and_real_out_size_info = merge_nodes_gear_and_real_out_size_info_[i];
size = gear_and_real_out_size_info[cur_dynamic_dims_];
auto gear_and_real_out_shape_info = merge_nodes_gear_and_real_out_shape_info_[i];
output_shape = gear_and_real_out_shape_info[cur_dynamic_dims_];
is_dynamic_ = true;
if (merge_nodes_gear_and_real_out_size_info_.find(i) != merge_nodes_gear_and_real_out_size_info_.end()) {
auto gear_and_real_out_size_info = merge_nodes_gear_and_real_out_size_info_[i];
size = gear_and_real_out_size_info[cur_dynamic_dims_];
auto gear_and_real_out_shape_info = merge_nodes_gear_and_real_out_shape_info_[i];
output_shape = gear_and_real_out_shape_info[cur_dynamic_dims_];
is_dynamic_ = true;
}
}
GELOGI("Output size is %ld, output shape is %s.", size, formats::JoinToString(output_shape).c_str());
out_buffer_size_vec.push_back(size);
@ -2755,16 +2759,6 @@ void *DavinciModel::Run(DavinciModel *model) {
InputData current_data = data_wrapper->GetInput();
GELOGI("Model thread Run begin, model id:%u, data index:%u.", model_id, current_data.index);
if (model->is_online_infer_dynamic_ && !model->is_getnext_sink_dynamic_) {
model->cur_dynamic_dims_.clear();
GE_IF_BOOL_EXEC(current_data.blobs.empty(), break);
auto shape_data_buffer_data = current_data.blobs.back().data;
auto shape_data_buffer_length = current_data.blobs.back().length;
model->cur_dynamic_dims_.assign(reinterpret_cast<int64_t *>(shape_data_buffer_data),
reinterpret_cast<int64_t *>(shape_data_buffer_data) +
shape_data_buffer_length / sizeof(int64_t));
GELOGD("Data: cur dynamic dims is %s", formats::JoinToString(model->cur_dynamic_dims_).c_str());
}
GE_TIMESTAMP_START(Model_SyncVarData);
ret = model->SyncVarData();
GE_CHK_BOOL_TRUE_EXEC_WITH_LOG(
@ -2781,6 +2775,18 @@ void *DavinciModel::Run(DavinciModel *model) {
ret != SUCCESS, (void)model->ReturnResult(current_data.index, false, false, data_wrapper->GetOutput());
CsaInteract::GetInstance().StoreInternalErrorCode(ret, ERROR_MODULE_FMK, JOBSUBSTATE_GRAPH_EXEC);
continue, "Copy input data to model failed."); // [No need to check value]
if (model->is_online_infer_dynamic_ && !model->is_getnext_sink_dynamic_) {
model->cur_dynamic_dims_.clear();
GE_IF_BOOL_EXEC(current_data.blobs.empty(), break);
auto shape_data_buffer_data = current_data.blobs.back().data;
auto shape_data_buffer_length = current_data.blobs.back().length;
model->cur_dynamic_dims_.assign(reinterpret_cast<int64_t *>(shape_data_buffer_data),
reinterpret_cast<int64_t *>(shape_data_buffer_data) +
shape_data_buffer_length / sizeof(int64_t));
GELOGD("Data: cur dynamic dims is %s", formats::JoinToString(model->cur_dynamic_dims_).c_str());
delete[] (int64_t *)current_data.blobs.back().data;
current_data.blobs.pop_back();
}
GE_IF_BOOL_EXEC(ProfilingManager::Instance().ProfilingModelExecuteOn(), model->SetProfileTime(MODEL_PRE_PROC_END));
GE_IF_BOOL_EXEC(ProfilingManager::Instance().ProfilingModelExecuteOn(), model->SetProfileTime(MODEL_INFER_START));
if (ProfilingManager::Instance().ProfilingOpTraceOn()) {

@ -407,10 +407,6 @@ Status ModelManager::Unload(uint32_t model_id) {
}
std::lock_guard<std::mutex> lock(exeception_infos_mutex_);
exception_infos_.clear();
for (auto addr : shape_data_addrs_[model_id]) {
delete[] addr;
}
shape_data_addrs_.erase(model_id);
return SUCCESS;
}
@ -475,6 +471,19 @@ Status ModelManager::GetCurDynamicDims(const vector<vector<int64_t>> &user_real_
}
}
GELOGD("Cur dynamic dims is %s.", formats::JoinToString(cur_dynamic_dims).c_str());
bool cur_dynamic_dims_valid = false;
std::vector<std::string> shape_strs = ge::StringUtils::Split(GetLocalOmgContext().dynamic_dims, ';');
for (auto dynamic_dim : shape_strs) {
if (dynamic_dim == formats::JoinToString(cur_dynamic_dims)) {
cur_dynamic_dims_valid = true;
break;
}
}
if (!cur_dynamic_dims_valid) {
GELOGE(INTERNAL_ERROR, "Cur dynamic dims is %s, not exist in options.",
formats::JoinToString(cur_dynamic_dims).c_str());
return INTERNAL_ERROR;
}
return SUCCESS;
}
@ -517,7 +526,6 @@ Status ModelManager::DataInputTensor(uint32_t model_id, const std::vector<InputT
"Failed to memcpy data.");
data.length = length;
input_data.blobs.push_back(data);
shape_data_addrs_[model_id].emplace_back(reinterpret_cast<int64_t *>(data.data));
}
}

@ -363,7 +363,6 @@ class FMK_FUNC_HOST_VISIBILITY FMK_FUNC_DEV_VISIBILITY ModelManager {
std::map<uintptr_t, std::map<std::string, CustAICPUKernelPtr>> cust_aicpu_so_;
static DumpProperties dump_properties_;
std::map<uint32_t, std::vector<int64_t *>> shape_data_addrs_;
};
} // namespace ge

@ -2866,13 +2866,15 @@ void GraphManager::RunThread(GraphManager *graph_manager) {
if (args.graph_node->graph_run_async_listener_ != nullptr) {
args.graph_node->graph_run_async_listener_->SetCallback(args.callback);
}
Status ret;
// parse inputs.dims to vector<vector<uint64_t>> dynamic_dims
if (graph_manager->ParseInputsDims(args.input_tensor) != SUCCESS) {
GELOGE(PARAM_INVALID, "Parse input dims failed.");
ret = graph_manager->ParseInputsDims(args.input_tensor);
if (ret != SUCCESS) {
ReturnError(graph_manager, args.callback, ret, "ParseInputsDims failed, thread exit.");
args.graph_node->Unlock();
return;
}
Status ret;
if (!args.graph_node->GetLoadFlag()) {
ret = graph_manager->LoadGraphAsync(args.ge_root_model, args.graph_node);
if (ret != SUCCESS || args.ge_root_model == nullptr) {
@ -2897,12 +2899,12 @@ void GraphManager::RunThread(GraphManager *graph_manager) {
ret = graph_manager->graph_executor_.ExecuteGraphAsync(args.graph_id, args.graph_node->GetGeRootModel(),
args.input_tensor);
args.graph_node->SetRunFlag(false);
args.graph_node->Unlock();
if (ret != SUCCESS) {
GELOGE(ret, "[GraphManager] Run graph async failed, graph_id=%u.", args.graph_id);
StopQueue(graph_manager);
ReturnError(graph_manager, args.callback, ret, "ExecuteGraphAsync failed, thread exit.");
args.graph_node->Unlock();
return;
}
args.graph_node->Unlock();
GELOGI("[GraphManager] Run graph async success, graph_id=%u.", args.graph_id);
}
}

@ -1571,6 +1571,10 @@ void GetDynamicShapeByMerge(const ComputeGraphPtr &graph, const NodePtr &node,
// Connect NetOutput directly
void GetDirectOutputShape(const ComputeGraphPtr &graph, const NodePtr &node,
const set<size_t> &dynamic_output_index, vector<string> &dynamic_output_dims) {
if (!GetLocalOmgContext().dynamic_node_type.empty()) {
GELOGD("No need to get directly shape info of %s when train.", node->GetName().c_str());
return;
}
GELOGD("Try get directly shape info, Graph: %s, Node: %s", graph->GetName().c_str(), node->GetName().c_str());
const auto &netoutput_desc = node->GetOpDesc();
const auto &inputnode_to_netoutput = node->GetInAllNodes();
@ -1578,9 +1582,6 @@ void GetDirectOutputShape(const ComputeGraphPtr &graph, const NodePtr &node,
if (dynamic_output_index.count(i) > 0) {
continue;
}
if (inputnode_to_netoutput.at(i)->GetType() == GETDYNAMICDIMS) {
continue;
}
auto tensor_desc = netoutput_desc->GetInputDesc(i);
auto shape = tensor_desc.GetShape().ToString();

@ -84,8 +84,10 @@ Status DistinguishGetNextAndData(ComputeGraphPtr &graph, vector<NodePtr> &data_n
if (op_desc->GetType() == DATA && op_desc->GetName() != kShapeDataName) {
if (op_desc->GetName().find(kSubstrOfGetNextNosinkName) == string::npos) {
data_nodes.emplace_back(input_node);
GELOGD("Name of data node is %s.", op_desc->GetName().c_str());
} else {
getnext_nosink_nodes.emplace_back(input_node);
GELOGD("Name of getnext nosink is %s.", op_desc->GetName().c_str());
}
}
if (IsGetNextType(input_node)) {
@ -111,6 +113,8 @@ Status CheckSequenceOfData(ComputeGraphPtr &graph, const vector<NodePtr> &data_n
GE_CHECK_NOTNULL(data_node->GetOpDesc());
auto output_shape = data_node->GetOpDesc()->GetOutputDesc(0).GetShape().GetDims();
auto dynamic_dims = GetLocalOmgContext().user_input_dims.at(i).second;
GELOGD("The %zu data node is %s, node shape is %s, dynamic dim is %s.", i, data_node->GetName().c_str(),
formats::JoinToString(output_shape).c_str(), formats::JoinToString(dynamic_dims).c_str());
if (output_shape.empty() && dynamic_dims.size() == 1 && dynamic_dims.at(0) == 0) {
GELOGI("No need to check sequence for constant.");
continue;
@ -151,6 +155,8 @@ Status CheckSequenceOfGetnext(ComputeGraphPtr &graph, const vector<NodePtr> &get
for (size_t i = 0; i < data_count; ++i) {
auto output_shape = data_node->GetOpDesc()->GetOutputDesc(i).GetShape().GetDims();
auto dynamic_dims = GetLocalOmgContext().user_input_dims.at(i).second;
GELOGD("The %zu getnext node is %s, node shape is %s, dynamic dim is %s.", i, data_node->GetName().c_str(),
formats::JoinToString(output_shape).c_str(), formats::JoinToString(dynamic_dims).c_str());
if (output_shape.empty() && dynamic_dims.size() == 1 && dynamic_dims.at(0) == 0) {
GELOGI("No need to check sequence for constant.");
continue;

Loading…
Cancel
Save