From 5c05d75500609510309675812e94e3ad61b4d144 Mon Sep 17 00:00:00 2001 From: ljl Date: Wed, 6 Aug 2025 16:11:11 +0800 Subject: [PATCH] refactor resource manage --- .gitignore | 1 + mindspore-lite/python/src/pybind_module.cc | 5 ++-- mindspore-lite/src/extendrt/cxx_api/dlutils.h | 3 ++ .../src/extendrt/cxx_api/model/model.cc | 8 +----- .../src/extendrt/cxx_api/model/model_impl.cc | 10 +++---- .../src/extendrt/cxx_api/model/model_impl.h | 2 +- .../delegate/ascend_acl/acl_allocator.cc | 12 ++++++++ .../delegate/ascend_acl/acl_allocator.h | 1 + .../delegate/ascend_acl/acl_graph_executor.cc | 28 ++----------------- .../delegate/ascend_acl/acl_graph_executor.h | 6 ---- .../delegate/ascend_acl/acl_plugin_impl.cc | 4 --- .../ascend_acl/ascend_allocator_plugin.cc | 16 +++++++++++ .../ascend_acl/ascend_allocator_plugin.h | 2 ++ mindspore-lite/src/extendrt/infer_session.cc | 5 ---- mindspore-lite/src/extendrt/infer_session.h | 3 -- .../src/extendrt/session/delegate_session.cc | 3 +- .../src/extendrt/session/delegate_session.h | 4 +-- .../extendrt/session/lite_graph_executor.h | 1 - .../src/litert/cxx_api/model/model.cc | 7 ++--- .../src/litert/cxx_api/model/model_impl.cc | 6 ---- .../src/litert/cxx_api/model/model_impl.h | 1 - .../src/litert/cxx_api/train/model_impl.cc | 4 --- scripts/build/build_lite.sh | 1 + .../mindspore/0001-mindspore-api-fix.patch | 13 +++++++++ 24 files changed, 66 insertions(+), 80 deletions(-) create mode 100644 third_party/patch/mindspore/0001-mindspore-api-fix.patch diff --git a/.gitignore b/.gitignore index 3e490d36..7dd46810 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # MindSpore Lite build/ output/ +.idea/ ## third_party third_party/proto/caffe/caffe.proto diff --git a/mindspore-lite/python/src/pybind_module.cc b/mindspore-lite/python/src/pybind_module.cc index 9c8bcaca..78261804 100644 --- a/mindspore-lite/python/src/pybind_module.cc +++ b/mindspore-lite/python/src/pybind_module.cc @@ -14,6 +14,7 @@ * limitations under the License. */ #include "include/api/types.h" +#include "include/api/model.h" #include "pybind11/pybind11.h" #include "pybind11/numpy.h" #include "pybind11/stl.h" @@ -57,8 +58,6 @@ PYBIND11_MODULE(_c_lite_wrapper, m) { // call aclFinalize manually before exit. (void)py::module::import("atexit").attr("register")( - py::cpp_function{[&]() -> void { - return; - }}); + py::cpp_function{[&]() -> void { mindspore::Model::Finalize(); }}); } } // namespace mindspore::lite diff --git a/mindspore-lite/src/extendrt/cxx_api/dlutils.h b/mindspore-lite/src/extendrt/cxx_api/dlutils.h index 82cc502b..dd495936 100644 --- a/mindspore-lite/src/extendrt/cxx_api/dlutils.h +++ b/mindspore-lite/src/extendrt/cxx_api/dlutils.h @@ -69,14 +69,17 @@ inline std::string FindFileWithRecursion(const std::string &parent_dir, const st inline Status FindSoPath(const std::string &parent_dir, const std::string &target_so, std::string *target_so_path) { if (target_so_path == nullptr) { + MS_LOG(ERROR) << "Input target_so_path is nullptr."; return Status(kMEFailed, "Input target_so_path is nullptr."); } std::string found_target_so = FindFileWithRecursion(parent_dir, target_so); if (found_target_so.empty()) { + MS_LOG(ERROR) << "Could not find target so " + target_so + " in " + parent_dir; return Status(kMEFailed, "Could not find target so " + target_so + " in " + parent_dir); } auto realpath = lite::RealPath(found_target_so.c_str()); if (realpath.empty()) { + MS_LOG(ERROR) << "Get target so " + target_so + " real path failed, path: " + found_target_so; return Status(kMEFailed, "Get target so " + target_so + " real path failed, path: " + found_target_so); } *target_so_path = realpath; diff --git a/mindspore-lite/src/extendrt/cxx_api/model/model.cc b/mindspore-lite/src/extendrt/cxx_api/model/model.cc index c748f610..6146cc52 100644 --- a/mindspore-lite/src/extendrt/cxx_api/model/model.cc +++ b/mindspore-lite/src/extendrt/cxx_api/model/model.cc @@ -492,11 +492,5 @@ std::vector Model::GetModelInfo(const std::vector &key) { return StringToChar(it->second); } -Status Model::Finalize() { - if (impl_ == nullptr) { - MS_LOG(ERROR) << "Model implement is null!"; - return kLiteNullptr; - } - return impl_->Finalize(); -} +Status Model::Finalize() { return ModelImpl::Finalize(); } } // namespace mindspore diff --git a/mindspore-lite/src/extendrt/cxx_api/model/model_impl.cc b/mindspore-lite/src/extendrt/cxx_api/model/model_impl.cc index ed1b7617..3a8d113a 100644 --- a/mindspore-lite/src/extendrt/cxx_api/model/model_impl.cc +++ b/mindspore-lite/src/extendrt/cxx_api/model/model_impl.cc @@ -994,10 +994,10 @@ bool ModelImpl::CheckModelSupport(DeviceType device_type, ModelType model_type) } Status ModelImpl::Finalize() { - if (session_ == nullptr) { - MS_LOG(ERROR) << "session_ is nullptr,please build model first!"; - return kLiteError; - } - return session_->Finalize(); +#ifdef ENABLE_LITE_ACL + MS_LOG(INFO) << "Ascend acl finalize."; + return AscendAllocatorPlugin::GetInstance().Finalize(); +#endif + return kSuccess; } } // namespace mindspore diff --git a/mindspore-lite/src/extendrt/cxx_api/model/model_impl.h b/mindspore-lite/src/extendrt/cxx_api/model/model_impl.h index 4c9802b8..aed927a4 100644 --- a/mindspore-lite/src/extendrt/cxx_api/model/model_impl.h +++ b/mindspore-lite/src/extendrt/cxx_api/model/model_impl.h @@ -218,7 +218,7 @@ class ModelImpl { std::map GetModelInfo() const { return model_info_; } // release inference resource, only used for mindspore_lite's ascend backend now. - Status Finalize(); + static Status Finalize(); private: /// \brief Model build by buffer implementation, unified model build flow. diff --git a/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_allocator.cc b/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_allocator.cc index ccb4fba9..f255bea9 100644 --- a/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_allocator.cc +++ b/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_allocator.cc @@ -19,6 +19,8 @@ #include "src/common/log_adapter.h" #include "plugin/res_manager/ascend/symbol_interface/acl_rt_symbol.h" #include "plugin/res_manager/ascend/symbol_interface/symbol_utils.h" +#include "plugin/res_manager/ascend/symbol_interface/acl_symbol.h" +#include "extendrt/delegate/ascend_acl/acl_env_guard.h" namespace mindspore { AclAllocator *CreateAclAllocator() { @@ -289,4 +291,14 @@ Status AclAllocator::CopyDeviceDataToDevice(void *src_device_data, void *dst_dev } return kSuccess; } + +Status AclAllocator::Finalize() { + MS_LOG(INFO) << "start finalize."; + auto ret = AclEnvGuard::Finalize(); + if (!ret) { + MS_LOG(ERROR) << "finalize failed."; + return kLiteError; + } + return kSuccess; +} } // namespace mindspore diff --git a/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_allocator.h b/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_allocator.h index 7b98fe6e..7417b0e2 100644 --- a/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_allocator.h +++ b/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_allocator.h @@ -39,6 +39,7 @@ class AclAllocator : public AscendAllocatorPluginImpl { Status CopyHostDataToDevice(void *host_data, void *device_data, size_t data_size) override; Status CopyDeviceDataToDevice(void *src_device, void *dst_device, size_t src_data_size, size_t dst_data_size, int src_device_id, int dst_device_id) override; + Status Finalize() override; private: // 64 byte aligned. diff --git a/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_graph_executor.cc b/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_graph_executor.cc index 73076c82..fe91d4ab 100644 --- a/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_graph_executor.cc +++ b/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_graph_executor.cc @@ -30,30 +30,6 @@ namespace { constexpr auto kProviderAcl = "litert"; } // namespace -Status AclGraphExecutor::Init() { - auto device_list = context_->MutableDeviceInfo(); - for (const auto &device_info : device_list) { - if (device_info == nullptr) { - MS_LOG(ERROR) << "Device info get from Context cannot be nullptr"; - return kLiteError; - } - if (device_info->GetDeviceType() == DeviceType::kAscend) { - bool is_registered = AscendAllocatorPlugin::GetInstance().Register(); - if (!is_registered) { - MS_LOG(ERROR) << "AscendAllocatorPlugin failed to register, cannot do acl memory operations"; - return kLiteError; - } - auto ascend_device_info = device_info->Cast(); - if (ascend_device_info == nullptr) { - MS_LOG(ERROR) << "Failed to cast device info to AscendDeviceInfo"; - return kLiteError; - } - return kSuccess; - } - } - return kSuccess; -} - std::shared_ptr AclGraphExecutor::GenAclOptions() { auto acl_options_ptr = std::make_shared(); if (acl_options_ptr == nullptr) { @@ -208,8 +184,8 @@ bool AclGraphExecutor::RunGraph(uint32_t graph_id, const std::vector AclGraphExecutorCreator(const std::shared_ptr &ctx, const ConfigInfos &config_infos) { auto acl_executor = std::make_shared(ctx, config_infos); - if (acl_executor == nullptr && acl_executor->Init() != kSuccess) { - MS_LOG(ERROR) << "Failed to init GeGraphExecutor"; + if (acl_executor == nullptr) { + MS_LOG(ERROR) << "Failed to create AclGraphExecutor"; return nullptr; } return acl_executor; diff --git a/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_graph_executor.h b/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_graph_executor.h index fa7bf389..2acae1c3 100644 --- a/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_graph_executor.h +++ b/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_graph_executor.h @@ -49,12 +49,6 @@ class AclGraphExecutor : public LiteGraphExecutor { const std::vector GetOutputDataType() { return model_infer_->GetOutputDataType(); } - Status Init(); - - void Finalize() override { - AclEnvGuard::Finalize(); - } - private: Status BuildCustomAscendKernel(const CNodePtr &cnode); std::shared_ptr GenAclOptions(); diff --git a/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_plugin_impl.cc b/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_plugin_impl.cc index 92956be2..9702554a 100644 --- a/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_plugin_impl.cc +++ b/mindspore-lite/src/extendrt/delegate/ascend_acl/acl_plugin_impl.cc @@ -29,10 +29,6 @@ std::shared_ptr AscendAclExecutorPluginImpl::InitAclGraphExecu MS_LOG(ERROR) << "Failed to create GeGraphExecutor"; return nullptr; } - if (!acl_graph_executor->Init()) { - MS_LOG(ERROR) << "Failed to init ge graph executor"; - return nullptr; - } return acl_graph_executor; } diff --git a/mindspore-lite/src/extendrt/delegate/ascend_acl/ascend_allocator_plugin.cc b/mindspore-lite/src/extendrt/delegate/ascend_acl/ascend_allocator_plugin.cc index 689a3133..22b829b1 100644 --- a/mindspore-lite/src/extendrt/delegate/ascend_acl/ascend_allocator_plugin.cc +++ b/mindspore-lite/src/extendrt/delegate/ascend_acl/ascend_allocator_plugin.cc @@ -236,4 +236,20 @@ Status AscendAllocatorPlugin::CopyHostDataToDevice(void *host_data, void *device #endif return kSuccess; } + +Status AscendAllocatorPlugin::Finalize() { +#if !defined(_WIN32) + if (!is_registered_) { + MS_LOG(ERROR) << "AscendAllocatorPlugin is not registered."; + return kLiteError; + } + if (ascend_allocator_plugin_impl_ == nullptr) { + MS_LOG(ERROR) << "ascend_allocator_plugin_impl_ is nullptr."; + return kLiteError; + } + return ascend_allocator_plugin_impl_->Finalize(); +#endif + return kSuccess; +} + } // namespace mindspore diff --git a/mindspore-lite/src/extendrt/delegate/ascend_acl/ascend_allocator_plugin.h b/mindspore-lite/src/extendrt/delegate/ascend_acl/ascend_allocator_plugin.h index c61d35a9..c5df46f2 100644 --- a/mindspore-lite/src/extendrt/delegate/ascend_acl/ascend_allocator_plugin.h +++ b/mindspore-lite/src/extendrt/delegate/ascend_acl/ascend_allocator_plugin.h @@ -34,6 +34,7 @@ class AscendAllocatorPluginImpl { virtual Status CopyHostDataToDevice(void *host_data, void *device_data, size_t data_size) = 0; virtual Status CopyDeviceDataToDevice(void *src_device, void *dst_device, size_t src_data_size, size_t dst_data_size, int src_device_id, int dst_device_id) = 0; + virtual Status Finalize() = 0; }; class MS_API AscendAllocatorPlugin { @@ -51,6 +52,7 @@ class MS_API AscendAllocatorPlugin { Status CopyHostDataToDevice(void *host_data, void *device_data, size_t data_size); Status CopyDeviceDataToDevice(void *src_device, void *dst_device, size_t src_data_size, size_t dst_data_size, int src_device_id, int dst_device_id); + Status Finalize(); private: AscendAllocatorPlugin(); diff --git a/mindspore-lite/src/extendrt/infer_session.cc b/mindspore-lite/src/extendrt/infer_session.cc index 6479c0d7..e821f647 100644 --- a/mindspore-lite/src/extendrt/infer_session.cc +++ b/mindspore-lite/src/extendrt/infer_session.cc @@ -117,9 +117,4 @@ SessionType InferSession::SelectSession(const std::shared_ptr &context, } return kDefaultSession; } - -Status InferSession::Finalize() { - MS_LOG(INFO) << "Finalize is only implemented in single_op_session now."; - return kLiteError; -} } // namespace mindspore diff --git a/mindspore-lite/src/extendrt/infer_session.h b/mindspore-lite/src/extendrt/infer_session.h index 2854a664..9190b501 100644 --- a/mindspore-lite/src/extendrt/infer_session.h +++ b/mindspore-lite/src/extendrt/infer_session.h @@ -142,9 +142,6 @@ class InferSession : public std::enable_shared_from_this { return kLiteError; } - // release inference resource, only used for mindspore_lite's ascend backend now. - virtual Status Finalize(); - protected: /// \brief Handle session according to context. /// diff --git a/mindspore-lite/src/extendrt/session/delegate_session.cc b/mindspore-lite/src/extendrt/session/delegate_session.cc index 25ef5384..ab1dfdce 100644 --- a/mindspore-lite/src/extendrt/session/delegate_session.cc +++ b/mindspore-lite/src/extendrt/session/delegate_session.cc @@ -383,7 +383,8 @@ static std::shared_ptr DelegateSessionCreator(const std::shared_pt return nullptr; } } else { - if (!lite::AscendAclExecutorPlugin::GetInstance().Register()) { + if (!lite::AscendAclExecutorPlugin::GetInstance().Register() || + !AscendAllocatorPlugin::GetInstance().Register()) { MS_LOG(WARNING) << "Failed to register Ascend ACL plugin"; return nullptr; } diff --git a/mindspore-lite/src/extendrt/session/delegate_session.h b/mindspore-lite/src/extendrt/session/delegate_session.h index a4694059..4c13e4c7 100644 --- a/mindspore-lite/src/extendrt/session/delegate_session.h +++ b/mindspore-lite/src/extendrt/session/delegate_session.h @@ -24,6 +24,7 @@ #include "extendrt/infer_session.h" #include "runtime/hardware/device_context.h" #include "extendrt/session/lite_graph_executor.h" +#include "src/extendrt/delegate/ascend_acl/ascend_allocator_plugin.h" namespace mindspore { /// \brief Delegate Session implementation, use delegate api for inference. @@ -64,8 +65,7 @@ class GraphSinkSession : public InferSession { Status UpdateWeights(const std::vector>> &weights) override; Status Finalize() { MS_LOG(INFO) << "Finalize is only implemented in single_op_session now."; - graph_executor_->Finalize(); - return kSuccess; + return AscendAllocatorPlugin::GetInstance().Finalize(); } private: diff --git a/mindspore-lite/src/extendrt/session/lite_graph_executor.h b/mindspore-lite/src/extendrt/session/lite_graph_executor.h index 00c89c30..df61c10e 100644 --- a/mindspore-lite/src/extendrt/session/lite_graph_executor.h +++ b/mindspore-lite/src/extendrt/session/lite_graph_executor.h @@ -33,7 +33,6 @@ class LiteGraphExecutor { virtual ~LiteGraphExecutor() = default; virtual void Initialize() { return; } - virtual void Finalize() { return; } virtual bool CompileGraph(const std::shared_ptr &graph, const std::map &compile_options, uint32_t *graph_id) { diff --git a/mindspore-lite/src/litert/cxx_api/model/model.cc b/mindspore-lite/src/litert/cxx_api/model/model.cc index a6a7ab7a..ea5aed46 100644 --- a/mindspore-lite/src/litert/cxx_api/model/model.cc +++ b/mindspore-lite/src/litert/cxx_api/model/model.cc @@ -620,10 +620,7 @@ std::vector Model::GetModelInfo(const std::vector &key) { } Status Model::Finalize() { - if (impl_ == nullptr) { - MS_LOG(ERROR) << "Model implement is null!"; - return kLiteNullptr; - } - return impl_->Finalize(); + MS_LOG(INFO) << "Finalize is only support for mindspore_lite's ascend backend."; + return kSuccess; } } // namespace mindspore diff --git a/mindspore-lite/src/litert/cxx_api/model/model_impl.cc b/mindspore-lite/src/litert/cxx_api/model/model_impl.cc index 5f9a72a0..272c01dd 100644 --- a/mindspore-lite/src/litert/cxx_api/model/model_impl.cc +++ b/mindspore-lite/src/litert/cxx_api/model/model_impl.cc @@ -1048,10 +1048,4 @@ int ModelImpl::ModelDeObfuscate() { } return RET_OK; } - -Status ModelImpl::Finalize() { - MS_LOG(INFO) << "Finalize is only support for mindspore_lite's ascend backend."; - return kSuccess; -} - } // namespace mindspore diff --git a/mindspore-lite/src/litert/cxx_api/model/model_impl.h b/mindspore-lite/src/litert/cxx_api/model/model_impl.h index 984a9489..f8943afc 100644 --- a/mindspore-lite/src/litert/cxx_api/model/model_impl.h +++ b/mindspore-lite/src/litert/cxx_api/model/model_impl.h @@ -114,7 +114,6 @@ class ModelImpl { } std::vector GetMetrics() { return metrics_; } const lite::LiteSession *GetSession() const { return session_.get(); } - Status Finalize(); protected: // Utility methods diff --git a/mindspore-lite/src/litert/cxx_api/train/model_impl.cc b/mindspore-lite/src/litert/cxx_api/train/model_impl.cc index 02e7b60e..726b0585 100644 --- a/mindspore-lite/src/litert/cxx_api/train/model_impl.cc +++ b/mindspore-lite/src/litert/cxx_api/train/model_impl.cc @@ -100,8 +100,4 @@ Status ModelImpl::ConvertCallbacks(Model *model, std::vector *i } return kSuccess; } -Status ModelImpl::Finalize() { - MS_LOG(INFO) << "Finalize is only support for mindspore_lite's ascend inference backend."; - return kSuccess; -} } // namespace mindspore diff --git a/scripts/build/build_lite.sh b/scripts/build/build_lite.sh index 5ef24a8d..7fbb9d72 100755 --- a/scripts/build/build_lite.sh +++ b/scripts/build/build_lite.sh @@ -926,6 +926,7 @@ else CMAKE_ARGS="${CMAKE_ARGS} -DENABLE_FAST_HASH_TABLE=OFF" fi +cd ${BASEPATH}/mindspore && git apply ${BASEPATH}/third_party/patch/mindspore/0001-mindspore-api-fix.patch --whitespace=fix get_version CMAKE_ARGS="${CMAKE_ARGS} -DVERSION_STR=${VERSION_STR}" diff --git a/third_party/patch/mindspore/0001-mindspore-api-fix.patch b/third_party/patch/mindspore/0001-mindspore-api-fix.patch new file mode 100644 index 00000000..efd2ab7e --- /dev/null +++ b/third_party/patch/mindspore/0001-mindspore-api-fix.patch @@ -0,0 +1,13 @@ +diff --git a/include/api/model.h b/include/api/model.h +index d805b03d..e11e0207 100644 +--- a/include/api/model.h ++++ b/include/api/model.h +@@ -378,7 +378,7 @@ class MS_API Model { + /// + /// \return Status of the operation. + // release inference resourcec, only used for mindspore_lite's ascend backend now. +- Status Finalize(); ++ static Status Finalize(); + + private: + friend class Serialization; -- Gitee