[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
2. TensorRT development
- C++, Python 모두를 API 레벨에서 지원
아래는 TensorRT workflow
- 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을 낮춤
- FP16으로의 precision down-scale은 Network의 accuracy drop에 큰 영향을 주지는 않지만,
- INT8로의 down-scale은 accuracy drop을 보이는 몇 부류의 Network이 존재 → 추가적인 calibration 방법 필요
- TensorRT에서는 EntronpyCalibrator, EntropyCalibrator2 그리고 MinMaxCalibrator를 지원
- 이를 이용하여 quantization시 weight 및 intermediate tensor들의 정보의 손실을 최소화 할 수 있음
아래는 Calibration methodology
(정확한 작동방식은 한 번 찾아봐야겠다..)
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의 결과
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배 이상의 성능 향상 효과
참고
'딥러닝관련 > TensorRT' 카테고리의 다른 글
TensorRT 활용해보기 (Pytorch example) (0) | 2022.07.25 |
---|