Fix the power mode issue for the case that run from context model (#23330)

### Description
Set power config id and the default power mode from provider option (if there is) for main thread, otherwise it will mess up the power mode if user just create session without run it.

The issue fixed by this PR is:
Process 1 just creates the session without run it.
Then, start process 2 which creates the session and run it with power saver mode. The result is with burst power mode.
This commit is contained in:
Hector Li 2025-01-16 09:07:54 -08:00 committed by GitHub
parent 82aa355904
commit afbee6eb0c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -707,6 +707,12 @@ QNNExecutionProvider::GetCapability(const onnxruntime::GraphViewer& graph_viewer
return result;
}
if (IsNpuBackend(qnn_backend_manager_->GetQnnBackendType())) {
// Set the power config id and the default power mode from provider option for main thread,
// otherwise it will mess up the power mode if user just create session without run it.
GetPerThreadContext();
}
// Report error if QNN CPU backend is loaded while CPU fallback is disabled
if (disable_cpu_ep_fallback_ && qnn_backend_manager_->GetQnnBackendType() == qnn::QnnBackendType::CPU) {
LOGS(logger, ERROR) << "Qnn CPU backend is loaded while CPU fallback is disabled.";
@ -905,7 +911,6 @@ Status QNNExecutionProvider::CompileFromOrtGraph(const std::vector<FusedNodeAndG
Status QNNExecutionProvider::Compile(const std::vector<FusedNodeAndGraph>& fused_nodes_and_graphs,
std::vector<NodeComputeInfo>& node_compute_funcs) {
const auto& logger = *GetLogger();
bool is_qnn_ctx_model = qnn::IsFusedGraphHasCtxNode(fused_nodes_and_graphs);
onnxruntime::PathString context_cache_path;