Knowhow/ONNX, TensorRT 10

Torch model to ONNX model 변환 시 유의사항 (pytorch model과 ONNX 모델 결과가 다를 때)

pytorch model을 ONNX로 변환해서 사용하고자 할 때 onnx를 직접 쓸 수도 있지만 가장 편하게 쓰는 방법은 torch.onnx.export를 쓰는 방법이다.  https://pytorch.org/tutorials/advanced/super_resolution_with_onnxruntime.html (optional) Exporting a Model from PyTorch to ONNX and Running it using ONNX Runtime — PyTorch Tutorials 2.4.0+cu121 documentatNote Click here to download the full example code (optional) Exporting a Model from PyTorch to ON..

[TensorRT 튜토리얼] 5. torch2trt

TensorRT를 사용하는 것은 어렵다. 아무리 ONNX, python API의 도움을 받아도 직접 conversion, deployment를 깔끔하게 해내긴 어렵다. https://github.com/NVIDIA-AI-IOT/torch2trt GitHub - NVIDIA-AI-IOT/torch2trt: An easy to use PyTorch to TensorRT converter An easy to use PyTorch to TensorRT converter. Contribute to NVIDIA-AI-IOT/torch2trt development by creating an account on GitHub. github.com torch2trt는 TensorRT 사용을 고민하는 사람들이 가장 흔하게 ..

[TensorRT 튜토리얼] 4. How TensorRT works

구현된 방식 TensorRT API는 class-based다. "class를 wrapping하는 class" 이런 식으로 전부 class로 구현되어 있다. 최상위 class (e.g. builder, runtime)가 존재하고 하위 class들이 member를 구성하고 있으며, 최상위 객체가 호출하면서 사용하는 방식이다. 그러므로 실제로 코드는 최상위 class (builder, runtime)에 단 2가지에 의해 동작하는 모양이다. 따라서 최상위 class를 먼저 생성하는 것으로 시작하고 최상위 class를 지우면서 종료된다. 구체적으로 최상위 클래스는 conversion 과정에서는 Builder, deployment 과정에서는 Runtime이 존재한다. Logging and error handling..

[TensorRT 튜토리얼] 3-2. TRT engine deployment (TBU)

ONNX를 거쳐 TRT engine으로 변환이 완료된 모델을 실제로 사용하는 방법이다. .trt 확장자로 저장된 파일을 열어 inferece하는 방법으로 각각 TensorRT python API, c++ API를 통해 python/c++ 코드 내에서 동작시킬 수 있다. Deplying to python API document 보면 onnx_helper 내 ONNXClassifierWrapper로 예제가 적혀있는데 이건 오로지 예제를 위한 것이다. imagenet classification에 맞추어진 것이라고 보면 됨. Pytorch to TensorRT through ONNX 튜토리얼 글을 참고하는 것이 옳다. import time import torch import numpy as np import t..

[TensorRT 튜토리얼] 3-1. ONNX/TRT engine conversion

이전 2. TensorRT ecosystem 글에서 설명한 바와 같이 TensorRT는 conversion/deployment로 나뉘며 그 중 더 중요하다고 볼 수 있는 conversion to trt engine 과정은 1) TF-TRT 2) ONNX 총 2가지 방식으로 나뉜다. 1) TF-TRT 방식의 경우, pytorch 사용자가 더 많으니 스킵하고, ONNX를 이용한 conversion/deployment 과정만 document를 따라가보려고 한다. ONNX가 tensorflow도 지원을 하니 굳이 TF-TRT부터 배울 필요는 더욱 없는 것 같으니, 이 글에서는 conversion만 정리해본다. Prerequisite pip install onnx # necessary pip install tf2..

[TensorRT 튜토리얼] 3. TensorRT ecosystem

