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 워크로드를 지원하는 다른 제품에서도 실행됩니다.

  • Windows: 런타임은 Windows Machine Learning일부로 Windows에 기본 제공되며 수억 대의 디바이스에서 실행됩니다.
  • Azure SQL 제품군: Azure SQL EdgeAzure SQL Managed Instance의 데이터에 대한 네이티브 채점을 실행합니다.
  • ML.NET: ML.NET ONNX 모델을 실행합니다.

학습, 변환기 및 배포를 보여 주는 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에 대해 자세히 알아보거나 프로젝트에 참여하세요.