Windows ML に付属する ONNX ランタイムを使用すると、アプリは 、デバイス ポリシー に基づいて実行プロバイダー (IP) を構成することも、明示的に構成することもできます。これにより、プロバイダー オプションと使用するデバイスをより詳細に制御できます。
結果の予測可能性を高めるために、最初に EP を明示的に選択することをお勧めします。 この作業が完了したら、 デバイス ポリシーを使用して 、自然な結果指向の方法で実行プロバイダーを選択する実験を行うことができます。
EP の明示的な選択
EP を明示的に選択するには、環境の GetEpDevices 関数を使用して使用可能なすべてのデバイスを列挙し、使用する EP デバイスを選択します。 次に、 AppendExecutionProvider (C#) または AppendExecutionProvider_V2 (C++) を使用して、特定のデバイスを追加し、目的の EP にカスタム プロバイダー オプションを提供します。
サポートされているすべての EP はこちらでご覧いただけます。
Important
デバイスの一覧は動的に変更される可能性があります。EpDevices の一覧は、Windows ML 実行プロバイダーが自動的に更新されたとき、またはドライバーが更新されたときに実行時に動的に変更される可能性があります。 コードは、新しい EP デバイスや予期しない EP デバイスが表示されたり、以前使用していた EP デバイスが存在しなくなったりする場合に対処できる回復性を備える必要があります。
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);
サポートされている EP のドキュメントで使用可能なすべての EP を参照してください。EP の選択の詳細については、ONNX ランタイム OrtApi のドキュメントを参照してください。
実行プロバイダーの選択にデバイス ポリシーを使用する
IP を明示的に選択するだけでなく、AI ワークロードの実行方法を指定する自然な結果指向の方法であるデバイス ポリシーを使用することもできます。 これを行うには、 SessionOptions.SetEpSelectionPolicyを使用して、 OrtExecutionProviderDevicePolicy 値を渡します。 自動選択には、 MAX_PERFORMANCE、 PREFER_NPU、 MAX_EFFICIENCYなど、さまざまな値を使用できます。 使用できるその他の値については、 ONNX OrtExecutionProviderDevicePolicy に 関するドキュメントを参照してください。
// 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);
次のステップ
実行プロバイダーを選択したら、 ONNX Runtime を使用してモデルで推論を実行する準備ができました。