큰 그림 그리기 TensorRT는 engine이라고 부르는 optimized representation으로 모델을 변환하는 것과 engine을 deploy하여 실제 디바이스에서 동작시키는 두 가지 과정으로 구성되어 있으며, 이 두 가지 과정을 끝마쳤을 때 경량화했다고 할 수 있겠다. 전체 흐름도는 위와 같다. 모델 선정 batch size 고정 precision 설정 (quantization) 모델 변환 모델 배포 3) precision 설정은 layer 별로 혹은 전체에서 몇 bit 쓸 건지 결정하는 과정이다. 일괄적으로 낮추는 것이 기본 세팅이지만 성능 하락 문제가 동반되므로 layer 마다 다른 설정을 두는 것이 좋다. 그럴 경우, quantization 분야로 넘어가는 영역이 된다. 세부 그림 그..

[TensorRT 튜토리얼] 2. Docker container

이전 글 [TensorRT 튜토리얼] 1. Installing TensorRT 에서 docker container를 이용하는 방식은 설치와는 사실 무관하니 생략했지만, 실제로 사용할 때는 무조건 docker를 쓰게 될 것이므로 따로 정리했다. TensorRT container에는 TensorRT를 이용한 build, modify, execute 모두가 가능하도록 세팅이 되어있다. 더불어 NVIDIA deep learning sofward library가 추가되면 매달 업데이트 되는 새로운 container에 같이 설치되어 있다. (monthly update이므로 관리가 잘되어 좋다.) NVIDIA docker document 를 확인해보면 가장 최신 release container 정보를 확인할 수 있고..

[TensorRT 튜토리얼] 1-2. cuDNN installation

Note 현재(2024.01.12)까지 나온 TensorRT 8.6.1까지 지원되는 cuDNN은 8.9.0만 있나 보다. 버전 선택지 없이 무조건 이걸로 깔아야 되는 듯 하다. Document https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html Installation Guide - NVIDIA Docs docs.nvidia.com 바로 가기 오류가 날 때가 있는데 url이 index.html로 끝나지 않는다면 index.html 이후는 삭제하면 잘 연결된다. Installation cuDNN 역시 NVIDIA developer progam 등록되어있어야 다운로드 가능하다. 간단히 이메일 인증만 거치면 된다. 최신 cuDNN부터 다운로드..

[TensorRT 튜토리얼] 1-1. CUDA installation

CUDA는 꼭 TensorRT가 아니더라도, pytorch를 비롯한 딥러닝 프레임워크를 쓸 때 자주 깔고 지우는 일이 있기 때문에 설치에 익숙해져 있으면 좋다. Check pre-installed CUDA 먼저 CUDA를 가상환경이나 docker에 새로 설치하는 것이 아닌 경우, 이미 설치된 CUDA가 있거나 설치 파일/설정이 남아있는지 확인하는 것이 좋다. 이후에 설치할 TensorRT, pytorch 모두 CUDA 버전에 dependent하므로 정확하게 설치하기 위함이다. 설치했었는지 조차 잘 모르겠으면 다음 커맨드를 쳐보자. sudo apt-key list pub rsa4096 2017-09-28 [SCE] C95B 321B 61E8 8C18 09C4 F759 DDCA E044 F796 ECB0 u..

[TensorRT 튜토리얼] 1. Installing TensorRT

끄적끄적 딥러닝 모델을 써보거나 개발하는 일은 주로 하다보니 자연스레 실제 사용할 수 있는 형태로 가공하는 것까지 이야기가 나왔고, 결국 경량화하는 영역에 닿게 됐다. 경량화라는 이름 범주 안에 knowledge distillation부터 pruning, quantization, architecture search 등 많은 이론적 내용들이 있는데 그것들을 커버하는 것과 별개로, 어떻게 갖고 있는 하드웨어에서 빠르게 동작하도록 만들 것인지도 고려해야 했다. 그래서 가장 유명하고 document가 잘되어 있는 TensorRT를 A to Z 따라가면서 감을 한 번 잡아보고자 한다. 나는 컴퓨터 공학과 출신도 아니고 이런 low level(?) 내용을 다루어본 적이 없어서 사실 자신 없는데 구르면서 한 번 배워..