다음을 통해 공유


Windows ML에 포함된 ONNX 런타임을 사용하여 실행 공급자 선택

Windows ML과 함께 제공되는 ONNX 런타임을 사용하면 앱이 디바이스 정책에 따라 또는 명시적으로 실행 공급자(EP)를 구성할 수 있습니다. 그러면 공급자 옵션 및 사용해야 하는 디바이스에 대한 더 많은 제어를 제공합니다.

결과에서 더 많은 예측 가능성을 가질 수 있도록 EP의 명시적 선택부터 시작하는 것이 좋습니다. 이 작업을 수행한 후에 는 디바이스 정책을 사용하여 자연스럽고 결과 지향적인 방식으로 실행 공급자를 선택하는 실험을 수행할 수 있습니다.

EP의 명시적 선택

EP를 명시적으로 선택하려면 환경의 GetEpDevices 함수를 사용하여 사용 가능한 모든 디바이스를 열거하고 사용하려는 EP 디바이스를 선택합니다. 그런 다음(C#) 또는 AppendExecutionProvider (C++)를 사용하여 AppendExecutionProvider_V2 특정 디바이스를 추가하고 원하는 EP에 사용자 지정 공급자 옵션을 제공합니다. 여기에서 지원되는 모든 EP를 볼 수 있습니다.

중요합니다

디바이스 목록은 동적으로 변경될 수 있습니다. Windows ML 실행 공급자가 자동으로 업데이트되거나 드라이버가 업데이트될 때 런타임에 EpDevices 목록이 동적으로 변경될 수 있습니다. 코드는 신규 또는 예기치 않은 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 설명서를 참조하세요.

실행 공급자 선택에 디바이스 정책 사용

EP를 명시적으로 선택하는 것 외에도 AI 워크로드를 실행할 방법을 지정하는 자연스러운 결과 지향적인 방법인 디바이스 정책을 사용할 수도 있습니다. 이렇게 하려면 값을 전달 SessionOptions.SetEpSelectionPolicy 하여 사용합니다OrtExecutionProviderDevicePolicy. 자동 선택(예MAX_PERFORMANCE: , PREFER_NPUMAX_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 런타임을 사용하여 모델에서 유추를 실행할 준비가 된 것입니다.