diff --git a/mindspore-src/source/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc b/mindspore-src/source/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc index 4cf876e259e9f630f358eb37dbc860fa56e68a68..8ad0436969dcae2ebecc86b583b64b95a51ce813 100644 --- a/mindspore-src/source/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc +++ b/mindspore-src/source/mindspore/lite/src/litert/delegate/nnrt/nnrt_delegate.cc @@ -271,6 +271,7 @@ Status NNRTDelegate::BuildNormalModel(DelegateModel *model) { auto ret = CreateLiteGraphForNNRTSubgraph(nnrt_subgraph_ranges, &sub_lite_graphs); if (ret != kSuccess) { OH_NNModel_Destroy(&full_model); + for (auto *g : sub_lite_graphs) { FreeLiteGraph(&g); } MS_LOG(WARNING) << "Create NNRT sub LiteGraph failed, fallback to CPU"; return kSuccess; } @@ -280,12 +281,14 @@ Status NNRTDelegate::BuildNormalModel(DelegateModel *model) { if (ret != kSuccess) { OH_NNModel_Destroy(&full_model); MS_LOG(WARNING) << "Create NNRT subgraph kernel failed, fallback to CPU"; + for (auto *g : sub_lite_graphs) { FreeLiteGraph(&g); } return kSuccess; } ReplaceNNRTKernelsInDelegateModel(model, nnrt_subgraph_ranges, nnrt_subgraph_kernels); OH_NNModel_Destroy(&full_model); MS_LOG(INFO) << "NNRTDelegate build success."; + for (auto *g : sub_lite_graphs) { FreeLiteGraph(&g); } return kSuccess; } @@ -1012,6 +1015,12 @@ void NNRTDelegate::FreeLiteGraph(lite::LiteGraph **liteGraph) { } NNRTDelegate::~NNRTDelegate() { + #ifdef SUPPORT_NNRT_METAGRAPH + if (hiai_handle_ != nullptr) { + (void)mindspore::lite::UnLoadHiaiFLibrary(hiai_handle_); + hiai_handle_ = nullptr; + } + #endif for (size_t i = 0; i < nn_executor_list_.size(); i++) { if (nn_executor_list_[i] != nullptr) { MS_LOG(INFO) << "start NNExecutor Destroy."; @@ -1020,6 +1029,7 @@ NNRTDelegate::~NNRTDelegate() { } } if (lite_graph_ != nullptr) { + FreeLiteGraph(&lite_graph_); MS_LOG(ERROR) << "Delete NNRTDelegate."; } for (auto iter : dequant_schema_tensors_buffer_map_) { @@ -1029,6 +1039,7 @@ NNRTDelegate::~NNRTDelegate() { } } dequant_schema_tensors_buffer_map_.clear(); + replaced_schema_tensors_.clear(); } } // namespace lite } // namespace mindspore