본문 바로가기
카테고리 없음

[Ubuntu 20.04] CUDA 11.4.4 cuDNN v8.2.2 torch v1.11.0

by xi2d 2023. 11. 21.
반응형

1. Nvidia, CUDA 초기화

CUDA Toolkit 및 Nvidia driver 설치 또는 재설치 중 패키지 의존성 및 설치 불가능 오류가 뜰 경우, 대대적인 초기화를 진행한다. 

https://settembre.tistory.com/447

1.1. Nvidia driver 완전 삭제

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

1.2. CUDA 완전 삭제

$ sudo rm -rf /ust/local/cuda*
$ sudo apt-get --purge remove 'cuda*'
$ sudo apt-get autoremove --purge 'cuda*'

1.3. 마무리 추가 확인

$ sudo dpkg -l | grep nvidia 
$ sudo apt-get remove --purge 지울대상
$ sudo dpkg -l | grep nvidia

 

2. Nvidia, CUDA 초기화

오류로 인한 대대적인 초기화가 필요없다면, 기존에 사용했던 CUDA toolkit 및 Nvidia driver를 다음처럼 삭제할 수도 있다. 

https://jeo96.tistory.com/entry/Ubuntu-2004-CUDA-%EC%9E%AC%EC%84%A4%EC%B9%98

2.1. Cuda 삭제

$ sudo apt-get --purge -y remove 'cuda*'
$ sudo apt-get --purge -y remove 'nvidia*'
$ sudo apt-get autoremove --purge cuda

# cudnn remove
$ cd /usr/local/
$ sudo rm -rf cuda*

2.2. 기존 CUDA 관련 PATH 삭제

~/.bashrc/etc/profile에 아래와 같이 기존에 추가되어있는 설정도 제거해야 한다. 

$ sudo vim ~/.bashrc
$ sudo vim /etc/profile
export PATH=$PATH:/usr/local/cuda-11.0/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-{version}/lib64
export CUDADIR=/usr/local/cuda-{version}

2. 3. nouveau 비활성화

2.3.1. Nvidia nouveau driver 블랙리스트 설정

$ sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
$ sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"

2.3.2. 비활성화 확인

 

다음과 같이 출력이 나오는지 확인

$ cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf
blacklist nouveau
options nouveau modeset=0

 

리부트

$ sudo reboot

2.3.3. 커널 업데이트

$ sudo update-initramfs -u

 

3. Nvidia driver + CUDA 설치

3.1. Nvidia driver 설치

3.1.1. 설치 가능한 driver 확인

확인해보면 가장 적합한 driver인 recommended도 존재하지만 원하는 버전을 직접 입력하는 것이 좋아보인다. 

$ ubuntu-drivers devices

# 자동으로 드라이버 설치
$ sudo ubuntu-drivers autoinstall

 

3.1.2. driver 수동 설치 방법

여기서 아예 내가 설치할 driver, CUDA version을 확인하자. 

https://ingu627.github.io/tips/install_cuda_linux/#%EA%B8%B0%EC%A1%B4-nvidia-cuda-%EC%99%84%EC%A0%84-%EC%82%AD%EC%A0%9C

 

1. 현재 내가 사용하고 있는 GPU architecture를 찾고 그에 따라 지원하는 CUDA version을 확인한다.

본인은 GTX 1080 Ti라 Pascal에 해당하고, CUDA SDK는 8.0부터 사용 가능하다. 

https://en.wikipedia.org/wiki/CUDA#GPUs_supported

 

2. 위 조건에 고려하여, 내가 원하는 환경에서의 CUDA version을 확정하고, 그에 따른 최소 요구 사항을 충족하는 driver version으로 설치한다. 

CUDA 11.4.4를 사용하기로 결정하여, 470.82.01 이상인 nvidia-driver-470-server을 설치했다. (470을 받고보니 470.82.01이긴한데, 특히 높은 driver version 선택시에는 따로 조사해서 뒷자리 부분을 잘 확인해야 할 것 같다.)

https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions

 

 # 원하는 버전 설치
 sudo apt install nvidia-driver-470-server

 

리부트

$ sudo reboot

 

3.1.3. driver 설치 확인

여기서의 CUDA version은 현재 driver version에서 가장 적합한 version을 의미하므로, 현재 CUDA가 설치된 것이 아니다. driver version을 확인해주면된다. 

nvidia-smi

 

3.2. CUDA 설치

3.2.1. CUDA 설치 방법

위에서 확정한 원하는 CUDA version을 받으면 된다. deb(local)runfile(local) 방식을 주로 사용하는데, 일단 후자로 실행한다.  

https://developer.nvidia.com/cuda-toolkit-archive

 

그러나 어떤 문제인지는 모르겠으나, 꼭 안되는 경우가 발생하니 아래 창이 뜨지 않으면, deb(local)로도 실행해보라. 

https://precommer.tistory.com/66

 

아래 창이 뜨면 CUDA 설치가 진행된 것이다. 

 

3.2.2. CUDA PATH 설정

/etc/profile에 경로 설정을 해준다. 이 때 본인의 version에 맞는 cuda-x.x 이름으로 입력해줘야한다. 

직접 입력할 수도 있지만, 여기서는 terminal에서 입력하는 코드로 작성한다. 

$ sudo sh -c "echo 'export PATH=$PATH:/usr/local/cuda-11.4/bin'>> /etc/profile"
$ sudo sh -c "echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.4/lib64'>> /etc/profile"
$ sudo sh -c "echo 'export CUDARDIR=/usr/local/cuda-11.4'>> /etc/profile"

 

