Регистрация поставщиков выполнения Windows ML

После установки поставщиков выполнения Машинного обучения Windows на устройстве необходимо зарегистрировать их, прежде чем их можно будет использовать с средой выполнения ONNX. На этой странице рассматриваются API регистрации и шаблоны.

Проверка зарегистрированных ЭП

По умолчанию в среде выполнения ONNX присутствуют только включенные поставщики выполнения . Вы можете увидеть, какие устройства EP доступны в среде выполнения ONNX, вызвав API среды выполнения GetEpDevices() ONNX.

// Get all ONNX Runtime EP devices
IReadOnlyList<OrtEpDevice> ortEpDevices = OrtEnv.Instance().GetEpDevices();

foreach (var ortEpDevice in ortEpDevices)
{
    Console.WriteLine($"{ortEpDevice.EpName} (DeviceType: {ortEpDevice.HardwareDevice.Type})");
}

Перед регистрацией любого из поставщиков выполнения Windows ML этот код будет выводить следующее:

CPUExecutionProvider (DeviceType: CPU)
DmlExecutionProvider (DeviceType: GPU)

Регистрация всех установленных EPS

Чтобы зарегистрировать все доступные поставщики выполнения Windows ML, установленные на компьютере для использования с средой выполнения ONNX, используйте RegisterCertifiedAsync() API.

var catalog = ExecutionProviderCatalog.GetDefault();

// Register providers already present on the machine
await catalog.RegisterCertifiedAsync();

После запуска RegisterCertifiedAsync() на совместимом устройстве Qualcomm, на котором уже установлен поставщик выполнения QNN, среда выполнения ONNX GetEpDevices() теперь будет включать два дополнительных устройства EP, и предыдущий код выдаст следующий результат...

CPUExecutionProvider (DeviceType: CPU)
DmlExecutionProvider (DeviceType: GPU)
QNNExecutionProvider (DeviceType: NPU)
QNNExecutionProvider (DeviceType: GPU)

Получение всех установленных EPS

Чтобы определить, какие поставщики выполнения в настоящее время установлены на устройстве пользователя, можно проверить, что ReadyState поставщика выполнения не равен NotPresent.

// Get all installed execution providers
IEnumerable<ExecutionProvider> installedProviders = ExecutionProviderCatalog
    .GetDefault()
    .FindAllProviders()
    .Where(i => i.ReadyState != ExecutionProviderReadyState.NotPresent);

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

ReadyState Определение Дальнейшие шаги
NotPresent EP не установлен на клиентском устройстве. Вызов EnsureReadyAsync() для скачивания и установки EP и добавления его в граф зависимостей среды выполнения приложения.
NotReady EP устанавливается на клиентском устройстве, но не добавлен в граф зависимостей среды выполнения приложения. Вызовите EnsureReadyAsync(), чтобы добавить EP в граф зависимостей времени выполнения вашего приложения.
Ready EP устанавливается на клиентском устройстве и добавлен в граф зависимостей среды выполнения приложения. Вызовите TryRegister(), чтобы зарегистрировать EP в ONNX Runtime.

Регистрация установленного поставщика

Если у вашего приложения есть конкретный провайдер выполнения, вы можете зарегистрировать только этого провайдера, не регистрируя все имеющиеся EP. Сначала необходимо вызвать EnsureReadyAsync(), чтобы добавить поставщика в граф зависимостей вашего приложения. Затем используйте TryRegister() для регистрации EP в onNX Runtime.

// Add the provider to the app's dependency graph if needed
var result = await installedProvider.EnsureReadyAsync();

// If adding to the app's dependency graph succeeded
if (result.Status == ExecutionProviderReadyResultState.Success)
{
    // Register it with ONNX Runtime
    bool registered = installedProvider.TryRegister();
}

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

Теперь, когда вы зарегистрировали поставщиков выполнения для использования с onNX Runtime, см. раздел "Выбор поставщиков выполнения" в onNX Runtime , чтобы узнать, как использовать эти поставщики выполнения в среде выполнения ONNX.

См. также