AI Development/TensorRT

AI Development/TensorRT

[NVIDIA TAO Toolkit] TAO Toolkit 개요

NVIDIA TAO Toolkit을 이용하여 사전 훈련된 NVIDIA 모델에 custom dataset을 적용하여 Computer Vision(이하 CV) 모델을 만들거나 Conversational AI(이하 Conv AI) models을 만들 수 있는 툴킷이다. 비전 분야에서는 주로 object detection, image classification, segmentation, keypoint estimation 등의 모델들을 fine-tuning 할 수 있다. 특히 pre-trained 모델에 새로운 클래스를 추가할 수도 있고, 다양한 케이스에 맞게 다시 학습 시킬 수 있으며, TAO Toolkit은 학습과 관련된 hyperparameter들을 수정하여 custom AI model을 생성할 수 있다...

AI Development/TensorRT

[TensorRT] trtexec dumpProfile

공개되어있는 모델을 TensorRT Engine으로 변환하고, trtexec 에 있는 dumpProfile 플래그를 이용하여 Layer 마다 Profile 해본 결과는 아래와 같다. 이를 이용하여 원하는 속도가 나오도록 모델을 적절하게 만들면 될 듯 하다. time 뿐만 아니라 memory 또는 GPU Utilization도 확인하는 방법이 있는지 찾아봐야겠다. 참고로 Profile에 나와있는 PWN은 PointWiseNode이다. ​ ... 참고자료 1 : https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#trtexec Developer Guide :: NVIDIA Deep Learning TensorRT Documenta..

AI Development/TensorRT

[NVIDIA TAO Toolkit] TAO(Train, Adapt, and Optimize) Toolkit

NVIDIA TAO Toolkit User Guide : https://docs.nvidia.com/tao/tao-toolkit/index.html TAO Toolkit — TAO Toolkit 3.21.11 documentation © Copyright 2021, NVIDIA. Last updated on Nov 29, 2021. docs.nvidia.com NVIDIA TAO Toolkit Release Notes : https://docs.nvidia.com/tao/tao-toolkit/text/release_notes.html Release Notes — TAO Toolkit 3.21.11 documentation Release Contents Components included in this r..

AI Development/TensorRT

[TensorRT] Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32.

ONNX를 TRT로 변환하면 아래와 같은 Warning 메세지가 뜬다. Your ONNX model has been generated with INT64 weights, while TensorRT does not natively support INT64. Attempting to cast down to INT32. 성능상의 손실은 없는 것으로 판단되나 정말 성능에 영향이 없는지 실험이 필요하다. 왜 뜨는 것일까? 관련 이슈 : https://github.com/onnx/tensorflow-onnx/issues/883#issuecomment-614561227 Your ONNX model has been generated with INT64 weights, while TensorRT does not nati..

AI Development/TensorRT

[TensorRT] ONNX 및 TRT에서 Group Normalization 사용하기 (+ Instance Normalization 이슈)

PyTorch 1.6.0 / ONNX opset 10, 11 / TensorRT 7.2.2.3 환경에서 파이토치의 어떤 모델을 ONNX 모델로 변환하고, ONNX 모델을 TensorRT 모델(+ Dynamic Shape)로 변환한 뒤 Python, C++ 각 환경에서 사용하고자 할 때 아래와 같이 Engine Serialization를 못하는 문제가 발생하였었다. 결론부터 말하자면 TensorRT에서는 Group Normalization을 지원하지 않는다. PyTorch에서 Group Normalization을 사용하게 되면 ONNX와 TensorRT에서 Instance Normalization 노드가 생기게 되는데 이는 TensorRT 에서 지원하지 않는다. Custom Plugin 을 생성해줘야한다...

AI Development/TensorRT

[TensorRT] QuickStartGuide

TensorRT 를 처음 접하는 사람들이 보기 딱 좋은 레퍼런스 발견. 계속 업데이트 되고 있는 것 같아서 좋다. 참고자료 1은 ipynb 로 되어있어서 쉽게 따라 해 볼 수 있으며, 참고자료 2는 TensorRT Runtime API 를 사용하는 방법에 대해 나와있다. 둘다 내용은 비슷하다. (profiling 하는 방법도 자세히 알려줬으면 좋겠다...) 참고자료 1. https://github.com/NVIDIA/TensorRT/tree/master/quickstart GitHub - NVIDIA/TensorRT: TensorRT is a C++ library for high performance inference on NVIDIA GPUs and deep learning accelerators Te..

AI Development/TensorRT

[TensorRT] trtexec 사용하기

1. TensorRT 를 설치 2020.04.21 - [AI Development/TensorRT] - [TensorRT] NVIDIA TensorRT 개념, 설치방법, 사용하기 2. /usr/src/tensorrt/samples 에서 make 하여 빌드하기 3. /usr/src/tensorrt/bin 에 실행파일 생성됨 4. /usr/src/tensorrt/bin/trtexec 실행 $ /usr/src/tensorrt/bin/trtexec --help 아래와 같이 사용할 수 있는 명령어 확인 $ ./trtexec --help 모델 변환 시 saveEngine 을 지정하여 모델을 저장 가능 모델 실행 시 loadEngine 을 지정하여 모델 테스트 가능 (속도 테스트) INT8 Calibration 캐시..

