onnx
- 딥러닝 모델을 만드는 프레임워크는 크게 pytorch, tensorflow로 나뉜다. 딥러닝을 다루는 사람이라면 둘 중 하나를 선택해서 많이 사용하는데, 연구를 넘어서 실제로 디바이스에서 사용하거나 하는 경우도 있을것이다. 이때, 딥러닝 컴파일러를 거쳐서 하드웨어에서 작동하도록 한다.
다시 돌아와서 pytorch와 tensorflow는 비슷하면서 다른데, 이들을 호환할 수 있도록하는 또다른 프레임워크가 onnx다.
Netron
- 이런 onnx로 만들어진 모델을 편하게 보기위해서 많이 사용하는 툴은 Netron이다.
(url: https://netron.app/ 또는 프로그램으로 다운로드하여 사용가능하다.)
- onnx모델을 열어보면, 아래 그림과 같이 볼 수 있다.
- 그리고 특정 레이어를 열어보면 관련 파라미터들 또한 볼 수 있다.
Onnx-simplifier
- onnx도 결국 pytorch 또는 tensorflow와는 다른 프레임 워크이기 때문에, 정말 있는 "그대로" 본인들만의 방식으로 모델을 표현하기 때문에, 때로는 매우 간단한 모델을 매우 매우 복잡하게 만드는 경우도 있다. (netron에서 스크롤을 사방으로 왔다갔다해야된다....@_@)
- 위와 같은 문제를 조금은 해결해주는 것이 onnx-simplifier다.
- 그들의 말에 따르면, Onnx-simplifier는 onnx model을 간단하게 표현하기 위한 방법이다. 전체 연산 그래프를 추론하고, 불필요한 연산들을 상수 output으로 대체해주는 것으로, constant folding한다.
- constant folding: 상수 표현을 통한 최적화
- 출처: https://github.com/daquexian/onnx-simplifier
- 위의 github에서 든 예시를 가져오자면, 왼쪽의 복잡하게 보이는 모델을 오른쪽 처럼 정리해줄 수 있다.
- 사용방법:
- 다운로드:
pip3 install -U pip && pip3 install onnxsim
- 사용 1 (커맨드):
onnxsim input_onnx_model output_onnx_model
- 사용 2 (코드에 추가하기):
import onnx
from onnxsim import simplify
model = onnx.load(onnx_file_path) # 모델 load
model_simp, check = simplify(model) # convert(simplify)
- 장점:
- 모델이 시각적으로 간단해진다.
- 실제로, 모델 레이어가 간단하게 표현되어지면서, inference 속도와 용량이 줄어든다.