Knowhow/TensorRT

[TensorRT 튜토리얼] 1-1. CUDA installation

침닦는수건 2024. 1. 19. 16:09
반응형

CUDA는 꼭 TensorRT가 아니더라도, pytorch를 비롯한 딥러닝 프레임워크를 쓸 때 자주 깔고 지우는 일이 있기 때문에 설치에 익숙해져 있으면 좋다. 

Check pre-installed CUDA

먼저 CUDA를 가상환경이나 docker에 새로 설치하는 것이 아닌 경우, 이미 설치된 CUDA가 있거나 설치 파일/설정이 남아있는지 확인하는 것이 좋다. 이후에 설치할 TensorRT, pytorch 모두 CUDA 버전에 dependent하므로 정확하게 설치하기 위함이다. 

 

설치했었는지 조차 잘 모르겠으면 다음 커맨드를 쳐보자.

sudo apt-key list

 

pub   rsa4096 2017-09-28 [SCE]
      C95B 321B 61E8 8C18 09C4  F759 DDCA E044 F796 ECB0
uid           [ unknown] NVIDIA CORPORATION (Open Source Projects) <cudatools@nvidia.com>

 

만약 위와 같이 NVIDIA 관련된 출력 결과가 있을 경우, NVNDIA repository를 등록한 적이 있다는 뜻으로 높은 확률로 CUDA를 설치했을 것이다. 몰랐더라도 드라이버를 설치하는 과정에서 sudo apt-get install nvidia-cuda-toolkit 같은 커맨드를 입력한 적이 있다면 모르는 사이 설치되었을 것이다. 

 

cd /etc/apt/sources/list.d/
ls

 

더 정확하게 /etc/apt/sources/list.d/ 경로에 들어갔을 때, cuda로 시작하는 뭔가가 깔려있다면 설치되어 있는 것이다.

 

Uninstall CUDA

sudo rm /etc/apt/sources.list.d/cuda*
sudo apt remove --autoremove nvidia-cuda-toolkit
sudo apt-get --purge remove "cuda*" 
sudo apt-get autoremove

 

 

삭제는 간단하다. cuda로 시작하는 모든 파일을 삭제하도록 하고 혹시 모를 나머지들은 autoremove를 통해 자동 삭제하면 된다.

 

sudo rm -rf /usr/local/cuda*

 

추가로 /usr/local 경로에 가보면 cuda-* 형태의 폴더들이 존재할 수 있는데 이것도 지워주면 좋다. 아마 이 버전 저 버전 ㅅ설치하려고 시도했었다면 cuda 폴더가 여러개 존재할 것이다.

 

이 것들은 코드 덩어리라고 보면 되고 .bashrc에서 path로 지정해주지 않는 이상 그냥 standby 하는 폴더기 때문에 삭제할 필요가 굳이 없지만 깔끔한 환경을 위해 지우는게 낫다.

 

마지막으로 직접 설치된 cuda와 관련된 것은 아니지만, 어디에 cuda에 깔려있다고 경로를 적어둔 파일도 정리해준다.

gedit ~/.bashrc

 

.bashrc 파일 열고 보다보면 위와 같이 cuda 관련 경로 지정해주는 라인이 있으면 이것도 지워주자. 직접 export를 한 적이 없으면 없을 수도 있다. 없으면 넘어가면 된다.

 

 

Issue

bashrc export 문장을 보면 /usr/local/cuda라고 적어두었지만 실제로 해당 경로에 cuda라는 폴더는 위 사진처럼 존재하지 않을 수도 있다. 그럼에도 불구하고 동작을 잘 했다.

 

이건 나도 잘 모르겠는데 cuda까지만 적어도 알아서 뭘 찾아 쓰는 것 같다. 그런데 의도한 버전을 가져오지 못하고 아래 그림 처럼 제멋대로 10.1을 어디서 찾아왔는지 (과거에 쓴 적 있는 버전) 쓰고 있다.

 

