Compartir a través de


Selección de proveedores de ejecución mediante el entorno de ejecución de ONNX incluido en Windows ML

El entorno de ejecución de ONNX incluido con Windows ML permite a las aplicaciones configurar proveedores de ejecución (EPs) en función de las directivas de dispositivo o explícitamente, lo que proporciona más control sobre las opciones de proveedor y qué dispositivos se deben usar.

Se recomienda comenzar con la selección explícita de direcciones IP para que pueda tener más previsibilidad en los resultados. Una vez que haya funcionado, puede experimentar con el uso de directivas de dispositivo para seleccionar proveedores de ejecución de forma natural y orientada a resultados.

Selección explícita de direcciones IP

Para seleccionar explícitamente un EP, use la función del GetEpDevices entorno para enumerar todos los dispositivos disponibles y seleccione los dispositivos EP que desea usar. A continuación, use AppendExecutionProvider (C#) o AppendExecutionProvider_V2 (C++) para anexar dispositivos específicos y proporcionar opciones de proveedor personalizadas al EP deseado. Puede ver todos nuestros EP compatibles aquí.

Importante

Lista de dispositivos que pueden cambiar dinámicamente: la lista de EpDevices puede cambiar dinámicamente en tiempo de ejecución cuando los proveedores de ejecución de Windows ML se actualizan automáticamente o cuando se actualizan los controladores. El código debe ser resistente para controlar los dispositivos EP nuevos o inesperados que aparecen o los dispositivos EP que estaba usando anteriormente ya no están 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);

Examine todos los EPs disponibles en los documentos de EPs admitidos . Para obtener más información sobre la selección de EP, consulte la documentación de ONNX Runtime OrtApi.

Uso de directivas de dispositivo para la selección del proveedor de ejecución

Además de seleccionar explícitamente direcciones IP, también puede usar directivas de dispositivo, que son una manera natural y orientada a resultados para especificar cómo desea que se ejecute la carga de trabajo de IA. Para ello, use SessionOptions.SetEpSelectionPolicy, pasando OrtExecutionProviderDevicePolicy valores. Hay una variedad de valores que puede usar para la selección automática, como MAX_PERFORMANCE, PREFER_NPU, MAX_EFFICIENCYy mucho más. Consulte los documentos de ONNX OrtExecutionProviderDevicePolicy para ver otros valores que puede 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);

Pasos siguientes

Después de seleccionar proveedores de ejecución, está listo para ejecutar la inferencia en un modelo mediante ONNX Runtime.