ONNX는 다양한 ML 프레임워크 간 변환에 사용되는 중간단계의 ML 프레임워크라고 보면된다.
예를 들어, TensorFlow에서 TensorRT로 변환하고 싶거나 PyTorch에서 TFLite와 같은 다른 머신 러닝 프레임워크로 변환할 때 ONNX는 각 프레임워크들 사이에서 중간다리 역할을 할 수 있다.
그래서 이런 중간다리가 왜 필요한가? 라는 질문이 생길 수 있다.
Inference 단계에서 ML 모델을 최적화를 하려면 하드웨어 기능을 최대한 활용하기 위해 학습된 모델과 라이브러리를 최적해야할 필요가 있다. 이 때 클라우드, 엣지, CPU, GPU 등과 같은 다양한 플랫폼에서 최적의 성능을 얻고자 할 때, 각 플랫폼들은 서로 다른 기능과 특성이 있기 때문에 프레임워크가 제각각이면 각 프레임워크의 모델을 실행해야 하는 경우를 다 생각해야해서 복잡성이 증가한다.
따라서, 일반적으로 플랫폼별로 호환이 되는 프레임워크가 정해져있는데 그게 PyTorch가 될 수도 있고, TensorFlow가 될 수도 있고 아니면 그냥 ONNX가 될수도 있다. 만약 PyTorch로 실컷 학습 시켜놨다가 배포하려는 하드웨어가 TFLM 만 지원한다고 하면, 굉장히 난감한 상황이 된다. 하지만 ONNX를 통해, Pytorch → ONNX → TFLM 식으로 파일을 변환하여 플랫폼이 요구하는 프레임워크 종류와 상관없이 ML 모델을 배포할 수 있게 된다.
아래의 ONNX 흐름도는 다양한 프레임워크들이 어떻게 ONNX로 변환되어서 배포가 되는지 보여준다.