~/.bashrc에 위와 같은 방식으로 경로 설정을 해준다. 여기서도 본인의 version에 맞는 cuda-x.x 이름으로 입력해줘야한다. 

여기서는 직접 입력하여 작성한다. 

$ sudo vim ~/.bashrc

export PATH="/usr/local/cuda-11.4/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH"

 

3.2.3. CUDA 설치 확인

CUDA가 제대로 설치되었다면, CUDA version을 확인할 수 있다. 만약 가상환경 혹은 terminal의 환경 변수 설정으로 인해, "'nvcc'를 찾을 수 없습니다." 라고 나온다면, terminal에서 source /etc/profile 혹은 source ~/.bashrc를 사용하여 nvcc -V를 사용해보라. 

# 설정1
$ source /etc/profile
$ nvcc -V

# 설정2
$ source ~/.bashrc
$ nvcc -V

 

4. CuDNN 설치

4.1. CUDA에 맞는 CuDNN 다운로드

CUDA version에 맞는 cuDNN을 다운받는다. 정확하게 일치하는게 아니라 ~.x로 끝나는 version도 있는데, 받아도 상관은 없다고는 한다. 그러나 최신 version의 경우, 특정 다른 library에서 호환이 잘 되지 않는 경우가 많아, 어느정도 과거의 것을 받는것이 좋다. 

CUDA 11.4.4를 사용하므로, cuDNN v8.2.2 (July 6th, 2021), for CUDA 11.4로 다운받았다. 

https://developer.nvidia.com/cudnn

 

4.2. CuDNN 압축 해제 및 복사

4.2.1. 파일 압축해제 

다운로드 받은 위치로 이동하여 파일을 압축해제한다.  

$ tar xvzf cudnn-11.3-linux-x64-v8.2.1.32.tgz

 

4.2.2. 파일 복사

압축을 해제하면 cuda 폴더가 생성되고 해당 폴더로 이동한다. cuda/include 폴더안의 모든 파일은 cuda-11.4/include 폴더에 복사해주고, cuda/lib64 폴더안의 모든 파일은 cuda-11.4/lib64로 복사해주면 된다. 본인의 version에 맞는 cuda-x.x 이름으로 입력해줘야한다. 

$ sudo cp include/cudnn* /usr/local/cuda-11.4/include
$ sudo cp lib64/libcudnn* /usr/local/cuda-11.4/lib64/
$ sudo chmod a+r /usr/local/cuda-11.4/lib64/libcudnn*

# 아래와 같이 권한 설정한 곳도 있었다. 
$ sudo chmod a+r /usr/local/cuda-11.4/include/cudnn*.h /usr/local/cuda-11.4/lib64/libcudnn*

https://dohyeon.tistory.com/14

https://precommer.tistory.com/66

 

아래의 링크 설정까지 마무리해준다. 이 부분은 몇몇 블로그에서는 하지 않는 분도 계셔서, necessary한건지는 잘 모르겠다. 

$ sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.2.2 /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
$ sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.2.2 /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.2.2 /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
$ sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.2.2 /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.2.2 /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
$ sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.2.2 /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
$ sudo ln -sf /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn.so.8.2.2 /usr/local/cuda-11.4/targets/x86_64-linux/lib/libcudnn.so.8

https://data-science-hi.tistory.com/202

 

제대로 설치되면 다음과 같이 나온다고 한다. 

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

https://hjh1023.tistory.com/59

 

4.2.3. CuDNN 확인

#define CUDNN_MAJOR 8이 출력되면 제대로 설치된 것이다. 

$ cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

 

5. torch  설치

5.1. CUDA에 맞는 CuDNN 다운로드

만약 특정 torch version을 사용해야 한다면, 그에 따른 CUDA version 종속성이 존재한다. 만약에 원하는 torch version이 있다면 본인이 설치한 CUDA version이 가능한지 미리 알아보아야 한다. 

https://jjuke-brain.tistory.com/entry/GPU-%EC%84%9C%EB%B2%84-%EC%82%AC%EC%9A%A9%EB%B2%95-CUDA-PyTorch-%EB%B2%84%EC%A0%84-%EB%A7%9E%EC%B6%94%EA%B8%B0-%EC%B4%9D%EC%A0%95%EB%A6%AC

 

아래 pytorch 공식 홈페이지에서, 과거 torch version을 설치할 수 있다.  

https://pytorch.kr/get-started/previous-versions/

 

5.2. CUDA version에 맞는 torch version이 없을 경우

이럴 때에는 '-c nvidia'와 '-c conda-forge'를 추가해주면 해결된다. 

CUDA 11.4.4를 사용하므로, torch v1.11.0에서 CUDA 11.4를 적용한 아래 방식으로 다운받을 수 있다. 그런데, 이를 모르고 받았던 CUDA 11.3의 torch version에서도 잘 동작해서 그냥 쓰고있다. 

# 공식 홈페이지 제공 CUDA 11.3 
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113

# CUDA 11.4
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.4 -c pytorch -c nvidia -c conda-forge

 

+ 참고로 conda 가상환경을 사용하는데, 1.11.0+cu113 torch version이 특정 python version 이상에서 돌아가지 않는 관계로, python=3.8로 지정해서 가상환경을 생성하였다. 

https://jjuke-brain.tistory.com/entry/GPU-%EC%84%9C%EB%B2%84-%EC%82%AC%EC%9A%A9%EB%B2%95-CUDA-PyTorch-%EB%B2%84%EC%A0%84-%EB%A7%9E%EC%B6%94%EA%B8%B0-%EC%B4%9D%EC%A0%95%EB%A6%AC

 

반응형

댓글