안경잡이개발자

728x90
반응형

※ 오류 설명 ※

 

▶ 오류 메시지: "RuntimeError: CUDA error: no kernel image is available for execution on the device."

 

 

  이 오류는 잘 사용하던 GPU 서버가 있는 상태에서, GPU 장치를 변경했을 때 만날 수 있는 오류(error)다. 보통 GPU를 이용해 모델 학습이나 추론(inference)을 진행할 때 이러한 오류가 발생한다. 출력된 오류 메시지를 확인해 보면 새롭게 설치된 GPU 장치인 NVIDIA RTX A6000의 CUDA capabilitysm_8.6이라고 나와 있다. 하지만, 현재 설치된 PyTorch는 3.7, 5.0, 6.0, 7.0, 7.5와 호환된다고 나와 있다.

 

▶ 메시지: "The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70 sm_75."

 

 

  참고로 자신이 가지고 있는 GPU 장치의 Compute Capability는 다음의 경로에서 확인할 수 있다.

 

  ▶ Compute Capability 확인: https://developer.nvidia.com/cuda-gpus

 

CUDA GPUs

Your GPU Compute Capability Are you looking for the compute capability for your GPU, then check the tables below. NVIDIA GPUs power millions of desktops, notebooks, workstations and supercomputers around the world, accelerating computationally-intensive ta

developer.nvidia.com

 

※ 현재 버전 확인 방법 ※

 

1) NVIDIA 드라이버 버전 확인

 

  NVIDIA driver의 버전을 확인할 때는 nvidia-smi 명령어를 입력한다. 그러면 다음과 같이 NVIDIA driver와 호환되는 CUDA 버전 정보가 출력된다. 참고로 nvidia-smi 명령어를 이용했을 때 출력되는 CUDA 버전(version)은 사용할 수 있는 CUDA의 버전을 의미하므로, 일반적으로 현재 설치된 CUDA 버전보다 같거나 최신 버전이라면 문제가 되지 않는 경우가 많다.

 

Driver Version: 465.19.01, CUDA Version: 11.3

 

2) CUDA 버전 확인

 

  서버에 설치된 CUDA 버전을 확인할 때는 다음과 같이 입력한다.

 

cat /usr/local/cuda/version.txt

 

그러면 CUDA Version 10.1.168와 같이 현재 설치된 CUDA의 버전이 출력된다.

 

3) CUDNN 버전 확인

 

  CUDNN 버전을 확인할 때는 다음의 명령어를 사용한다.

 

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

 

  그러면 다음과 같이 출력된다. 아래 의미는 7.6.0 버전이라는 의미다.

 

#define CUDNN_MAJOR 7
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 0

 

4) PyTorch 버전 확인

 

  마지막으로 현재 설치된 PyTorch의 버전을 확인할 때는 python을 실행한 뒤에, 다음의 코드를 사용한다.

 

import torch

print(torch.__version__)

 

그러면 1.7.0+cu101와 같이 자신이 PyTorch의 버전이 출력된다.

 

※ 해결 방법 ※

 

  오류 메시지만 고려했을 때, 해결 방법은 간단하다. PyTorch를 재설치하면 된다. 먼저 현재 설치된 PyTorch를 지운다. 필자는 프로그램을 확실히 지우기 위해서 일반적으로 지우는 명령어를 2번 수행한다.

 

pip3 uninstall torch

 

  이후에 Compute Capability를 TORCH_CUDA_ARCH_LIST 환경 변수의 값으로 설정한다.

 

export TORCH_CUDA_ARCH_LIST="8.6"

 

  최종적으로 PyTorch를 재설치한다. CUDA 버전이 10.1이라면 다음과 같이 설치하면 된다. 참고로 f 옵션아카이브 링크를 찾는(finding) 옵션이다.

 

# CUDA 10.1
pip3 install torch==1.7.1+cu101 torchvision==0.8.2+cu101 -f https://download.pytorch.org/whl/torch_stable.html

 

  하지만 이렇게 해도 코드가 정상적으로 동작하지 않을 수 있다. 필자는 동일한 오류가 계속 발생하고 있는 것을 확인할 수 있었다. 찾아본 결과, 기본적으로 8.6 버전(sm_86)은 CUDA 11에 대하여 지원되기 때문에, CUDA 10을 사용하고 있는 것이 문제가 된다고 한다. 필자와 같은 상황에서는 CUDA의 버전이 낮은 것이 근본적인 원인이기 때문에 높은 CUDA 버전으로 CUDA를 재설치(혹은 추가 설치)해야 한다.

 

  ▶ [참고] 이전 버전의 PyTorch 설치https://pytorch.org/get-started/previous-versions/

 

PyTorch

An open source machine learning framework that accelerates the path from research prototyping to production deployment.

pytorch.org

 

