본문 바로가기
Deep Learning (Computer Vision)/Model Compression and Optimization

TensorRT설치하기

by 187cm 2023. 8. 31.
반응형

우선 Python 3.10.12 기준으로 설치할 예정이며, CUDA 버전은 nvcc -V를 했을 때 아래와 같다. 혹시 모르니 nvidia-smi를 했을 때의 환경 또한 첨부하자면 아래와 같다. 근데 지금 확인했는데 왜.. nvidia-smi에 12.1로 잡히는거지...어쨌든 11.8 CUDA를 기준으로 설치했다.

파이토치에서 TensorRT를 그냥 대충 설치하고 실행하면 되겠지 하고 안일한 마음으로 실행하다가 3일을 날려먹은 나레기 혹시 나와 같은 실수를 하는 사람이 있을지 모르기 때문에, 일단 기록용으로 적어두려고 한다.

RuntimeError: forward() expected at most 1 argument(s) but received 2 argument(s).
Declaration: forward.forward(__torch__.timm.models.efficientnet.EfficientNet_trt self_1) -> ()

내가 본 오류는 위와 같은데, 아무리 입력 데이터를 넣어도 자꾸 2개가 들어왔다는 오류가 떴다. 아무리 봐도 버전오류라는 결론을 내렸고, 여러번의 가상환경을 지웠다가 설치한 후에 해결하였다. 해결 방법은 아래와 같다.


가장 먼저 간단하게 가상환경을 만들어주자.

conda activate base

conda create --name ~~~ python=3.10.12
conda activate ~~~

그리고 cuda-toolkit 설치하고, cudnn 까지 설치하자. CUDA가 11.8 버전이 아니라면, 해당 버전에 맞는 cudatoolkit과 cudnn으로 바꿔주어야한다.

pip install numpy cupy
conda install -c conda-forge cudatoolkit=11.8.0
pip install nvidia-cudnn-cu11==8.6.0.163

 

그리고 위애서 설치한 CuDNN 라이브러리의 경로를 지정해주자. CUDNN_PATH의 경로를 추출 후, 두번째 줄에서 추가해주고, script가 저장될 경로도 만든다. 마지막으로 source를 통해 적용.

 

CUDNN_PATH=$(dirname $(python -c "import nvidia.cudnn;print(nvidia.cudnn.__file__)"))
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib/:$CUDNN_PATH/lib:$LD_LIBRARY_PATH
mkdir -p $CONDA_PREFIX/etc/conda/activate.d
echo 'CUDNN_PATH=$(dirname $(python -c "import nvidia.cudnn;print(nvidia.cudnn.__file__)"))' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
echo 'export LD_LIBRARY_PATH=$CONDA_PREFIX/lib/:$CUDNN_PATH/lib:$LD_LIBRARY_PATH' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh

source $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh

그리고 아래의 페이지에 들어가서 버전에 맞는 파일 다운 받기. 나는 TensorRT CuDNN을 8.6으로 설정했기에, 8.6 GA or EA를 다운받았다. GA가 General Availability로 그냥 일반적으로 쓰는 프로그램이고, EA는 Early Access로 초기 버전에 나온 제품이다. GA를 추천하지만 어떤걸 다운 받아도 상관 없을 듯 하다.
https://developer.nvidia.com/nvidia-tensorrt-8x-download

아 그리고 자신의 리눅스 os에 맞는 파일을 다운 받아야 한다. 나는 18.04를 사용하니까 저 파일을 다운 받았다.

그리고 이 TensorRT는 서버에서 실행할 것이므로 서버로 옮겨주었다.

그리고 이제 아래와 같은 명령어를 수행해야하는데, 파일 이름을 기준으로, 아래 os랑 tag를 완성해주고 실행시키면 된다. 혹은 그냥 파일 이름을 그대로 sudo dpkg -i ... 뒤에 붙여넣으면 된다.

그리고 이 dpkg 명령어를 수행하고 나면 아래와 같이 sudo cp ... 와 같은 명령어가 나온다. 이거 그대로 복사해서 실행시키자.

sudo apt-key add /var/.../*.pub 부분은 그냥 루트 디렉토리에서 var 폴더에서 직접 확인하고 넣으면 된다. 저 부분에서 폴더가 없다는 오류가 자주 떠서 직접 확인하는게 마음이 편하다. 위에서 우측과 같이 폴더 이름 확인하고 아래에다가 넣자.

위와 같이 pub 파일이 하나 있는데 이거를 적용시키는 과정이다.

os="ubuntu1804"
tag="8.6.0-cuda-11.8"
sudo dpkg -i nv-tensorrt-local-repo-${os}-${tag}_1.0-1_amd64.deb
# 실행하고 나서 나오는 아래의 키 그대로 실행
sudo cp /var/nv-tensorrt-local-repo-${os}-${tag}/*-keyring.gpg /usr/share/keyrings/
# 직접 /var 폴더 가서 폴더 이름 그대로 적고 실행.
sudo apt-key add /var/nv-tensorrt-local-repo-ubuntu1804-8.6.1-cuda-11.8/*.pub
sudo apt-get update

 

그리고 아래와 같이 남은 필요한 친구들을 전부 다운 받아주면 된다. 

Pytorch만 필요하신 분들은 Tensorflow를 빼면 되고, Tensorflow만 쓰실 분들은 torch_tensorrt를 빼면 된다.

pip install tensorflow==2.12.0
python3 -m pip install --upgrade tensorrt_lean

python3 -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"

export TF_ENABLE_ONEDNN_OPTS=0
pip install tensorrt
pip install tensorrt_bindings

sudo apt-get install libnvinfer8

sudo apt-get install -y tensorrt

sudo apt-get install python3-libnvinfer-lean

sudo apt-get install uff-converter-tf

python3 -m pip install numpy onnx
sudo apt-get install onnx-graphsurgeon

pip install matplotlib
pip install timm==0.4.12

혹시 오류가 생기거나 문제가 생기면 댓글을 달아주세여

반응형