Partager via


Sélectionner des fournisseurs d’exécution à l’aide du runtime ONNX inclus dans Windows ML

Le runtime ONNX fourni avec Windows ML permet aux applications de configurer des fournisseurs d’exécution (EPs) en fonction de stratégies d’appareil ou explicitement, ce qui offre un contrôle plus grand sur les options du fournisseur et sur les appareils à utiliser.

Nous vous recommandons de commencer par une sélection explicite d’EPs afin que vous puissiez avoir plus de prévisibilité dans les résultats. Une fois que vous avez ce travail, vous pouvez tester l’utilisation de stratégies d’appareil pour sélectionner des fournisseurs d’exécution de manière naturelle et orientée vers les résultats.

Sélection explicite d’EPs

Pour sélectionner explicitement un EP, utilisez la fonction de GetEpDevices l’environnement pour énumérer tous les appareils disponibles, puis sélectionnez les appareils EP que vous souhaitez utiliser. AppendExecutionProvider Utilisez ensuite (C#) ou AppendExecutionProvider_V2 (C++) pour ajouter des appareils spécifiques et fournir des options de fournisseur personnalisées à l’EP souhaité. Vous pouvez voir tous nos EPS pris en charge ici.

Important

La liste des appareils peut changer dynamiquement : la liste d’EpDevices peut changer dynamiquement lors de l’exécution lorsque les fournisseurs d’exécution Windows ML sont automatiquement mis à jour ou lorsque les pilotes sont mis à jour. Votre code doit être résilient pour gérer l'apparition de nouveaux appareils EP ou d'appareils EP inattendus, ainsi que l'absence d'appareils EP que vous utilisiez auparavant.

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

Parcourez tous les EP disponibles dans la documentation des EPs pris en charge. Pour plus d’informations sur la sélection des EP, consultez la documentation ONNX Runtime OrtApi.

Utilisation de stratégies d’appareil pour la sélection du fournisseur d’exécution

Outre la sélection explicite d’EPs, vous pouvez également utiliser des stratégies d’appareil, qui constituent une méthode naturelle orientée résultats pour spécifier la façon dont vous souhaitez que votre charge de travail IA s’exécute. Pour ce faire, utilisez SessionOptions.SetEpSelectionPolicy, transmettez OrtExecutionProviderDevicePolicy des valeurs. Il existe une variété de valeurs que vous pouvez utiliser pour la sélection automatique, comme MAX_PERFORMANCE, PREFER_NPU, MAX_EFFICIENCY, et bien plus encore. Consultez les documents ONNX OrtExecutionProviderDevicePolicy pour obtenir d’autres valeurs que vous pouvez utiliser.

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

Étapes suivantes

Après avoir sélectionné des fournisseurs d’exécution, vous êtes prêt à exécuter l’inférence sur un modèle à l’aide d’ONNX Runtime !