Partilhar via


Selecionar provedores de execução usando o Tempo de Execução ONNX incluído no Windows ML

O Tempo de Execução ONNX fornecido com o Windows ML permite que os aplicativos configurem provedores de execução (EPs) com base em Políticas de Dispositivo ou explicitamente, o que fornece mais controle sobre as opções do provedor e quais dispositivos devem ser usados.

Recomendamos começar com a seleção explícita de PEs para que você possa ter mais previsibilidade nos resultados. Depois de ter isso funcionando, você pode experimentar o uso de políticas de dispositivo para selecionar provedores de execução de uma forma natural e orientada a resultados.

Seleção explícita de PEs

Para selecionar explicitamente um EP, use a função do GetEpDevices ambiente para enumerar todos os dispositivos disponíveis e selecione os dispositivos EP que deseja usar. Em seguida, use AppendExecutionProvider (C#) ou AppendExecutionProvider_V2 (C++) para acrescentar dispositivos específicos e fornecer opções de provedor personalizadas para o EP desejado. Pode ver todos os nossos EPs suportados aqui.

Importante

Lista de dispositivos pode mudar dinamicamente: A lista de EpDevices pode mudar dinamicamente em tempo de execução quando os fornecedores de execução do Windows ML são atualizados automaticamente, ou quando os drivers são atualizados. O seu código deve ser resiliente para lidar com aparecimento de dispositivos EP novos ou inesperados, ou dispositivos EP que usava anteriormente que já não estão presentes.

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);

Navegue por todos os EPs disponíveis nos documentos de EPs suportados. Para obter mais detalhes sobre a seleção de EPs, consulte a documentação do ONNX Runtime OrtApi.

Usando políticas de dispositivo para seleção de provedor de execução

Além de selecionar explicitamente EPs, você também pode usar as Políticas de Dispositivo, que são uma maneira natural e orientada a resultados de especificar como você deseja que sua carga de trabalho de IA seja executada. Para fazer isso, use SessionOptions.SetEpSelectionPolicy, passando valores OrtExecutionProviderDevicePolicy . Há uma variedade de valores que você pode usar para seleção automática, como MAX_PERFORMANCE, PREFER_NPU, MAX_EFFICIENCYe muito mais. Consulte os documentos ONNX OrtExecutionProviderDevicePolicy para obter outros valores que você pode usar.

// 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);

Próximos passos

Depois de selecionar os provedores de execução, você estará pronto para executar a inferência em um modelo usando o ONNX Runtime!