ONNX(Open Neural Network Exchange)는 「딥러닝 모델을 프레임워크에 종속되지 않는 표준 형식으로 표현하는」 오픈 포맷입니다.
마이크로소프트와 페이스북이 2017년에 공동 발표했고, 지금은 모든 주요 프레임워크가 지원하는 「딥러닝 모델의 PDF」 같은 위치를 차지합니다.
ONNX의 가장 큰 가치는 「프레임워크 간 이동」입니다.
PyTorch에서 학습한 모델을 ONNX로 변환한 뒤 TensorFlow·TensorRT·OpenVINO·CoreML·ONNX Runtime 등 어디서든 실행할 수 있습니다.
학습은 PyTorch가 편하지만 배포는 다른 환경이 더 좋을 때 결정적으로 쓰입니다.
ONNX Runtime은 ONNX 모델을 실행하는 추론 엔진으로, 마이크로소프트가 적극 개발하고 있습니다.
CPU·GPU·다양한 가속기를 지원하고, Windows·Linux·macOS·iOS·Android·웹브라우저까지 거의 모든 플랫폼에서 동작합니다.
비유하자면 ONNX는 「모델의 USB-C」와 같습니다.
이전에는 각 프레임워크가 자기 전용 케이블을 썼지만, USB-C가 표준이 되면서 한 케이블로 어떤 기기에든 연결할 수 있게 됐습니다.
ONNX도 한 모델로 어떤 추론 환경에든 배포할 수 있게 해 줍니다.
단점도 있습니다.
ONNX 변환이 항상 완벽하지는 않아 일부 PyTorch 코드가 변환에 실패하기도 하고, 변환 후 약간의 정확도 손실이 생길 수도 있습니다.
그래도 「학습 환경 ≠ 배포 환경」인 산업 현장에서 ONNX는 거의 필수 도구입니다.
한 줄 요약
ONNX는 프레임워크에 종속되지 않는 모델 표준 포맷으로, PyTorch 모델을 TensorRT·OpenVINO·CoreML 등 어디서나 배포할 수 있게 해 줍니다.
「모델의 USB-C」입니다.
더 알아볼 것
- ONNX Runtime의 백엔드 지원
- torch.onnx.export 사용법
- ONNX vs Pickle vs SavedModel