AI Development/TensorRT

[DeepStream] ubuntu에서 nvidia docker + ngc 설치하기

본 포스팅은 아래 링크를 실행하기 위한 준비과정이다. 참고로 아래 링크는 NVIDIA DeepStream을 이용하여 RetinaNet 모델을 학습시키는 과정에 관한 것이다. developer.nvidia.com/blog/real-time-redaction-app-nvidia-deepstream-part-1-training/ Building a Real-time Redaction App Using NVIDIA DeepStream, Part 1: Training | NVIDIA Developer Blog Some of the biggest challenges in deploying an AI-based application are the accuracy of the model and being able to..

AI Development/TensorRT

[DeepStream] 딥스트림 개요 및 참고자료들

DeepStream 이란 ? 딥 러닝을 활용한 비디오 분석 응용 프로그램의 고 성능 개발을 손쉽게 할 수 있도록 만든 NVIDIA의 라이브러리이다. 높은 수준의 C++ API와 고성능 런타임 (High Performance Runtime)을 통해 GPU 가속 Transcoding 과 딥러링 추론 기능을 빠르게 통합하여 보다 반응이 빠른 AI 기반 서비스를 제공할 수 있도록 한다. 이는 Intelligent Video Analytics의 보다 손 쉬운 개발을 지원하며 개발자들은 딥스트림을 사용해 실시간으로 동영상 프레임을 처리하고, 이해하며 분류 작업을 진행 할 수 있다. 또한 매우 높은 수준으로 요구되는 처리량(Throughput) 및 반응 시간(Latency)에 대한 요건을 충족 시킬 수 있다. 이러한..

AI Development/TensorRT

[DeepStream] GTC 2020, Certification (Deep Learning for Intelligent Video Analytics)

GTC 2020 (2020/10/6) NVIDIA Deep Learning Institute Deep Learning for Intelligent Video Analytics Certification

AI Development/TensorRT

[TensorRT] Implicit vs Explicit

Pytorch 및 TensorFlow 등으로 생성된 deploy 모델의 배치 사이즈를 명시적으로 설정하여 TensorRT 모델을 변환 할 때 TensorRT 7 버전 부터 도입된 빌드 설정 값들 즉, Optimization Profiles 기능을 이용하여 모델을 변환하면 더욱 더 최적화 되어 변환 된다. * Optimization Profiles : docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html#opt_profiles Developer Guide :: NVIDIA Deep Learning TensorRT Documentation To optimize your model for inference, TensorRT takes your ne..

AI Development/TensorRT

[TensorRT] Squeeze + Unsqueeze + expand_as 조합의 Pytorch 모델 사용 시 나타날 수 있는 이슈

환경 Pytorch 1.4.0 TensorRT 7.1.3.4 CUDA 10.2 cuDNN 8.0.0 본 포스팅은, Pytorch 모델 forward 일부 구현에서 squeeze + transpose + unsqueeze + expand_as 조합을 사용하여 Pytorch - ONNX - TensorRT 변환을 수행하였을 때 발생할 수 있는 이슈에 대하여 작성한 글이다. 결과적으로 위와 같은 조합을 이용하여 TensorRT 변환 과정에서 -1 이라는 dynamic 한 변수가 중간에 등장하여 변환 결과가 뒤틀리는 현상이 발생하는 것 같다. 이러한 결과는 (Pytorch 결과 == Onnx 결과) != TensorRT 결과 라는 결론을 짓게 된다. 이는 Output Node 가 여러 개 일 때 극명하게 드러날..

AI Development/TensorRT

[TensorRT] ONNX 에서 TensorRT 변환 시 Upsample scale_factor 문제

Pytorch 모델을 이용하여 ONNX 모델로 변환 후, ONNX 모델을 TensorRT 모델로 변환할 시 아래와 같은 에러가 발생 할 때가 있다. [TensorRT] ERROR: Network must have at least one output [TensorRT] ERROR: Network validation failed. 위와 같은 에러는 ONNX parser 를 통해 Network 를 읽고 나서, TensorRT Engine 으로 변환하는 과정에서 지원하지 않는 노드가 있을 때, Network 를 더 이상 읽지 못하고 결과를 반환하여 최소한의 output 이 있어야 한다고 에러를 내뱉는 것이다. TensorRT 로그를 통해 어디서 끊긴지 찾아보면 되는데, ONNX 모델의 노드들과 TensorRT ..

AI Development/TensorRT

[TensorRT] TRT_LOGGER 이용해서 로그 확인하기

TensorRT에서 Engine 을 실행하거나, serialize, deserialize 등을 수행 할 때 Log 를 확인할 수 있는 Logger 가 있다. class tensorrt.Logger(self: tensorrt.tensorrt.Logger, min_severity: tensorrt.tensorrt.Logger.Severity = Severity.WARNING) Logger 는 Builder / ICudaEngine / Runtime 에서 사용 할 수 있으며, 파라미터는 다음과 같다. min_severity : The initial minimum severity of this Logger 어느 정도의 로그까지 띄울 것인지에 대한 파라미터이다. 아래와 같은 식으로 사용할 수 있으며 if args..

