diff --git a/onnxruntime/core/providers/openvino/contexts.h b/onnxruntime/core/providers/openvino/contexts.h index 07b09899ac214..a0dc33ae657c8 100644 --- a/onnxruntime/core/providers/openvino/contexts.h +++ b/onnxruntime/core/providers/openvino/contexts.h @@ -61,11 +61,22 @@ class SharedContext : public WeakSingleton { size_t weights_size_; }; + void clear() { + metadata.clear(); + metadata_filepath.clear(); + external_weight_filename.clear(); + mapped_weights.reset(); + } + fs::path external_weight_filename; std::unique_ptr mapped_weights; Metadata::Map metadata; fs::path metadata_filepath; } shared_weights; + + void clear() { + shared_weights.clear(); + } }; using config_t = std::map; @@ -109,6 +120,7 @@ struct ProviderInfo { bool so_context_embed_mode{false}; // ORT session option bool so_share_ep_contexts{false}; // ORT session option fs::path so_context_file_path{}; // ORT session option + bool so_stop_share_ep_contexts{false}; // ORT session option const ConfigOptions* config_options{NULL}; const std::unordered_set valid_provider_keys = {"device_type", "device_id", "device_luid", "cache_dir", "precision", "load_config", "context", "num_of_threads", "model_priority", "num_streams", "enable_opencl_throttling", "enable_qdq_optimizer", diff --git a/onnxruntime/core/providers/openvino/openvino_execution_provider.cc b/onnxruntime/core/providers/openvino/openvino_execution_provider.cc index a0fa885cbfc38..ee5298d5b08e2 100644 --- a/onnxruntime/core/providers/openvino/openvino_execution_provider.cc +++ b/onnxruntime/core/providers/openvino/openvino_execution_provider.cc @@ -65,6 +65,7 @@ OpenVINOExecutionProvider::~OpenVINOExecutionProvider() { backend_manager.ShutdownBackendManager(); } backend_managers_.clear(); + shared_context_.reset(); } std::vector> @@ -214,6 +215,12 @@ common::Status OpenVINOExecutionProvider::Compile( file << metadata; } + if (session_context_.so_stop_share_ep_contexts) { + if (shared_context_) { + shared_context_->clear(); + } + } + return status; } diff --git a/onnxruntime/core/providers/openvino/openvino_provider_factory.cc b/onnxruntime/core/providers/openvino/openvino_provider_factory.cc index 1a10d9849d5cc..f26da37fa7d7e 100644 --- a/onnxruntime/core/providers/openvino/openvino_provider_factory.cc +++ b/onnxruntime/core/providers/openvino/openvino_provider_factory.cc @@ -28,6 +28,7 @@ void ParseConfigOptions(ProviderInfo& pi) { pi.so_context_embed_mode = pi.config_options->GetConfigOrDefault(kOrtSessionOptionEpContextEmbedMode, "0") == "1"; pi.so_share_ep_contexts = pi.config_options->GetConfigOrDefault(kOrtSessionOptionShareEpContexts, "0") == "1"; pi.so_context_file_path = pi.config_options->GetConfigOrDefault(kOrtSessionOptionEpContextFilePath, ""); + pi.so_stop_share_ep_contexts = pi.config_options->GetConfigOrDefault(kOrtSessionOptionStopShareEpContexts, "0") == "1"; if (pi.so_share_ep_contexts) { ov::AnyMap map;