따라서 export 다시 할 때는 /usr/loca/cuda-12.1과 같이 버전까지 명시해주는 것이 좋을 듯 하다. 

 

최종적으로 제거가 완료됐는지는 아래 커맨드 출력 결과가 not found로 나와야 한다. 

nvcc --version

 

새로 깔 준비가 된 것이다.

 

WARNING

sudo apt-get purge nvidia*
sudo apt-get autoremove
sudo apt-get autoclean

 

일부 글에서 위와 같이 nvidia로 시작하는 모든 파일을 삭제하라고 안내하기도 하는데, 절!대! 생각 없이 따라치면 안된다.

 

위와 같이 지우면 driver까지 한 번에 날아가기 때문에 일이 커진다. 순간 화면도 먹통되기 때문에 당황하기 좋음.

 

절대 nvidia*로 전체 삭제하지 말고 cuda*로 시작하는 것들만 선택적으로 지워야 한다.

 

Install CUDA

먼저 가장 쉽게는 자동 설치를 할 수 있긴 하다. nvcc --version 입력 시 추천 커맨드로 나오는 바와 같이 쉽게 설치할 수 있다.

sudo apt-get install nvidia-cuda-toolkit # not recommended

 

하지만 위 커맨드는 추천하지 않는다. 자동 설치이기 때문에 정확히 어떤 버전이 설치되는지 모른다. 설치 완료된 뒤 확인할 수 있을 뿐이다.

 

특히 TensorRT처럼 CUDA 버전에 민감한 설치가 예정된 경우에는 직접 설치하는 것을 권장한다. 

 

실제로 나는 RTX3090 GPU 인데 10.1이 자동으로 깔리는 결과를 본 적 있다. 

jseob@xxxxxxxxxxx:~$ sudo apt install nvidia-cuda-toolkit
[sudo] password for jseob: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
nvidia-cuda-toolkit is already the newest version (10.1.243-3).
0 upgraded, 0 newly installed, 0 to remove and 13 not upgraded.

 

 

 

CUDA는 공식 홈페이지를 통해서 직접 설치할 수 있는데, 크게 deb 파일을 이용하는 방식과 runfile을 이용하는 방법이 있다.

 

일단 이 글은 CUDA 설치를 다루는 글이므로 두가지 방식을 모두 기록할 것이지만, 결론부터 말하면 .deb 파일로 설치하는 것이 좋다. 뒤에 TensorRT도 .deb 파일로 설치할 것인데 이럴 경우 CUDA도 .deb 파일로 설치되어 있어야 하기 때문이다.

 

Installation using runfile (not recommended)

 

https://developer.nvidia.com/cuda-downloads

 

CUDA Toolkit 12.1 Downloads

Get the latest feature updates to NVIDIA's proprietary compute stack.

developer.nvidia.com

 

 

공식 홈페이지에 접속하면 위와 같은데, 어떤 버전의 CUDA를 설치할 지 결정할 때부터 TensorRT를 고려하는 것이 좋다.

 

TensorRT가 아직 모든 버전의 CUDA와 호환되는 것이 아니기 때문에 꼭 미리 확인하고 설치하면 좋다. 

 

https://docs.nvidia.com/deeplearning/tensorrt/release-notes/index.html

 

Release Notes :: NVIDIA Deep Learning TensorRT Documentation

These are the TensorRT 8.5.2 Release Notes and are applicable to x86 Linux, Windows, JetPack, and PowerPC Linux users. This release incorporates Arm® based CPU cores for Server Base System Architecture (SBSA) users on Linux only. This release includes sev

docs.nvidia.com

 

위의 TensorRT realese note를 보고 필요 버전을 미리 확인해야 한다. 예시에서는 현 시점 (20240112)에서 12.1 update 1를 설치했다. 

 

공식 홈페이지에서 친절하게 명령어를 제공해주므로 순서대로 run 파일을 다운받고 실행하면 자동으로 설치가 진행된다. 

 

