다음을 통해 공유


ONNX 및 Azure Machine Learning

이 문서에서는 ONNX(Open Neural Network Exchange)가 기계 학습 모델의 유추를 최적화하는 데 어떻게 도움이 되는지 설명합니다. 유추 또는 모델 점수 매기기는 배포된 모델을 사용하여 프로덕션 데이터에 대한 예측을 생성하는 프로세스입니다.

추론을 위해 기계 학습 모델을 최적화하려면 모델 및 유추 라이브러리를 조정하여 하드웨어 기능을 최대한 활용해야 합니다. 클라우드, 에지, CPU 또는 GPU와 같은 다양한 플랫폼에서 최적의 성능을 얻으려면 각 플랫폼마다 다른 기능과 특징이 있기 때문에 이 작업은 복잡해집니다. 다양한 플랫폼의 다양한 프레임워크에서 모델을 실행해야 하는 경우 복잡성이 증가합니다. 프레임워크와 하드웨어의 다양한 조합을 모두 최적화하는 데 시간이 많이 걸릴 수 있습니다.

유용한 솔루션은 선호하는 프레임워크에서 모델을 한 번 학습한 다음 클라우드 또는 에지에서 어디서나 실행할 수 있도록 ONNX로 내보내거나 변환하는 것입니다. Microsoft와 Microsoft 파트너 커뮤니티는 기계 학습 모델을 대표하기 위한 개방형 표준으로 ONNX를 만들었습니다. 여러 프레임워크에서 표준 ONNX 형식으로 모델을 내보내거나 변환할 수 있습니다. 지원되는 프레임워크에는 TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet 및 MATLAB이 포함됩니다. 다양한 플랫폼 및 디바이스에서 ONNX 형식으로 모델을 실행할 수 있습니다.

이 ONNX 흐름 다이어그램은 사용 가능한 프레임워크 및 배포 옵션을 보여 줍니다.

학습, 변환기 및 배포를 보여 주는 ONNX 흐름 다이어그램

ONNX Runtime

ONNX 런타임은 ONNX 모델을 프로덕션에 배포하기 위한 고성능 유추 엔진입니다. ONNX 런타임은 클라우드 및 에지 모두에 최적화되어 있으며 Linux, Windows 및 macOS에서 작동합니다. ONNX는 C++로 작성되었지만 해당 환경에서 사용할 C, Python, C#, Java 및 javaScript(Node.js) API도 있습니다.

ONNX 런타임은 DNN(심층 신경망) 및 기존 기계 학습 모델을 모두 지원하며, NVidia GPU의 TensorRT, Intel 프로세서의 OpenVINO 및 Windows의 DirectML과 같은 다양한 하드웨어의 액셀러레이터와 통합됩니다. ONNX 런타임을 사용하면 광범위한 프로덕션 등급 최적화, 테스트 및 지속적인 향상된 기능을 활용할 수 있습니다.

Bing, Office 및 Azure AI와 같은 대규모 Microsoft 서비스 ONNX 런타임을 사용합니다. 성능 향상은 여러 요인에 따라 달라지지만 이러한 Microsoft 서비스 ONNX를 사용하여 CPU의 평균 2배 성능 향상을 보고합니다. ONNX 런타임은 다음을 포함하여 기계 학습 워크로드를 지원하는 Azure Machine Learning 및 기타 Microsoft 제품에서 실행됩니다.

ONNX 모델을 가져오는 방법

여러 가지 방법으로 ONNX 모델을 가져올 수 있습니다.

이미지 분류, 개체 검색 및 텍스트 처리 모델을 포함하여 많은 모델을 ONNX로 나타낼 수 있습니다. 모델을 성공적으로 변환할 수 없는 경우 사용한 변환기의 리포지토리에 GitHub 문제를 제출합니다.

Azure에서 ONNX 모델 배포

Azure Machine Learning에서 ONNX 모델을 배포, 관리 및 모니터링할 수 있습니다. ONNX 런타임에서 표준 MLOps 배포 워크플로 를 사용하여 클라우드에서 호스트되는 REST 엔드포인트를 만들 수 있습니다.

ONNX 런타임용 Python 패키지

CPU 및 GPU ONNX 런타임용 Python 패키지는 PyPi.org 사용할 수 있습니다. 설치하기 전에 시스템 요구 사항을 검토해야 합니다.

Python용 ONNX 런타임을 설치하려면 다음 명령 중 하나를 사용합니다.

pip install onnxruntime       # CPU build
pip install onnxruntime-gpu   # GPU build

Python 스크립트에서 ONNX 런타임을 호출하려면 다음 코드를 사용합니다.

import onnxruntime
session = onnxruntime.InferenceSession("path to model")

일반적으로는 모델과 함께 제공되는 설명서에 모델 사용을 위한 입력과 출력이 나와 있습니다. Netron 등의 시각화 도구를 사용하여 모델을 볼 수도 있습니다.

ONNX 런타임을 사용하면 다음과 같이 모델 메타데이터, 입력 및 출력을 쿼리할 수 있습니다.

session.get_modelmeta()
first_input_name = session.get_inputs()[0].name
first_output_name = session.get_outputs()[0].name

모델에서 추론을 수행하려면 반환하려는 출력 목록과 입력 값의 맵을 사용하고 run 전달합니다. 모든 출력을 원하는 경우 출력 목록을 비워 둡니다. 그러면 출력 목록이 결과로 반환됩니다.

results = session.run(["output1", "output2"], {
                      "input1": indata1, "input2": indata2})
results = session.run([], {"input1": indata1, "input2": indata2})

전체 ONNX 런타임 API 참조는 Python API 설명서를 참조 하세요.