본문 바로가기

👩‍💻 도비는 공부중/💼 하계연구연수생(2023)

[NVIDIA GPU 활용 발표] CUDA | TensorRT

CPU? GPU?

 

CPU GPU
Central Processing Unit Graphics Processing Unit
Several cores Many cores
Low latency High throughput
Good for serial processing Good for parallel processing
Can do handful of operations at once Can do thousands of operations at once

 


CUDA(Computed Unified Device Architecture

"CUDA is a parallel comoputing platform and programming model that makes using a GPU for general purpose computing simple and elegant."

프로그래밍 언어로 작성된 프로그램을 CUDA extention을 통해 GPU 연산이 가능하게 만드는 컴퓨팅 플랫폼이자 프로그래밍 모델

 

GPU에서 실행되는 코드로, 메모리 구조를 관리해야 하는 까다로운 작업..

=> 딥러닝을 위해 CUDA 코드를 직접 작성하는 일은 없을 것!

 

"CUDA enables developers to speed up compute-intensive applications by harnessing the power of GPUs for the parallelizable part of the computation"

 


TensorRT

 

학습된 딥러닝 모델을 최적화하여 NVIDIA GPU 상에서 추론 속도를 향상시켜 딥러닝 서비스 개선하는데 도움 주는 모델 최적화 엔진

 

Pytorch, Tensorflow 등 딥러닝 프레임워크를 통해 짜여진 모델을 TensorRT를 통해 모델 최적화

=> JETSON TX2, NVIDIA GPU 플랫폼에 싣는 것

 

EX_

Pytorch 통해 학습된 모델을 Onnx로 변환하고, Onnx 모델을 TensorRT Engine으로 변환해 사용

 


Training | Inference

 

학습: 축적된 데이터를 바탕, 신경망 내의 정보 전달 관련 가중치를 업데이트 하여 딥러닝 모델 만들기

- 요구되는 하드웨어 성능 = Throughput

Forward/Backward Propagation을 반복하기 때문에 대량의 데이터를 한번에 많이 처리할 수 있는 Throughput 요구

=> 연산량이 큰 가속기 GPU 

 

 

추론: 만들어진 모델을 활용해 주어진 입력에 대한 해석 결과

-  요구되는 하드웨어 성능 = Latency

추론 요구의 도착부터 수행 완료까지 걸리는 시간

 


GPU 가속을 위해서 어쩌구.. 활용 방법에 대한 발표였는데

 

 CUDA 에서는 자체적인 GPU 내 메모리를 할당 해제 관리 가능하다

=> 여러 연산 수행 시 데이터를 GPU  메모리로 복제하고 연산 수행

 

CUDA Runtime API: System Memory를 Host, GPU Memory를 Device로 구분


1. 데이터를 System Memory에서 GPU Memory로 (HostToDevice)
2. GPU Memory에서 GPU Memory로 (DeviceToDevice)
3. GPU Memory에서 System Memory로 (DeviceToHost)

 

데이터를 읽어서 GPU로 처리하는 일련의 과정은 Storage -> System Memory -> Device Memory로 데이터 복제

반복되어 성능 저하의 원인이 된다.. -> 이거를 어떻게 해결하면 좋을지

 

 

그래서 이거를 어디다 쓸 수 있는걸까..?