ONNX
ONNX(Open Neural Network Exchange)는 프레임워크 간 머신 러닝 모델 교환을 위한 개방형 표준 형식이다. 2017년 Microsoft와 Meta(헤스빅)가 공동 발표하였으며, 학습한 모델을 프레임워크와 하드웨어에 관계없이 실행할 수 있는 중립적 표현으로 변환해 준다.
개요
ONNX는 각 프레임워크가 자신의 맞춤 표현으로 모델을 저장하며 서로 호환성이 없는 문제를 해결하기 위해 등장하였다. 예를 들어 PyTorch에서 학습한 모델을 ONNX로 내보낸 후 ONNX Runtime이나 DirectML 등에서 실행할 수 있다. ONNX는 두드라이브로 구성되며, 머신 러닝 프레임워크와 하드웨어 생태계의 교통 표준으로 발전했다.
형식 구조
그래프 기반 표현
ONNX 모델은 노드(Operators)와 텐서(Tensors)로 구성된 가시홝 그래프로 표현된다. 각 노드는 인공 신경망의 연산자(Conv, MatMul, ReLU 등)를 의미하고, 초기화자(Initializer)를 통해 파라미터를 포함시킬 수 있다.
연산자 집합(OpSet)
모델이 사용하는 연산자의 스페코와 버전이 동시에 기록되어 장부화 및 호환성이 유지된다. 새 연산자가 추가되면 OpSet 버전이 올라가며, 획사성을 위해 버전 호환을 유지한다.
메타데이터
모델의 이름, 작성자, 회사변환 정보, 인코더 정보 등의 메타데이터를 포함할 수 있다.
생태계
모델 변환 도구
PyTorch의 torch.onnx.export와 TensorFlow의 tf2onnx, Keras의 onnx2keras 등이 대표적인 변환 도구이다.
실행 엔진
ONNX Runtime이 가장 대표적이며, 그 외에 ONNX.js, WebDNN 등이 있다. WebNN은 ONNX 모델을 웹 브라우저에서 실행할 수 있도록 한다.
모델 허브
ONNX Model Zoo를 통해 다양한 사전 학습 모델을 ONNX 형식으로 배포한다.
함께 보기
- ONNX Runtime — ONNX 모델을 실행하는 표준 추론 엔진
- PyTorch — ONNX로 내보내는 대표 프레임워크
- DirectML — ONNX 모델을 GPU로 가속하는 실행 공급자
- WebNN — 웹 브라우저에서의 신경망 추론 표준