본문 바로가기
딥러닝관련/TensorRT

TensorRT 개념 정리

by 머리올리자 2022. 7. 25.

[TensorRT]

학습된 Deep Learning 모델을 최적화하여 NVIDIA GPU 상에서의 Inference 속도를 수배 ~ 수십배 까지 향상시켜 Deep Learning 서비스 TCO (Total Cost of Ownership) 를  개선하는데 도움을 줄 수 있는 모델 최적화 엔진

 

1. Introduction

아래 두 개를 포함 

1) Optimizer : NVIDIA GPU 연산에 적합한 최적화 기법들을 이용하여 모델을 최적화

2) Runtime Engine : 다양한 GPU에서 모델연산을 수행

 

- 다양한 Framework 등에서 학습된 모델을 지원 → Deep Learning model Inference 가속을 지원

 

TensorRT Introduction

그림 출처 : https://blogs.nvidia.co.kr/wp-content/uploads/sites/16/2020/02/219-%EB%B8%94%EB%A1%9C%EA%B7%B8-tensor-rt.png

2. TensorRT development

- C++, Python 모두를 API 레벨에서 지원

 

아래는 TensorRT workflow

그림 출처 : https://blogs.nvidia.co.kr/wp-content/uploads/sites/16/2020/02/Figure2-TensorRT-workflow.png

 

- GPU가 지원하는 활용 가능한 최적의 연산 자원을 자동으로 사용할 수 있도록 Runtime binary를 빌드

- Latency 및 Throughput을 향상

- Datacenter, Automotive, Embedded 등의 여러 플랫폼에 가장 적합한 Kernel을 선택하여 각 제품, 각 아키텍쳐에 맞는 가속을 자동으로 도와줌

 

3. TensorRT optimization

- NVIDIA platform에서 최적의 Inference 성능을 낼 수 있도록 Network compression, Network optimization 그리고 GPU 최적화 기술들을 대상 Deep Learning 모델에 자동으로 적용

Quantization & Precision Calibration

 - 낮은 Precision의 Network일 수록 data의 크기 및 weight들의 bit수가 작기 때문에 더 빠르고 효율적인 연산이 가능

 - Quantization 기법들 중, TensorRT는 Symmetric Linear Quantization을 사용(아래 그림)

 - Deep Learning Framework의 일반적인 FP32의 data를 FP16 및 INT8의 data type으로 precision을 낮춤

그림 출처 : https://blogs.nvidia.co.kr/wp-content/uploads/sites/16/2020/02/Figure-4.-Symmetric-Linear-Quantization.png

 - FP16으로의 precision down-scale은 Network의 accuracy drop에 큰 영향을 주지는 않지만,

 - INT8로의 down-scale은 accuracy drop을 보이는 몇 부류의 Network이 존재 → 추가적인 calibration 방법 필요

 - TensorRT에서는 EntronpyCalibrator, EntropyCalibrator2 그리고 MinMaxCalibrator를 지원

 - 이를 이용하여 quantization시 weight 및 intermediate tensor들의 정보의 손실을 최소화 할 수 있음

 

아래는 Calibration methodology

(정확한 작동방식은 한 번 찾아봐야겠다..)

출처 : https://blogs.nvidia.co.kr/wp-content/uploads/sites/16/2020/02/Figure-5.-Calibration-methodology.png

 

Graph Optimization

 - Deep Learning Network에서 사용되는 primitive 연산 형태, compound 연산 형태의 graph node들을 각 platform에 최적화된 code를 구성하기 위하여 사용됨

 -  Layer Fusion 방식과 Tensor Fusion 방식을 동시에 적용

 -  Layer Fusion은 Vertical or Horizontal Layer Fusion 그리고 Tensor Fusion이 적용되어 model graph를 단순화

 - 이를 통하여 model의 layer 갯수가 크게 감소

 

아래는 Layer & Tensor Fusion의 결과

그림 출처 : https://blogs.nvidia.co.kr/wp-content/uploads/sites/16/2020/02/219-%EB%B8%94%EB%A1%9C%EA%B7%B8-6.png

Kernel Auto-tuning

 - 각 platform 및 architecture들은 CUDA engine의 갯수, memory 그리고 specialized engine 포함 여부에 따라 optimize된 kernel 이 다름.

 - 이를 TensorRT Runtime engine build시에 선택적으로 수행하여 최적의 engine binary 생성 

 

Dynamic Tensor Memory & Multi-stream execution

Memory management : footprint를 줄여 재사용을 할 수 있도록 도와주는 Dynamic tensor memory 기능

CUDA stream : multiple input stream의 scheduling을 통해 병렬 효율을 극대화 할 수 있는 Multi-stream execution 기능

 

4. TensorRT performances

- 기본적인 ResNet50 기준으로 볼때 동일한 GPU에서 TensorRT를 사용하는 것만으로도 대략 8배 이상의 성능 향상 효과

 

 

참고

https://developer.nvidia.com/ko-kr/blog/nvidia-tensorrt-inference-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%B0%8F-%EA%B0%80%EC%86%8D%ED%99%94%EB%A5%BC-%EC%9C%84%ED%95%9C-nvidia%EC%9D%98-toolkit/

 

NVIDIA TensorRT – Inference 최적화 및 가속화를 위한 NVIDIA의 Toolkit

TensorRT는 학습된 Deep Learning 모델을 최적화하여 NVIDIA GPU 상에서의 Inference 속도를 수배 ~ 수십배 까지 향상시켜 Deep Learning 서비스 TCO (Total Cost of Ownership) 를 개선하는데 도움을 줄 수 있는 모델 최

developer.nvidia.com

 

'딥러닝관련 > TensorRT' 카테고리의 다른 글

TensorRT 활용해보기 (Pytorch example)  (0) 2022.07.25