|
|
1. TensorRT 소개
심층신경망의 추론에 걸리는 시간은 엄청크기때문에 실시간 응용이 어렵다
모델이 크고 복잡할수록 추론을 수행하는 처리시간이 길어진다. 수백ms~ 수초단위
tensorrt는 Nvidia GPU에서 심층신경망의 추론 연산속도를 개선하는 라이브러리로 실시간 처리를 위해서는 필수적임 -> 수ms~수십ms 정도로 감소가능
모델 최적화, 연산의 정밀도 크기를 축소(FP32->FP16->INT16->INT8)하여 연산량 감소시킴
tensorrt는 모델의 추론부분만 GPU에서 처리해줌, 전후처리 과정도 GPU에서 처리하면 더 줄일수 있음 -> cuda프로그래밍 기술필요
특히, 영상분할모델의 경우 후처리과정이 매우 오래 걸리므로 이부분을 GPU에서 처리해야 실시간 성능 가능
예를 들어 segmenter 모델은 rtx 4070 ti super사용시 후처리과정이 150msec이상 걸림 -> GPU사용하면 약 2msec로 감소
관련 사이트
Nvidia : https://developer.nvidia.com/ko-kr/tensorrt
TensorRT Developer Guide : https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html
API documentation for the NVIDIA TensorRT library : https://docs.nvidia.com/deeplearning/tensorrt/index.html#api-docs
깃허브 : https://github.com/NVIDIA/TensorRT
Example : https://developer.nvidia.com/blog/speeding-up-deep-learning-inference-using-tensorrt/
support matrix : https://docs.nvidia.com/deeplearning/tensorrt/latest/getting-started/support-matrix.html
25년 12월 현재기준으로 아래의 support matrix를 통하여 다음처럼 버전을 결정
- tensorrt 10.14.x,
- cuda 12.9 -> cudnn 8.9.7에서 cuda 13.0은 지원안함,
- cudnn 8.9.7
tensorrt를 설치하기 위해서는 다음순서로 설치해야함
gpu device driver 설치 -> Cuda 설치 -> cudnn설치 -> TensorRT 설치
2. GPU device driver 설치
윈도우즈의 경우 최신버전으로 설치하면됨,
오래된 버전은 최신 cuda버전과 호환이 안될수 있으므로 최신버전으로 항상 업데이트할것
먼저 설치된 GPU모델 검색
윈도우즈 검색창 -> 장치 관리자 -> 디스플레이 어댑터 -> 모델명확인
드라이버 다운로드 사이트 접속
https://www.nvidia.com/ko-kr/geforce/drivers/
-> GeForce -> 세부모델명 선택 -> 운영체제선택 -> Game Ready 드라이버 선택 -> 최신드라이버 선택
(매우중요) wsl2-ubuntu의 경우 윈도우즈 드라이버를 공유하므로 리눅스에서 별도로 설치 필요없음
Jetson 보드의 경우 jetpack에 포함되어 별도 설치필요없음
윈도우즈에서 드라이버 설치확인
> nvidia-smi
Cuda 버전은 현재 설치된 버전을 의미하는게 아니고 호환이 가장 잘되는 버전을 추천하는것임
WSL2-ubuntu에서 드라이버 설치확인
드라이버 파일 위치 -> /usr/lib/wsl/lib/libcuda.so
$ find /usr -name '*cuda*'
$ nvidia-smi -> 윈도우즈 명령어와 같음
3. Cuda toolkit 설치
(1) 윈도우즈 11
윈도우즈의 경우 gpu모델 및 tensorrt 호환성을 고려하여 적절한 버전으로 설치해야함
support matrix : https://docs.nvidia.com/deeplearning/tensorrt/latest/getting-started/support-matrix.html
Cuda compatibility -> cuda와 gpu driver 버전호환성
https://docs.nvidia.com/deploy/cuda-compatibility/
GPU 모델에 따른 Compute capability version 조사
https://en.wikipedia.org/wiki/CUDA#GPUs_supported
RTX 5070, RTX 5070 ti, RTX 5090(blackwell) -> 12.0 -> cuda 12.8이상
RTX 4070 ti super(ada) -> 8.9 -> cuda 11.8이상
RTX 4070 super(ada) -> 8.9 -> cuda 11.8이상
RTX 3070(ampere) -> 8.6 -> cuda 11.0이상
GTX 1650(turing) -> 7.5 -> cuda 10.0이상
윈도우즈 11에서는 현재(25년 12월) 최신버전인 tensorrt 10.14.x으로 설치가능
tensorrt 10.14.x에서 지원하는 cuda 버전을 아래링크에서 확인후 선택 -> cudnn8.9.7과 호환되는 cuda 12.9 선택
https://docs.nvidia.com/deeplearning/tensorrt/support-matrix/index.html
깃허브 : https://github.com/NVIDIA/TensorRT
cuda 버전별 다운로드
https://developer.nvidia.com/cuda-toolkit-archive
설치과정에서 환경변수를 자동으로 생성함, CUDA 관련 윈도우즈 시스템 환경변수(PATH 등) 확인
윈도우즈에서 설치확인
> nvcc --version -> 실행안되면 PATH 환경변수 설정문제임
(2) wsl2-ubuntu 24.04에 설치
(매우중요) wsl2-ubuntu의 경우 드라이버는 윈도우즈와 공유하지만 Cuda는 wsl2-ubuntu용 Cuda toolkit을 별도로 설치해야함
wsl2-ubuntu에서 드라이버를 따로 설치할 필요는 없음
GPU 드라이버 설치확인
$ nvidia-smi
wsl2용 별도의 cuda toolkit을 따로 설치해야함,
https://docs.nvidia.com/cuda/wsl-user-guide/index.html
리눅스에서 설치할때는 리눅스 버전에 맞는 tensorrt 버전 선택후 진행
support matrix : https://docs.nvidia.com/deeplearning/tensorrt/latest/getting-started/support-matrix.html
25년12월22일 현재 tensorrt 10.14.1 -> cuda 12.9.1, cudnn 8.9.7로 선정
cuda 버전별 다운로드 사이트
https://developer.nvidia.com/cuda-toolkit-archive
cuda 12.9.1 -> linux -> x86_64 -> wsl-ubuntu -> 2.0 -> deb(local or network)
리눅스 환경변수 설정 -> 리눅스에서는 환경변수를 자동으로 추가해주지 않아서 사용자가 직접 추가해야함
~/.bashrc 에 다음 명령어 추가
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions
$ cd ~
$ vi .bashrc
......
export PATH=/usr/local/cuda-12.9/bin${PATH:+:${PATH}} -> 12.9 대신에 실제 설치버전작성
export LD_LIBRARY_PATH=/usr/local/cuda-12.9/lib ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} -> 12.9 대신에 실제 설치버전작성
$ source ~/.bashrc
<bash 명령어>
${변수:+값}
# 의미: 변수가 설정되어 있고 null이 아니면 '값' 반환
# 변수가 없거나 null이면 아무것도 반환 안함
export PATH=/usr/local/cuda-12.9/bin${PATH:+:${PATH}} -> path가 비어있으면 :추가안함
export PATH=/usr/local/cuda-12.9/bin:$PATH -> path가 비어있어도 :추가
실제동작은 거의 같음
또는 편집기 없이 명령어로
$ echo 'export PATH=/usr/local/cuda-12.9/bin:$PATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.9/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ source ~/.bashrc -> 변경내용 실행
Cuda 라이브러리 설치위치
라이브러리파일 경로 -> /usr/local/cuda/lib64
헤더파일경로 -> /usr/local/cuda/include
WSL2-ubuntu에서 cuda 버전확인 방법
$ nvcc --version
리눅스전용 GPU관리도구->X 서버 설정, 디스플레이 구성, GPU 온도 모니터링, 팬 속도 제어 등을 위한 GUI 및 CLI 도구
$ nvidia-settings
윈도우즈전용 GPU관리도구Nvidia 제어판
(3) Jetson 보드
jetpack에 포함되어 설치되어 있으므로 설치필요없음 -> 버전확인 필요
Jetson 보드 리눅스에서 설치확인
$ nvcc --version 또는
$ find /usr -name '*cuda*' -> CUDA 버전확인
리눅스에서 cuda 설치 후 환경변수 설정해야 함
윈도우즈의 경우 cuda 설치과정에서 path 설정을 해주지만 리눅스의 경우는 수동으로 해줘야함
아래 두 문장을 ~/.bashrc파일 마지막부분에 추가한다. xx.x 대신에 위에서 확인한 버전을 적는다.
$ cd ~
$ vi .bashrc
.......
export PATH=/usr/local/cuda-xx.x/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-xx.x/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
$ source .bashrc -> 변경내용 바로 적용
4. cudnn 설치
Jetson보드의 경우 jetpack에 포함되어 설치되어 있으므로 설치필요없음 -> 버전확인 필요
윈도우즈와 wsl2-ubuntu 의 경우 cuda, tensorrt와의 호환성을 고려하여 적절한 버전으로 설치해야함
25년 12월 현재 기준으로 tensorrt 10.14.x, cuda 12.9(cudnn 8.9.7에서 cuda 13.0은 지원안함) , cudnn 8.9.7으로 결정
(1) 윈도우즈11에서 cudnn 8.9.7 설치
cudnn 공식사이트
https://developer.nvidia.com/cudnn
cuda, tensorrt와 호환되는 버전을 선택해야함
cudnn support matrix
https://docs.nvidia.com/deeplearning/cudnn/latest/reference/support-matrix.html
tensorrt support matrix
https://docs.nvidia.com/deeplearning/tensorrt/support-matrix/index.html
cudnn download
https://developer.nvidia.com/cudnn-archive
cudnn install guide
https://docs.nvidia.com/deeplearning/cudnn/latest/installation/overview.html
윈도우즈용 cudnn인 경우 압축파일로 다운받은 경우 압축을 풀고 include, lib/x64, bin 폴더안의 모든 파일을 Cuda 설치폴더(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x) 안의 같은 이름의 폴더로 복사해줘야 함
윈도우즈에서 설치 확인 방법
다음 헤더파일의 매크로 상수에 저장되어 있음
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cudnn_version.h
(2) WSL2-ubuntu24.04에서 cudnn 8.9.7 설치
cudnn 8.9.7 다운로드 -> 윈도우즈에서 다운받아서 리눅스 /mnt/c/Users/2sungryul/Downloads 아래에서 공유됨
https://developer.nvidia.com/cudnn-archive
local installer for linux x86_64(Tar) 선택
cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
압축 해제
$ tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
파일 복사 -> 헤더파일, 라이브러리파일을 cuda의 해당폴더에 복사함
$ sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
$ sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
$ sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
설치확인
$ cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
# 라이브러리 확인
$ ldconfig -p | grep cudnn
환경변수 추가
# ~/.bashrc 에 추가
$ echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ source ~/.bashrc
(3) Jetson보드에 설치
jetpack에 포함되어 이미 설치되어 있음
cudnn 버전확인
$ find /usr -name '*cudnn_version*' -> cuDNN 버전확인
cudnn_version.h을 찾아서 define문에서 정의한 3개 기호상수(CUDNN_MAJOR, MINOR, PATCHLEVEL)가 버전 x.x.x을 의미함
5. TensorRT 설치
Jetson보드의 경우 jetpack에 포함되어 설치되어 있으므로 설치필요없음 -> 버전확인 필요
윈도우즈와 wsl2-ubuntu의 경우 Cuda, cudnn 버전과 호환성을 고려하여 설치해야함
support matrix : https://docs.nvidia.com/deeplearning/tensorrt/latest/getting-started/support-matrix.html
위 사이트에서 cuda와 호환되는 버전을 확인하고 설치
25년 12월 현재기준으로 Tensorrt 10.14.1, cuda 12.9.1(cudnn 8.9.7에서 cuda 13.0은 지원안함) , cudnn 8.9.7으로 결정
1) windows11에서 TensorRT 10.14.1 설치
https://developer.nvidia.com/tensorrt/download/10x
압축파일(zip)을 풀어서 Nvidia GPU Computing Toolkit에 복사하면 설치 끝남, CUDA와 같은 디렉터리에 설치
아래 사이트를 참고하여 윈도우즈 환경설정(PATH등록) 및 python API설치
python API는 사용하는 아나콘다 가상환경에서 작업할때는 거기서도 설치해야함
설치확인 방법
윈도우즈 파워셸에서 다음 명령어를 실행하면 도움말이 출력되어야함
> trtexec --help -> 실행안되면 환경변수 path 확인
2) wsl2-ubuntu24.04에서 TensorRT 10.14.1 설치
TensorRT 설치방법 안내 문서
https://docs.nvidia.com/deeplearning/tensorrt/latest/installing-tensorrt/installing.html#
tensorrt 10.14.1 다운로드 -> 윈도우즈에서 다운받고 리눅스 /mnt/c/Users/2sungryul/Downloads 아래에서 공유됨
https://developer.nvidia.com/tensorrt/download
nv-tensorrt-local-repo-ubuntu2404-10.14.1-cuda-12.9_1.0-1_amd64.deb
tensrort 설치
헤더파일 설치경로 -> /usr/include/x86_64-linux-gnu/
이 디렉토리 내에 NvInfer.h, NvOnnxParser.h 등 핵심 헤더 파일들이 위치함
라이브러리 파일경로 -> /usr/lib/x86_64-linux-gnu/ -> libnvinfer.so, libnvonnxparser.so
tensorrt 버전확인
$ dpkg-query -W tensorrt
$ cd /usr/src/tensorrt/bin/ -> 실행파일은 여기에 있음, path 설정 안되어 있음
$ ./trtexec --help
3) jetson 보드에서 TensorRT 설치
jetpack에 이미설치되어 있음
tensorrt 버전 확인
$ dpkg-query -W tensorrt
$ trtexec --help
6. Windows11용 TensorRT C++ Example
개발환경 ; windows 11, visual studio 2022, cuda 12.9.1, cudnn 8.9.7, TensorRT 10.14.1, opencv 4.12.0 without gpu support
onnx 모델파일 필요, 엔진파일 생성후 추론 수행
TensorRT는 C++ API, Python API를 모두 제공하고 있고 라이브러리 활용법과 샘플코드는 아래 주소에 모두 있으니
비슷한 예제를 찾고 그걸 수정해서 원하는 프로젝트를 만들면됨
https://docs.nvidia.com/deeplearning/tensorrt/latest/index.html
C++ API 활용방법
https://docs.nvidia.com/deeplearning/tensorrt/latest/inference-library/c-api-docs.html
Python API 활용방법
https://docs.nvidia.com/deeplearning/tensorrt/latest/inference-library/python-api-docs.html
mnist 데이터셋을 이용한 필기체 숫자인식 예제임 -> 가장기본예제임
https://github.com/NVIDIA/TensorRT/tree/release/10.14/samples
1) Visual studio에서 TensorRT 프로젝트 속성설정
visual studio 2022 프로젝트 속성 설정방법
Release mode , x64
VC++ 디렉터리 -> 포함디렉터리
C:\opencv\build\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include
C:\Program Files\NVIDIA GPU Computing Toolkit\TensorRT-10.14.1.48\include
VC++ 디렉터리 -> 라이브러리 디렉터리
C:\opencv\build\x64\vc16\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9\lib\x64
C:\Program Files\NVIDIA GPU Computing Toolkit\TensorRT-10.14.1.48\lib
링커 -> 입력 -> 추가 종속성
nvinfer_10.lib
nvonnxparser_10.lib
nvinfer_plugin_10.lib
opencv_world4120.lib
cudart.lib
2) C++ 소스코드작성
아래 TensorRT C++ 샘플코드를 수정하여 사용하면됨
https://github.com/NVIDIA/TensorRT/tree/release/10.3/samples
처리과정
- 먼저, 파이토치 라이브러리(파이썬)를 이용하여 pth파일을 onnx파일로 변환
- trtexec명령어로 onnx파일을 tensorrt 엔진파일로 변환
> trtexec --onnx=xxx.onnx --saveEngine=xxx.engine
- 위 TensorRT C++API를 이용하여 tensorrt 엔진파일을 이용하여 추론
7. 리눅스용 C++ TensorRT example
개발환경 ; wsl2-ubuntu 24.04, cuda 12.9.1, cudnn 8.9.7, TensorRT 10.14.1, opencv 4.6.0, ROS2 Jazzy
파이토치 export기능을 이용하여 pth파일을 onnx로 변환
trtexec 명령어를 이용하여 onnx를 engine파일로 변환
$ /usr/src/tensorrt/bin/trtexec --onnx=xxx.onnx --saveEngine=xxx.engine
Tensors c++API 를 이용하여 추론코드 작성
segmenter tensorrt ros2 package
https://github.com/2sungryul/segmenter_trt
yolo11 tensorrt ros2 package
https://github.com/2sungryul/yolo11_trt
8. Faster RCNN Python API 이용한 예제
https://github.com/NVIDIA/TensorRT/tree/release/10.9/samples/python/dds_faster_rcnn
9. 과제
1) GPU driver, Cuda, cudnn, tensorrt, opencv with gpu support 를 설치하고 버전을 확인하시오.
- cuda 버전확인 : nvcc --version
- cudnn 버전확인 : cudnn_version.h 파일을 검색하여 파일내용에서 버전 확인
- tensorrt 버전확인 : > trtexec --help, $ dpkg-query -W tensorrt
- opencv 버전확인 : opencv_version
2) TensorRT를 이용하여 Yolo11 모델의 추론속도를 개선해보시오.
- custom data를 이용하여 Yolo11 를 훈련
- pytorch export기능을 이용하여 onnx 변환
- TensorRT trtexec 명령어를 이용하여 engine 변환
- Tensorrt C++ API를 이용한 추론 코드 작성-> ros2 패키지로 작성
3) TensorRT를 이용하여 segmenter 모델의 추론속도를 개선해보시오.
- custom data를 이용하여 segmenter 를 훈련
- pytorch export기능을 이용하여 onnx 변환
- TensorRT trtexec 명령어를 이용하여 engine 변환
- Tensorrt C++ API를 이용한 추론 코드 작성-> ros2 패키지로 작성
|
|
