다음을 통해 공유


ONNX 및 Azure Machine Learning

ONNX(Open Neural Network Exchange)를 사용하여 기계 학습 모델의 유추를 최적화하는 방법을 알아봅니다. 유추 또는 모델 채점은 배포된 모델을 사용하여 프로덕션 데이터에 대한 예측을 생성하는 프로세스입니다.

추론을 위해 기계 학습 모델을 최적화하려면 하드웨어 기능을 최대한 활용하기 위해 모델 및 유추 라이브러리를 조정해야 합니다. 다양한 종류의 플랫폼(클라우드나 에지, CPU 또는 GPU 등)은 각각 다른 기능과 특징이 있기 때문에 최적의 성능을 얻으려는 경우 이 작업은 복잡해집니다. 다양한 플랫폼에서 다양한 프레임워크의 모델을 실행해야 하는 경우 복잡성이 증가합니다. 프레임워크와 하드웨어의 다양한 조합을 모두 최적화하는 데 시간이 많이 걸릴 수 있습니다. 따라서 유용한 솔루션은 선호하는 프레임워크에서 모델을 한 번 학습시킨 다음, 클라우드 또는 에지의 아무 위치에서나 실행하는 것입니다. 이 솔루션은 ONNX가 들어오는 위치에 해당합니다.

ONNX란?

Microsoft와 Microsoft 파트너 커뮤니티는 기계 학습 모델을 대표하기 위한 개방형 표준으로 ONNX를 만들었습니다. TensorFlow, PyTorch, scikit-learn, Keras, Chainer, MXNet 및 MATLAB를 비롯한 여러 프레임워크의 모델을 표준 ONNX 형식으로 내보내거나 변환할 수 있습니다. 모델이 ONNX 형식이 되면 다양한 플랫폼 및 디바이스에서 실행할 수 있습니다.

ONNX 런타임은 ONNX 모델을 프로덕션에 배포하기 위한 고성능 유추 엔진입니다. 클라우드 및 에지 모두에 최적화되어 있으며, Linux, Windows 및 Mac에서 작동합니다. ONNX는 C++로 작성되었지만 다양한 환경에서 사용하기 위해 C, Python, C#, Java 및 JavaScript(Node.js) API도 있습니다. ONNX 런타임은 DNN(심층 신경망) 및 기존 기계 학습 모델을 모두 지원하며, NVidia GPU의 TensorRT, Intel 프로세서의 OpenVINO 및 Windows의 DirectML과 같은 다양한 하드웨어의 액셀러레이터와 통합됩니다. ONNX 런타임을 사용하면 광범위한 프로덕션 등급 최적화, 테스트 및 지속적인 개선의 이점을 누릴 수 있습니다.

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

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

ONNX 모델을 가져오는 방법

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

이미지 분류, 개체 감지 및 텍스트 처리 모델을 비롯한 많은 모델을 ONNX 모델로 대표할 수 있습니다. 모델을 성공적으로 변환할 수 없는 문제가 발생하는 경우, 사용한 변환기의 리포지토리에 GitHub 문제를 제출하세요. 문제가 해결될 때까지 기존 모델 형식을 계속 사용할 수 있습니다.

Azure에서 ONNX 모델 배포

Azure Machine Learning을 사용하면 ONNX 모델을 배포, 관리 및 모니터링할 수 있습니다. 표준 MLOps 배포 워크플로와 ONNX 런타임을 사용하면 클라우드에서 호스트되는 REST 엔드포인트를 만들 수 있습니다. 실습 예제에 대해서는 이러한Jupyter Notebook을 참조하세요.

Python을 사용한 ONNX 런타임 설치 및 사용

ONNX 런타임에 대한 Python 패키지는 PyPi.org(CPUGPU)에서 사용할 수 있습니다. 설치하기 전에 시스템 요구 사항을 검토해 보세요.

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

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

Python 스크립트에서 ONNX Runtime을 호출하려면 다음을 사용합니다.

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

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

예제

ONNX에 대해 자세히 알아보거나 프로젝트에 참여하세요.

ONNX Runtime에 대해 자세히 알아보거나 프로젝트에 참여하세요.