Выбор поставщиков выполнения с помощью среды выполнения ONNX, включенной в Windows ML

Среда выполнения ONNX, поставляемая с Windows ML, позволяет приложениям настраивать поставщики выполнения (EPS) на основе политик устройств или явным образом, что обеспечивает более контроль над параметрами поставщика и устройствами, которые следует использовать.

Мы рекомендуем начать с явного выбора EPS, чтобы вы могли иметь более прогнозируемость в результатах. После того как это заработает, вы можете поэкспериментировать с использованием политик устройств для естественного, ориентированного на результат выбора поставщиков выполнения.

Явный выбор EP

Чтобы явно выбрать EP, используйте функцию среды GetEpDevices для перечисления всех доступных устройств и выбора устройств EP, которые вы хотите использовать. Затем используйте AppendExecutionProvider (C#) или AppendExecutionProvider_V2 (C++) для добавления определенных устройств и предоставления настраиваемых параметров поставщика в нужный EP. Здесь вы можете увидеть все поддерживаемые EP.

Это важно

Список устройств может динамически изменяться: если вы используете поставщиков выполнения Windows ML, список EpDevices может динамически изменяться во время выполнения при автоматическом обновлении поставщиков выполнения Windows ML или при обновлении драйверов. Код должен быть устойчивым, чтобы обрабатывать новые или непредвиденные устройства EP, которые появляются, или если устройства EP, которые вы использовали ранее, больше не присутствуют.

using Microsoft.ML.OnnxRuntime;
using System;
using System.Linq;
using System.Collections.Generic;

// Assuming you've created an OrtEnv named 'ortEnv'
// 1. Enumerate devices
var epDevices = ortEnv.GetEpDevices();

// 2. Filter to your desired execution provider and device type
var selectedEpDevices = epDevices
    .Where(d =>
        d.EpName == "ReplaceWithExecutionProvider"
        && d.HardwareDevice.Type == OrtHardwareDeviceType.NPU)
    .ToList();

if (selectedEpDevices.Count == 0)
{
    throw new InvalidOperationException("ReplaceWithExecutionProvider is not available on this system.");
}

// 3. Configure provider-specific options (varies based on EP)
// and append the EP with the correct devices (varies based on EP)
var sessionOptions = new SessionOptions();
var epOptions = new Dictionary<string,string>{ ["provider_specific_option"] = "4" };
sessionOptions.AppendExecutionProvider(ortEnv, new[] { selectedEpDevices.First() }, epOptions);

Просмотрите всех доступных поставщиков исполнения в документации по поддерживаемым EP. Дополнительные сведения о выборе EP см. в документации ONNX Runtime OrtApi.

Использование политик устройств для выбора поставщика выполнения

Помимо явного выбора ЭП, вы также можете использовать политики устройств, которые естественно ориентированы на результат и позволяют указать, как должна выполняться рабочая нагрузка ИИ. Для этого используйте SessionOptions.SetEpSelectionPolicy, передавая OrtExecutionProviderDevicePolicy значения. Существует множество значений, которые можно использовать для автоматического выбора, например MAX_PERFORMANCE, PREFER_NPUи MAX_EFFICIENCYмногое другое. Обратитесь к документации ONNX OrtExecutionProviderDevicePolicy для получения информации о других значениях, которые вы можете использовать.

// Configure the session to select an EP and device for MAX_EFFICIENCY which typically
// will choose an NPU if available with a CPU fallback.
var sessionOptions = new SessionOptions();
sessionOptions.SetEpSelectionPolicy(ExecutionProviderDevicePolicy.MAX_EFFICIENCY);

Дальнейшие шаги

Выбрав поставщиков выполнения, вы можете выполнить вывод модели с помощью среды выполнения ONNX!