상세 컨텐츠

본문 제목

CUDA (+CUDA Toolkit), Nvidia Driver, cuDNN 우분투 20.04 설치

PyTorch

by Riella 2021. 3. 2. 20:43

본문

728x90

Reference: 출처 1, 출처 2, CUDA 공식 웹사이트 (버전 체크), 공식으로 나온 설치 방법

 

파이토치와 버전을 맞추기 위해 cuda11.1, cuDNN 8.1.1을 설치하겠습니다.

최근에는 cuda11.3까지 호환이 되어 cuda11.3, cuDNN 8.2.0이나 8.2.1을 설치해도 되는 모양입니다.

설치방법은 거의 동일하고 cuda 버전만 11.3으로 적어주면 됩니다. 관련 링크도 같이 첨부하였습니다.

 

[기존 파일 지우기]

cuda를 설치한 적이 있다면 apt에 repo가 등록되어있을 건데 지워줍니다.

등록된 key값 있는지 확인

sudo apt-key list

nvidia/cuda 패키지가 존재한다면

sudo rm /etc/apt/sources.list.d/cuda*

nvidia-cuda-toolkit 제거

sudo apt remove --autoremove nvidia-cuda-toolkit

기존에 설치되어있는 Nvidia config 파일 의존성 파일 등등 지우기.

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

제가 설치할 때는 이렇지 않았지만 /usr/local/ 에 cuda 또는 cuda 뭐시기 폴더가 있으면 install이 안 되는 경우도 있다고 한다.

그럴 때는 그 폴더들 지워주기

sudo rm -rf /usr/local/cuda*

~/.bashrc에 cuda path랑 LD_LIBRARY_PATH를 설정했다면 지워주자.

nano ~/.bashrc
해당하는 경로 제거 후 저장

 

[설치하기 전에...]

cuda 사용 가능한 gpu인지 확인하기

lspci | grep -i nvidia

여기에 있는 gpu이면 사용 가능!

 

사용 가능한 리눅스 버전인지 확인하기

uname -m && cat /etc/*release

gcc가 설치되었는지 확인하기

gcc --version

마지막으로 커널 버전 확인하고 그에 맞는 커널 헤더와 개발 패키지를 설치해줘야 한다.

uname -r
예: 5.8.0-44-generic라고 뜨면 5.8.0-44가 커널 버전이다.
sudo apt-get install linux-headers-$(uname -r)
예: sudo apt-get install linux-headers-$5.8.0-44

만일 E: Couldn't find any package by regex 'linux-headers-3.8.0-44' 이런 식으로 뜬다면

apt-cache search linux-headers를 입력하고 골라서 설치해도 된다는 글이 있었지만

아래 명령어를 통해 generic버전을 다운로드하였다.

sudo apt-get install linux-headers-generic

 

[cuda, Nvidia Driver, cuda toolkit 설치]

CUDA Toolkit 11.1.0에 잘 적혀있다. 따라서 입력해주면 된다.

CUDA Toolkit 11.3 다운로드 관련 링크

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin

여기서 에러가 뜨면 아마 드라이버 삭제 후 리부트를 안 해서 그럴 수 있다.

컴퓨터를 다시 껐다가 킨 후 돌려보자.

sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600

[update 22/05/30]

링크에 따르면 22/04/27부터 Nvidia가 지속적으로 키를 업데이트 한다고 한다.

그래서 기존의 키는 안먹히는걸 확인하였다.

기존의 키를 이미 등록한 경우 지워주자.

sudo apt-key del 7fa2af80

repo 지워주기

sudo add-apt-repository --remove "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"

ubuntu20.04, x86_64기준

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb

다른 우분투 버전이나 아키텍처 사용하는 경우는 맞는 버전을 적어준다.

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu[버전]/[아키텍처 이름]/cuda-keyring_1.0-1_all.deb

받은 패키지 압축 해제

sudo dpkg -i cuda-keyring_1.0-1_all.deb

repo 키 등록

sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub

repo주소 더해주기.

sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"

cuda, Nvidia Driver 설치

sudo apt update
sudo apt install cuda-11-1

여기서 자동으로 r460 nvidia 드라이버가 깔린다. r450이 깔려야 하는데.. 하면서 삽질을 엄청했다.

심지어 드라이버를 버전 450으로 깔아도 cuda를 깔면 버전이 바뀌어있었다.

물론 그걸 막는 방법도 나와있으나..

괜히 이상한 프로세스 죽이다가 다시 다 설치해야 할 수 있다 ㅋㅋ.. 그리고 자동 설치를 끊어도 계속 이렇게 되었다.

그리고 소프트웨어 & 업데이트 가서 드라이버를 바꾼다든지 하지 말자.

바꾸면 cuda cuda-11 cuda-11.1 파일들이 사라진다.

다른 블로그에서도 10.1을 설치했는데 nvidia-smi에서 10.2가 떴다는 글을 봤다.

그분처럼 /usr/local/에 cuda-11.1 파일이 있어서 가만히 두었다.

설치가 끝나면 리부트 해준다.

 

cuda toolkit 설치

sudo apt install nvidia-cuda-toolkit

참고로 cuda가 라이브러리라면 cuda toolkit은 cuda로 gpu 프로그래밍할 때 쉽게 해주는 소프트웨어라고 한다.

 

[cuDNN 설치]

cuDNN 설치를 위한 repo 패키지 설치

wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb
sudo dpkg -i nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb

 

apt에 cuDNN repo 추가

sudo bash -c 'echo "deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 /" >> /etc/apt/sources.list.d/nvidia-machine-learning.list'

 

cuDNN 설치 (참고로 cuda 버전 11.1입니다. 버전에 따라 맞는 cuDNN 버전이 다릅니다.)

sudo apt install libcudnn8=8.0.5.*-1+cuda11.1 libcudnn8-dev=8.0.5.*-1+cuda11.1

cuDNN 8.2.1 설치 (cuda 버전이 11.3인 경우입니다)

sudo apt install libcudnn8=8.2.1.*-1+cuda11.3 libcudnn8-dev=8.2.1.*-1+cuda11.3

8.2.1.32-1 버전이 깔리네요 :)

 

[환경 변수 영구적으로 설정]

11.1이면 아래 명령어에서 cuda-11.1로 변경

echo 'export PATH=/usr/local/cuda-11.3/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.3/lib64' >> ~/.bashrc
source ~/.bashrc

잘 더해졌나 확인하기

echo $PATH
echo $LD_LIBRARY_PATH

~/.profile에서 수정하셔도 됩니다.

 

[버전 확인]

첫 줄은 Nvidia Driver 버전과 cuda driver API 버전, 두 번째 줄로는 cuda runtime API 버전을 확인할 수 있다.

환경 변수가 맞게 설정되어 있다면 nvcc가 설치한 버전(11.1)으로 나와야 한다 (자세한 설명).

nvidia-smi
nvcc --version
(혹은 nvcc -V)

cuDNN 버전 확인

/sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn

 

참고:

cuda 11.1을 깔고 파이썬 가상 환경을 만든 후에 그 안에서 pip로 pytorch를 설치할 때

pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html

11.2는 아직 서포트가 안돼서 재설치하였다.

만일 cuda, cuDNN, pytorch버전이 안 맞으면 CUDNN_STATUS_NOT_INITIALIZED 에러가 뜬다 (물론 다른 이유로 이 에러가 뜨는 것도 가능하다- 링크).

설치 제거

 

 

끝까지 봐주셔서 감사합니다 :)

관련글 더보기

댓글 영역