[Deep Learning] ONNX와 TensorRT
ONNX
- Open Neural Network Exchange의 약자
- machine learning 모델을 나타내기 위해 만들어진 개방형 포맷
- machine learning과 deep learning 모델의 구성 요소인 일련의 연산자와 다양한 프레임워크, 도구, 런타임 및 컴파일러에서 모델을 사용할 수 있도록 하는 공통 파일 형식을 정의한다
- 공통 포맷은 모델의 이식성을 높이고 다양한 환경에서 모델을 쉽게 활용할 수 있도록 지원한다
- 즉, 다양한 딥러닝 프레임워크(PyTorch, TensorFlow 등)에서 훈련된 모델을 서로 공유하거나 변환하기 위한 포맷으로 사용된다
- ONNX는 inferencing(scoring)에 필요한 기능에 중점을 두고 있다
- 더 자세한 내용은 ONNX Documentaion에서 볼 수 있다
PyTorch 모델을 ONNX로 변환
- PyTorch 모델을 ONNX로 변환하는 것은 모델의 구조와 동작을 ONNX의 형식으로 변환하는 과정이다. 이 과정에서는 모델의 구조, 그래프, 계산 그래프 등이 ONNX 형식에 맞게 변환된다
- 여기서 변환되는 것은 모델의 아키텍처와 연산 그래프이다
- 가중치(weights)는 이 변환 과정에서 모델의 구조와 계산의 정의를 담은 형식으로 변환되지만, 실제로 모델 학습에 사용되는 파라미터 값들은 변환되지 않는다
- 따라서 변환된 ONNX 모델은 모델의 구조와 그래프를 가지고 있지만, 학습된 가중치는 포함하고 있지 않다 (하지만 onnx.export를 할 때 가중치도 포함하도록 설정할 수 있다)
TensorRT
- NVIDIA에서 제공하는 딥러닝 모델 최적화 및 배포를 위한 고성능 추론 엔진
- GPU의 병렬 처리 능력을 활용하여 딥러닝 모델의 추론 속도를 높이고 모델을 최적화하여 빠른 속도로 실행할 수 있도록 해준다
- 다양한 딥러닝 프레임워크에서 훈련된 모델을 최적화하고 배포하는데 사용된다
reference