ONNX (Open Neural Network Exchange)?
- ONNX는 딥러닝 모델의 상호 운용을 위해 생긴 프레임워크입니다.
- Pytorch에서 처음 만들어졌으며, 현재는 많은 기업들이 ONNX를 지원하고 있습니다.
- 왜 ONNX 가 나오게 되었는지, ONNX는 무엇인지 하나씩 살펴보도록 하겠습니다.
- 더 전문적이고, 자세한 내용이 필요하시다면, ONNX 공식 홈페이지 참고 부탁드립니다.
- https://onnx.ai/about.html
ONNX | About
Technical Design ONNX provides a definition of an extensible computation graph model, as well as definitions of built-in operators and standard data types. Each computation dataflow graph is structured as a list of nodes that form an acyclic graph. Nodes h
onnx.ai
ONNX의 탄생 배경
- 딥러닝 모델이 하나의 프레임워크에 종속되어 상호운용이 어려운 문제를 해결하고자 만들어졌습니다.
- 일반적으로 pytorch, tensorflow 등을 이용하여 딥러닝 모델 기반의 생성/추론합니다.
- 하지만, 모델은 생성된 프레임워크(pytorch, tensorflow 등)에 의존성이 높다는 한계가 있습니다.
예를 들어) 1. pytorch에서 생성된 모델 - pytorch에서 실행 가능 - tensorflow에서 실행 불가 2. tensorflow 에서 생성된 모델 - tensroflow에서 실행 가능 - pytorch에서 실행 불가 |
- 아마, 다른 개발자들과 협업을 하게 되면 다른 환경들로 인해 협업이 힘들었던 것 같습니다.
- ONNX를 이용하면, 다른 딥러닝 프레임워크에서 개발된 모델도 ONNX로 변환하여 쉽게 공유할 수 있습니다.
ONNX의 목적
- 프레임워크 상호 운용성 - 개발자가 프레임워크 간 유연성을 갖게 됩니다.
- 공유 최적화 - ONNX를 사용하면 하드웨어 업체들이 쉽게 딥러닝을 제공/개선할 수 있습니다.
ONNX의 성능 테스트
- 간단히 pytorch로 작성된 YoloV5 모델을 ONNX로 모델을 최적화하여 추출해서 테스트를 해보았습니다.
- CPU 환경에서 해당 모델을 실행시켰을 때, 처리 속도가 약 1/4 정도로 줄었습니다.
- 임베디드 환경의 경우 매우 의미 있는 수치로 생각됩니다.
processing time : 0.007970809936523438 # onnx 모델 실행시간 processing time : 0.031972646713256836 # pytorch 모델 실행시간 |
- 관련 코드는 링크 참조 부탁드립니다.
- https://codequeen.tistory.com/entry/onnx-onnx-%EC%82%AC%EC%9A%A9%ED%95%B4-pytorch-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EB%AA%A8%EB%8D%B8-%EB%B3%80%ED%99%98%ED%95%98%EA%B8%B0-Yolov5
마치며..
저는 처음 pytorch와 tensorflow를 접하였을 때, 누가 과연 이길까?라는 생각을 했었습니다. 어느 통계에서 봤었는데, 딥러닝 개발 초기에는 caffe, 그다음에는 tensorflow, pytorch 순으로 빈번히 사용되고 있다는 내용을 본 적이 있습니다. 딥러닝이 꽤 안정적으로 자리 잡은 요즘은 우세한 프레임워크가 있다기보다는, 각자 취향에 맞춰 쓰는 느낌이 들었습니다. 그리고, 이제는 ONNX가 출현했습니다.
사실, 저는 그전까지는 별로 ONNX에 대해 알지 못했습니다. 그냥 뭐 그런 게 있는가 보다 했는데, 어느 기업에 갔더니, "딥러닝 모델을 ONNX로 코딩하시나요?" 라는 말을 들었습니다. 이 프레임워크는 얼른 알아둬야겠다는 생각이 들었고, 알아볼수록 유용한 프레임워크인 것 같다는 생각이 들더군요.
ONNX는 각자의 생태계를 더 유연하고, 견고하게 만들어주는 프레임워크가 될 것 같습니다.
** 내용 중 수정이 필요하거나 보완이 필요하면 댓글 부탁드리겠습다. :)
'코드 > ONNX' 카테고리의 다른 글
[ONNX] ONNX Runtime? Pytorch 모델 ONNX 변환하기 (Renset18) (0) | 2023.08.08 |
---|---|
[ONNX] ONNX로 pytorch 딥러닝 모델 변환/추출/실행하기 (Yolov5) (0) | 2022.12.15 |
댓글