※ 높은 버전의 CUDA 설치 방법 ※

 

  이럴 때는 여러 가지 해결 방법이 있다. 현재 설치된 CUDA 10.1을 제거하고, NVIDIA 드라이버와 호환되는 11.3을 설치할 수 있다. 혹은 현재 존재하는 CUDA 10.1은 그대로 둔 상태에서 새로운 버전의 CUDA를 추가적으로 설치할 수 있다. 필자는 기존에 설치된 CUDA는 내버려 둔 상태로 추가 설치를 진행하겠다.

 

  현재 설치된 CUDA 목록을 확인할 때는 /usr/local/ 경로에 있는 CUDA 폴더들을 확인하면 된다. 예시는 다음과 같다. 확인해 본 결과 CUDA 11.3은 설치되어 있지 않기 때문에, 이를 추가적으로 설치하고자 한다.

 

 

  ▶ CUDA 11.3.0 설치: https://developer.nvidia.com/cuda-11.3.0-download-archive

 

CUDA Toolkit 11.3 Downloads

Resources CUDA Documentation/Release NotesMacOS Tools Training Sample Code Forums Archive of Previous CUDA Releases FAQ Open Source PackagesSubmit a Bug

developer.nvidia.com

 

  자신의 서버 환경에 맞는 CUDA를 설치한다. 참고로 arch 명령어로 자신의 서버 아키텍처 종류를 확인할 수 있다. 또한 uname -a 명령어cat /etc/issue 명령어로 현재 자신의 OS 버전을 알 수 있다. 아래와 같이 플랫폼(platform)을 적절히 기입한 뒤에 설치 명령어를 확인할 수 있다.

 

 

  필자의 경우 다음과 같은 설치(installation) 명령어가 등장했다. 이러한 명령어를 한 줄씩 문제가 없는지 확인하면서 차례대로 입력하면 된다.

 

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda-repo-ubuntu1804-11-3-local_11.3.0-465.19.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-3-local_11.3.0-465.19.01-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-3-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

 

  설치가 완료되었다면 다음과 같이 /usr/local 경로새로운 버전의 cuda가 설치 완료된 것을 알 수 있다.

 

 

  이렇게 CUDA가 정상적으로 설치되었다면 ~/.profile 파일을 열어서 다음과 같이 문자열을 추가한다. (자신이 설치한 버전에 맞게 적절한 폴더명을 넣어야 한다. 필자는 11.3을 기입했다.)

 

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

 

  다음과 같이 가장 마지막 줄에 해당 내용을 추가하면 된다.

 

 

  이후에 source ~/.profile 명령어를 이용해 반영하면 된다. 이후에 정상적으로 CUDA 설치가 완료되었는지 버전을 확인한다. nvcc -V 명령어를 사용하여 확인할 수 있다. (만약 nvcc가 설치되어 있지 않다면 sudo apt install nvidia-cuda-toolkit 명령어로 설치할 수 있다.) 결과적으로 다음과 같이 CUDA 11.3 버전으로 정상 동작하고 것을 알 수 있다.

 

 

※ NVIDIA 드라이버 재설치 ※

 

  결과적으로 문제가 해결되었다고 생각했는데, 이번에는 nvidia-smi 명령어를 사용했을 때 다음과 같은 오류 메시지가 출력되었다.

 

 

  그래서 필자는 깔끔하게 NVIDIA driver도 지운 뒤에 다시 설치하고자 했다. 이때는 가장 먼저 다음의 명령어로 NVIDIA driver를 제거할 수 있다.

 

sudo apt-get --purge remove *nvidia*

 

  정상적으로 driver가 완전히 제거되었는지 확인하기 위해 다음의 명령어를 사용할 수 있다.

 

sudo dpkg -l | grep nvidia​

 

  이후에 ubuntu-drivers devices 명령어로 적절한 NVIDIA 드라이버를 추천받자. (이러한 명령어가 동작하지 않는다면 sudo apt install ubuntu-drivers-common 명령어로 설치한다.)

 

 

  NVIDIA 드라이버를 설치하기 위해 가장 먼저 repository를 추가한다.

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update


  이후에 NVIDIA 드라이버를 설치하면 된다. 필자는 470을 추천 받았으므로 다음의 명령어를 사용했다.

 

sudo apt-get install nvidia-driver-470

 

  이후에 nvidia-smi 명령어를 입력했을 때 정상적으로 NVIDIA driver가 구동되는 것을 확인할 수 있다. 참고로 현재 동작 중인 주피터 노트북 서비스가 있다면, 주피터 노트북을 껐다가 다시 구동시켜주도록 하자. 마지막으로 적절한 버전의 PyTorch를 재설치하자. 최종적으로 PyTorch를 제거한 뒤에 다음의 명령어로 최신 버전의 PyTorch를 재설치했다. 이때 CUDA는 11.4보다 낮지만 호환되는 11.3으로 선택했다.

 

pip3 install torch==1.10.2+cu113 torchvision==0.11.3+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

 

  결과적으로 모든 문제가 해결되어 정상적으로 GPU를 활용한 딥러닝 모델 학습 코드가 동작하게 되었다.

728x90
반응형

Comment +0