주의할 점은 runfile은 cuda toolkit 설치에만 쓰이는 건 아니고 driver부터 이것 저것 다 설치하는데 쓰이기 때문에 중간에 뜨는 체크박스를 꼼꼼히 확인해야 한다. 특히! driver[X] 표시를 해제해서 driver[ ] 상태로 만들어야 한다. 안 그러면 driver까지 다 다시 깔린다!

 

run 커맨드를 입력하고 종료되면 위 빨간 상자와 같이 LD_LIBRARY_PATH에 CUDA를 추가해주라고 가이드가 나온다. 

geidt ~/.bashrc

### add these lines at the end
# export PATH="/usr/local/cuda-xx.x/bin:$PATH"
# export LD_LIBRARY_PATH="/usr/local/cuda-x.x/lib64:$LD_LIBRARY_PATH"

 

경로 export까지 끝났다면 재부팅 해주거나 bashrc source를 해준다. 

source ~/.bashrc
nvcc --version

 

nvcc --version이 정확히 설치한 CUDA 버전을 출력하면 설치 완료된 것이다. 

 

 

Install using .deb file (recommended)

 

최종적으로 권장하는 방식인 .deb 파일을 이용한 CUDA 설치도 시작은 똑같이 공식 홈페이지다. 

 

역시 설치하고자 하는 TensorRT 버전에 맞추어 CUDA 버전을 지정한 뒤, deb(local) 설치를 가이드 따라 진행하면 된다. 

 

주의할 점은 dpkg 이후에 keyring.gpg 파일들을 복사하는 과정이 있는데이 과정을 여러 CUDA 버전을 시도해보는 과정에서 여러 번 반복했다면 /usr/share/keyrings/ 폴더 하위에 cuda-*-keyring.gpg 이름의 파일이 다수 존재할 것이다. 

 

이 keyring.gpg 파일 정리가 제대로 되어있지 않을 경우, 뒤 install 커맨드에서 다른 버전을 설치할 수도 있다. 따라서 /usr/share/keyrings/ 하위 cuda로 시작하는 keyring.gpg 파일들은 재시도할 때마다 지워주는 것이 맞다. 

 

cd /usr/share/keyrings
sudo rm -rf cuda-*

 

마지막 작업은 runfile을 사용할 때와 같이 bashrc를 업데이트해주는 작업이다. 

geidt ~/.bashrc

### add these lines at the end
# export PATH="/usr/local/cuda-xx.x/bin:$PATH"
# export LD_LIBRARY_PATH="/usr/local/cuda-x.x/lib64:$LD_LIBRARY_PATH"

 

역시 재부팅하거나 bashrc source를 다시 해주면 된다. (재부팅 권장)

source ~/.bashrc
nvcc --version

 

최종적으로 버전을 잘 지정하고 정리할 파일 잘 정리해서 설치 완료했다면 다음과 같이 nvcc, nvidia-smi에서 같은 CUDA 버전을 출력하고 있을 것이다.  

 

 

Extra

nvidia-smi
nvcc --version

 

위 두가지 커맨드는 CUDA 버전을 확인할 때 쓰는 대표적인 커맨드인데 서로 다른 버전을 출력할 때가 있다. 

 

 

https://bo-10000.tistory.com/73

 

nvidia-smi와 nvcc로 본 CUDA version이 다를 때

CUDA version을 확인할 수 있는 방법은 두 가지가 있다. 하나는 nvidia-smi를 이용하는 것이고, 하나는 nvcc를 이용하는 것이다. 둘의 version이 달라서 찾아보니, 다음과 같은 답을 얻을 수 있었다. 출처 :

bo-10000.tistory.com

 

위 글을 참고하니 원인은 각각 버전을 읽는 API가 다르기 때문이다. 결론부터 말하면 nvcc --version을 보는 것이 맞다.

반응형