Skip to content

Commit 0bad3d7

Browse files
authored
Updated load_config mapping to make it a passthrough to OV properties (#782)
1 parent e634654 commit 0bad3d7

File tree

1 file changed

+16
-94
lines changed

1 file changed

+16
-94
lines changed

onnxruntime/core/providers/openvino/backends/basic_backend.cc

Lines changed: 16 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -214,107 +214,29 @@ void BasicBackend::PopulateConfigValue(ov::AnyMap& device_config) {
214214
if (!session_context_.load_config.empty()) {
215215
const std::map<std::string, ov::AnyMap>& target_config = session_context_.load_config;
216216

217-
if ((session_context_.device_type.find("NPU") != std::string::npos) && session_context_.enable_causallm) {
218-
if (target_config.find("NPU") != target_config.end()) {
219-
auto npu_genai_config = target_config.at("NPU");
220-
CausalLMConfig().ApplyConfig(npu_genai_config, device_config);
221-
} else {
222-
LOGS_DEFAULT(WARNING) << "ORT GenAI CausalLMConfig Configuration not found.";
223-
}
224-
}
225-
226-
if (session_context_.device_type.find("NPU") != std::string::npos) {
227-
auto npuw_config = target_config.at("NPU");
228-
229-
// Check if "NPU_USE_NPUW" exists and is set to "YES"
230-
auto npu_use_npuw_it = npuw_config.find("NPU_USE_NPUW");
231-
if (npu_use_npuw_it != npuw_config.end() &&
232-
npu_use_npuw_it->second.is<std::string>() &&
233-
npu_use_npuw_it->second.as<std::string>() == "YES") {
234-
// Only add NPUW-related keys if NPU_USE_NPUW is "YES"
235-
for (const auto& [key, value] : npuw_config) {
236-
if (key.find("NPUW") != std::string::npos) {
237-
if (!value.is<std::string>()) {
238-
LOGS_DEFAULT(ERROR) << "Invalid value type for key: " << key;
239-
continue;
240-
}
241-
device_config[key] = value;
242-
}
243-
}
244-
} else {
245-
// Check if there are any "NPUW" keys and log a warning
246-
if (std::any_of(npuw_config.begin(), npuw_config.end(),
247-
[&](const auto& pair) { return pair.first.find("NPUW") != std::string::npos; })) {
248-
LOGS_DEFAULT(WARNING) << "Skipping NPUW-related configurations as NPU_USE_NPUW is not set to 'YES'.";
249-
}
250-
}
251-
}
252-
auto find_device_type_mode = [&](const std::string& device_type) -> std::string {
253-
std::string device_mode = "";
254-
auto delimiter_pos = device_type.find(':');
255-
if (delimiter_pos != std::string::npos) {
256-
std::stringstream str_stream(device_type.substr(0, delimiter_pos));
257-
std::getline(str_stream, device_mode, ',');
258-
}
259-
return device_mode;
260-
};
217+
// Extract device names from device string and apply their configs
218+
// Examples: "GPU" -> ["GPU"], "AUTO:GPU.0,CPU" -> ["AUTO", "GPU", "CPU"]
219+
auto apply_device_config = [&](std::string_view device) {
220+
if (device.empty()) return;
261221

262-
// Parse device types like "AUTO:CPU,GPU" and extract individual devices
263-
auto parse_individual_devices = [&](const std::string& device_type) -> std::vector<std::string> {
264-
std::vector<std::string> devices;
265-
auto delimiter_pos = device_type.find(':');
266-
if (delimiter_pos != std::string::npos) {
267-
std::stringstream str_stream(device_type.substr(delimiter_pos + 1));
268-
std::string device;
269-
while (std::getline(str_stream, device, ',')) {
270-
devices.emplace_back(device);
271-
}
272-
} else {
273-
devices.emplace_back(device_type);
274-
}
275-
return devices;
276-
};
222+
// Remove device index: "GPU.0" -> "GPU"
223+
auto base_device = device.substr(0, device.find('.'));
277224

278-
// Set properties, Validation will be handled by OpenVINO Core
279-
auto set_target_properties = [&](const std::string& device, const ov::AnyMap& config_options) {
280-
for (const auto& [key, value] : config_options) {
281-
// Update the device_config map from the target_config to avoid load_config being overridden
282-
// by the device_config set by the OpenVINO EP.
283-
auto it = device_config.find(key);
284-
if (it != device_config.end()) {
285-
it->second = value;
286-
}
287-
if ((key.find("NPUW") != std::string::npos) ||
288-
((it != device_config.end()) && session_context_.enable_causallm)) {
289-
continue;
225+
if (auto config_it = target_config.find(std::string(base_device)); config_it != target_config.end()) {
226+
for (const auto& [key, value] : config_it->second) {
227+
device_config[key] = value;
290228
}
291-
OVCore::Get()->core.set_property(device, ov::AnyMap{{key, value}});
292229
}
293230
};
294231

295-
// Check if the device type is AUTO, HETERO, or MULTI
296-
if (session_context_.device_type.find("AUTO") == 0 ||
297-
session_context_.device_type.find("HETERO") == 0 ||
298-
session_context_.device_type.find("MULTI") == 0) {
299-
//// Parse to get the device mode (e.g., "AUTO:CPU,GPU" -> "AUTO")
300-
std::unordered_set<std::string> supported_mode = {"AUTO", "HETERO", "MULTI"};
301-
auto device_mode = find_device_type_mode(session_context_.device_type);
302-
ORT_ENFORCE(supported_mode.find(device_mode) != supported_mode.end(), " Invalid device mode is passed : ", session_context_.device_type);
303-
// Parse individual devices (e.g., "AUTO:CPU,GPU" -> ["CPU", "GPU"])
304-
auto individual_devices = parse_individual_devices(session_context_.device_type);
305-
if (!device_mode.empty()) individual_devices.emplace_back(device_mode);
306-
307-
// Set properties only for individual devices (e.g., "CPU", "GPU")
308-
for (const std::string& device : individual_devices) {
309-
if (target_config.count(device)) {
310-
// Set properties for the device
311-
set_target_properties(device, target_config.at(device));
232+
// Parse device string by splitting on ':' and ',' delimiters
233+
const auto& device_str = session_context_.device_type;
234+
for (size_t start = 0, pos = 0; pos <= device_str.size(); ++pos) {
235+
if (pos == device_str.size() || device_str[pos] == ':' || device_str[pos] == ',') {
236+
if (pos > start) {
237+
apply_device_config(std::string_view(device_str).substr(start, pos - start));
312238
}
313-
}
314-
} else {
315-
if (target_config.count(session_context_.device_type)) {
316-
set_target_properties(session_context_.device_type,
317-
target_config.at(session_context_.device_type));
239+
start = pos + 1;
318240
}
319241
}
320242
}

0 commit comments

Comments
 (0)