다음을 통해 공유


Windows ML에 포함된 ONNX 런타임을 사용하여 ONNX 모델 실행

Windows ML과 함께 제공되는 ONNX 런타임을 사용하면 앱이 ONNX 모델에서 로컬로 유추를 실행할 수 있습니다.

LLM(큰 언어 모델) 및 음성 텍스트 변환과 같은 생성 AI 모델을 사용하는 경우 LLM 및 기타 생성 모델 실행을 참조하세요.

유추 세션 만들기

API는 ONNX 런타임을 직접 사용하는 경우와 동일합니다. 예를 들어 유추 세션을 만들려면 다음을 수행합니다.

// Create inference session using compiled model
using InferenceSession session = new(compiledModelPath, sessionOptions);

Windows ML 내에서 ONNX 런타임 API를 사용하는 방법에 대한 자세한 내용은 ONNX 런타임 문서를 참조하는 것이 좋습니다. 모델 유추 코드는 모든 모델에 대해 다릅니다.

스레드 회전 동작

기본적으로 Windows ML의 ONNX 런타임은 스레드 회전을 사용하지 않도록 설정하므로 일반적으로 배터리 수명이 향상됩니다.

세션 "session.intra_op.allow_spinning""session.inter_op.allow_spinning" 구성 항목을 "1"로 설정하여 스레드 회전을 사용할 수 있습니다. 스레드 회전 여부와 관계없이 앱을 테스트하여 모델, 사용 사례 및 고객에게 최상의 성능 및 배터리 수명을 생성하는 설정을 결정하는 것이 좋습니다.

// Create session options and enable thread spinning
var sessionOptions = new SessionOptions();
sessionOptions.AddSessionConfigEntry("session.intra_op.allow_spinning", "1");
sessionOptions.AddSessionConfigEntry("session.inter_op.allow_spinning", "1");

// Create inference session using our session options
using InferenceSession session = new(modelPath, sessionOptions);

모델 컴파일

유추 세션에서 ONNX 모델을 사용하기 전에 디바이스의 기본 하드웨어에서 효율적으로 실행할 수 있는 최적화된 표현으로 컴파일해야 하는 경우가 많습니다.

ONNX 런타임 1.22를 기준으로 컴파일 단계를 더 잘 캡슐화하는 새로운 API가 있습니다. 자세한 내용은 ONNX 런타임 컴파일 설명서에서 확인할 수 있습니다( OrtCompileApi 구조체 참조).

// Prepare compilation options
OrtModelCompilationOptions compileOptions = new(sessionOptions);
compileOptions.SetInputModelPath(modelPath);
compileOptions.SetOutputModelPath(compiledModelPath);

// Compile the model
compileOptions.CompileModel();

Note

컴파일을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 모든 UI가 응답성을 유지하려면 애플리케이션에서 백그라운드 작업으로 이 작업을 수행하는 것이 좋습니다.

팁 (조언)

최적의 성능을 위해 모델을 한 번 컴파일하고 컴파일된 버전을 다시 사용하세요. 후속 실행을 위해 컴파일된 모델을 앱의 로컬 데이터 폴더에 저장합니다. EP 또는 런타임에 대한 업데이트에는 다시 컴파일이 필요할 수 있습니다.

참고하십시오