Registo dos fornecedores de execução de Windows ML

Depois de os fornecedores de execução de Windows ML estarem instalados no dispositivo, precisa de os registar antes de poderem ser usados com o ONNX Runtime. Esta página cobre as APIs e padrões de registo.

Consulta EPs registados

Por defeito, apenas os fornecedores de execução incluídos estão presentes no ONNX Runtime. Pode ver que dispositivos EP estão disponíveis no ONNX Runtime chamando a API do GetEpDevices() ONNX Runtime.

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

Antes de registar qualquer um dos fornecedores de execução de Windows ML, este código irá gerar o seguinte:

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

Registe todos os EPs instalados

Para registar todos os provedores de execução do Windows ML disponíveis instalados na máquina para utilização com o ONNX Runtime, utilize a API RegisterCertifiedAsync().

var catalog = ExecutionProviderCatalog.GetDefault();

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

Depois de correr RegisterCertifiedAsync() num dispositivo Qualcomm compatível que já tem o fornecedor de execução QNN instalado, o GetEpDevices() ONNX Runtime incluirá agora dois dispositivos EP adicionais, e o código anterior irá gerar o seguinte...

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

Obtenha todos os EPs instalados

Para descobrir quais os fornecedores de execução que estão atualmente instalados no dispositivo do utilizador, pode verificar se o ReadyState do fornecedor de execução não NotPresenté .

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

Cada ExecutionProvider tem uma propriedade ReadyState que indica o seu estado atual no dispositivo. Compreender estes estados ajuda-o a determinar que ações a sua aplicação precisa de tomar.

ReadyState Definition Próximos passos
NotPresent O EP não está instalado no dispositivo cliente. Chame EnsureReadyAsync() para descarregar e instalar o EP e adicioná-lo ao gráfico de dependências em tempo de execução da sua aplicação.
NotReady O EP está instalado no dispositivo cliente, mas não foi adicionado ao gráfico de dependência em tempo de execução da aplicação. Chame EnsureReadyAsync() para adicionar o EP ao grafo de dependências em tempo de execução da sua aplicação.
Ready O EP está instalado no dispositivo cliente e foi adicionado ao gráfico de dependências em tempo de execução da sua aplicação. Chame TryRegister() para registar o EP no ONNX Runtime.

Registe um fornecedor instalado

Se houver um fornecedor de execução específico que a sua aplicação queira usar, pode registar apenas esse fornecedor sem registar todos os EPs presentes. Primeiro, deve ligar EnsureReadyAsync() para adicionar o fornecedor ao gráfico de dependência da sua aplicação. Depois, use TryRegister() para registar o EP no 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();
}

Próximos passos

Agora que já registou os fornecedores de execução para utilização com o ONNX Runtime, consulte Selecionar fornecedores de execução no ONNX Runtime para saber como usar esses fornecedores de execução no ONNX Runtime.

Consulte também