AI Development/TensorRT

[TensorRT] Onnx 모델을 위한 Custom Plugin 구현 (작성중)

(2020/08/03) 계속 업데이트 중, 구현해보고 정리해서 올릴 예정, 지금은 관련된 내용 수집중 * 주의 할 점은 한달 전에 릴리즈된 TensorRT 7.1 버전으로 해야할 듯 TRT_SOURCE/parsers/onnx/ 에는 Split.hpp, ResizeNearest.hpp 등과 같은 많은 onnx plugin 이 존재하며, REGISTER_TENSORRT_PLUGIN 을 통해 시스템에 자동으로 등록되어 런타임 중에 직접 Onnx 모델을 구문 분석 할 수 있다고 한다. 먼저 가장 쉬운 방법은 builtin_op_importers.cpp 를 이용해서 필요한 함수에 대해 플러그인을 구현하고, onnx parser 를 다시 빌드 하는 것이다. onnx-tensorrt github 에 가서 builti..

AI Development/TensorRT

[TensorRT] TensorRT GA vs RC => Use the GA version

TensorRT 다운로드 시 특별한 이유가 없는 경우, GA 버전을 다운 받는 것을 추천한다. GA is a production release, it stands for "General Availability". It is the version most people should be using, for most activities. It has gone through a full test cycle. RC is a "Release Candidate". It is a preproduction version, an early release version. In general, the recommendation would be to use a GA version, unless you have a specifi..

AI Development/TensorRT

[TensorRT] TensorRT 및 Tensor Core에서 NCHW vs NHWC 형식의 성능 차이

1. TensorRT : NCHW vs NHWC "It’s recommended to use NCHW format to get better performance with TensorRT." NVIDIA 에서는 TensorRT 입력 값으로 NCHW 포맷을 권장한다. 사용자가 TensorRT Engine 에 Input 값을 NHWC 포맷으로 입력해도 되지만, TensorRT 에서 최적화 될 때, 입력값과 호환되도록 여러 형식 변환기를 자동으로 삽입한다. 즉, NVIDIA는 입력값이 어찌되었던 GPU Acceleration 으로 인해 NCHW 를 형식을 채택한다. 또한, NHWC 형식을 선호하는 경우 UFF Parser 가 호환성을 처리할 수 있으며, 일반적으로 Caffe 는 NCHW 형식을 사용하며, 호환하..

AI Development/TensorRT

[TensorRT] 지원되는 연산자 목록 (2020.04.29 기준)

TensorRT 에서 지원되는 Operators 는 다음과 같다. (2020.04.29 기준) Caffe BatchNormalization BNLL Clip Concatenation Convolution Crop Deconvolution Dropout ElementWise ELU InnerProduct Input LeakyReLU LRN Permute Pooling Power Reduction ReLU, TanH, and Sigmoid Reshape SoftMax Scale Clip : When using the Clip operation, Caffe users must serialize their layers using ditcaffe.pb.h instead of caffe.pb.h in order t..

AI Development/TensorRT

[TensorRT] NVIDIA TensorRT 개념, 설치방법, 사용하기

1. TensorRT 란? 2. TensorRT 설치하기 3. 여러 프레임워크에서 TensorRT 사용하기 1. TensorRT 란? TensorRT는 학습된 딥러닝 모델을 최적화하여 NVIDIA GPU 상에서의 추론 속도를 수배 ~ 수십배 까지 향상시켜 딥러닝 서비스를 개선하는데 도움을 줄 수 있는 모델 최적화 엔진이다. 흔히들 우리가 접하는 Caffe, Pytorch, TensorFlow, PaddlePaddle 등의 딥러닝 프레임워크를 통해 짜여진 딥러닝 모델을 TensorRT를 통해 모델을 최적화하여 TESLA T4 , JETSON TX2, TESLA V100 등의 NVIDIA GPU 플랫폼에 아름답게 싣는 것이다. 또한, TensorRT는 NVIDIA GPU 연산에 적합한 최적화 기법들을 이용하..

AI Development/TensorRT

[TensorRT] AttributeError: 'NoneType' object has no attribute 'serialize'

에러 : AttributeError: 'NoneType' object has no attribute 'serialize' 이 에러는 말 그대로 TensorRT Engine 이 Serialize 되지 않는 문제인데, 다음과 같은 이유 때문에 Serialize 되지 않는 것이다. - builder.create_network() 함수에서 나온 network 가 노드들을 완전하게 포함하고 있지 않아서 생기는 문제 - Input 부터 Output 까지 필요한 노드들을 포함하고 있지 않기 때문에 아래와 같은 에러가 발생 - [TensorRT] ERROR: Network must have at least one output - Output Node 를 찾을 수 없어서 Output 이 인식이 안되는 것 - 그래서 반환..

꾸준희
'AI Development/TensorRT' 카테고리의 글 목록