가이드 · 문제 해결

PyTorch에서 GPU를 인식하지 못할 때

대부분 CPU 전용 PyTorch가 설치됐거나, 드라이버가 없거나 너무 오래된 경우예요. 한 줄 진단 명령으로 어느 쪽인지 먼저 확인하세요.

업데이트
읽는 시간
약 9분

한 줄 진단부터 해요

GPU를 쓰려는 바로 그 환경에서 실행하세요. PyTorch 버전, 빌드의 CUDA 버전, GPU 사용 가능 여부가 차례로 나와요.

bash
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"
출력별로 먼저 확인할 곳 (버전 숫자는 예시)
출력뜻먼저 볼 곳
2.4.0+cpu None FalseGPU용 코드가 없는 빌드예요CPU 전용 빌드
2.4.0+cu124 12.4 FalseCUDA 빌드인데 GPU에 접근하지 못해요드라이버, 환경 변수, Docker
... True인데 연산에서 오류GPU는 보이지만 맞는 커널이 없어요no kernel image 오류
No module named 'torch'설치한 곳과 다른 파이썬을 실행 중이에요파이썬과 가상환경

torch.version.cuda는 휠에 들어 있는 CUDA 버전이라 시스템 CUDA 툴킷과 달라도 괜찮아요. 명령마다 버전이 다르게 나오는 이유는 CUDA 버전 확인하는 법을 보세요.

CPU 전용 PyTorch가 설치된 경우

가장 흔한 원인이에요. 버전 끝에 +cpu가 붙고 torch.version.cuda가 None이면 드라이버를 고쳐도 소용없으니, 맨 아래 순서대로 CUDA 빌드를 다시 설치하세요. 주로 이럴 때 생겨요.

  • Windows에서 인덱스 주소 없이 pip install torch를 실행했어요.
  • requirements.txt나 다른 라이브러리를 설치하다 기존 torch가 다른 빌드로 바뀌었어요.
  • 설치 페이지에서 CPU를 고른 명령이나 CPU 전용 Docker 이미지를 썼어요.

드라이버가 없거나 너무 오래된 경우

CUDA 빌드인데도 False라면 다음은 드라이버예요. nvidia-smi로 GPU 표가 나오는지 보세요.

bash
nvidia-smi

command not found면 드라이버가 없어요. NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver는 드라이버가 로드되지 않은 상태로, 설치 후 재부팅하지 않았거나 커널을 업데이트한 뒤에 자주 생겨요.

드라이버가 휠의 CUDA 버전보다 오래된 경우

nvidia-smi 오른쪽 위의 CUDA Version이 torch.version.cuda와 같거나 높아야 안전해요. 같은 메이저 버전 안에서는 조금 낮아도 동작하기도 하지만, 드라이버는 11.x인데 PyTorch는 12.x처럼 메이저가 다르면 GPU를 쓸 수 없어요.

이때는 The NVIDIA driver on your system is too old 경고가 나와요. 드라이버를 올리거나, 올릴 수 없다면 더 낮은 CUDA로 빌드된 PyTorch를 설치하세요.

CUDA_VISIBLE_DEVICES가 GPU를 가리는 경우

CUDA_VISIBLE_DEVICES는 프로세스에 보여 줄 GPU 번호를 정하는 환경 변수예요. 값이 비어 있거나 없는 번호(GPU가 한 장인데 1)면 nvidia-smi에는 GPU가 보여도 PyTorch는 찾지 못해요.

bash
env | grep CUDA_VISIBLE_DEVICES
python -c "import torch; print(torch.cuda.device_count())"

첫 줄에 아무것도 안 나오면 설정되지 않은 거라 괜찮아요. 비어 있거나 번호가 틀렸다면 unset CUDA_VISIBLE_DEVICES로 지우거나 export CUDA_VISIBLE_DEVICES=0처럼 고치세요. 주로 ~/.bashrc, 실행 스크립트, Jupyter 커널 설정에 남아 있어요. 코드에서 os.environ으로 바꾼다면 PyTorch가 CUDA를 초기화하기 전에 설정해야 해요.

Docker 컨테이너 안에서만 안 될 때

GPU가 컨테이너에 전달되지 않은 거예요. 실행할 때 --gpus all을 주고, 호스트에 NVIDIA Container Toolkit이 설치돼 Docker에 설정돼 있어야 해요.

bash
docker run --rm --gpus all ubuntu nvidia-smi
호스트 설정이 맞으면 컨테이너 안에서도 GPU 표가 나와요.

could not select device driver "" with capabilities: [[gpu]] 오류는 Toolkit이 없거나 설정되지 않았다는 뜻이에요. NVIDIA Container Toolkit 설치 문서대로 설치하고 sudo nvidia-ctk runtime configure --runtime=docker 실행 후 Docker를 재시작하세요. Docker Compose라면 deploy.resources.reservations.devices에 GPU를 지정해요.

GPU가 전달돼도 이미지 안의 PyTorch가 CPU 빌드면 False예요. 컨테이너 안에서도 진단 명령을 실행해 보세요.

다른 파이썬이나 가상환경을 쓰고 있는 경우

CUDA 빌드를 설치했는데 +cpu이거나 torch가 없다고 나오면, 가상환경을 활성화하지 않았거나 pip과 python이 서로 다른 환경을 가리키는 거예요.

bash
which python
python -m pip show torch
python -c "import sys; print(sys.executable)"
Windows에서는 which 대신 where python을 써요.

pip show의 Location이 which python과 같은 환경 안에 있어야 해요. python -m pip으로 설치하면 지금 실행하는 파이썬에 정확히 들어가요. 노트북은 커널이 쓰는 환경도 확인하세요. 커널 등록은 원격 서버에서 JupyterLab 쓰기에 있어요.

no kernel image is available 오류

is_available()은 True인데 연산에서 CUDA error: no kernel image is available for execution on the device가 나는 경우예요. 휠에 내 GPU 세대(compute capability)용 코드가 없다는 뜻으로, 아주 새 GPU에 오래된 휠을 쓰거나 지원이 빠진 오래된 GPU에 새 휠을 쓸 때 생겨요.

그 전에 is not compatible with the current PyTorch installation(새 GPU)이나 PyTorch no longer supports this GPU because it is too old(오래된 GPU) 경고가 먼저 나오기도 해요.

python
import torch

print(torch.cuda.get_device_name(0))
print(torch.cuda.get_device_capability(0))  # 예: (8, 6)
print(torch.cuda.get_arch_list())  # 예: ['sm_50', ..., 'sm_86', 'sm_90']

(8, 6)이면 목록에 sm_86이 있어야 해요. 같은 메이저의 낮은 항목(sm_80)만 있어도 대개 동작하지만, 메이저가 같은 항목이 없으면 이 휠로는 어려워요. 새 GPU는 더 높은 CUDA 휠을, 오래된 GPU는 더 낮은 CUDA 휠을 고르세요. CUDA 13부터 Volta 지원이 빠져서 V100(sm_70)에는 CUDA 12.x 빌드를 써요.

CUDA 빌드로 다시 설치하기

  1. 드라이버가 지원하는 CUDA 버전을 확인해요

    nvidia-smi의 CUDA Version보다 높은 CUDA로 빌드된 PyTorch는 고르지 마세요.

  2. 공식 선택기에서 설치 명령을 받아요

    PyTorch 설치 페이지에서 OS, pip, Python, Compute Platform을 고르면 명령이 나와요. 드라이버와 GPU 세대를 모두 지원하는 CUDA 버전을 고르세요.

  3. 기존 torch를 지우고 설치해요

    같은 버전이 있으면 pip이 Requirement already satisfied로 넘어가니 먼저 지워요.

  4. 실제 GPU 연산으로 확인해요

    간단한 계산까지 돌려 보면 no kernel image 문제도 함께 확인돼요.

bash
python -m pip uninstall -y torch torchvision torchaudio
python -m pip install torch --index-url https://download.pytorch.org/whl/cu124
cu124는 예시예요. 오래된 인덱스에는 새 PyTorch가 없을 수 있으니 선택기에 나온 주소를 쓰세요. torchvision 등도 쓴다면 같은 명령에 넣어요.
bash
python -c "import torch; x = torch.ones(3, device='cuda'); print(torch.cuda.get_device_name(0), (x * 2).sum().item())"
GPU 이름과 6.0이 나오면 정상이에요.

Shelf의 환경 템플릿은 드라이버까지 설치해 줘요. 다만 그 위에 패키지를 더 설치하다 torch가 다른 빌드로 바뀔 수 있으니, 설치 후 진단 명령을 다시 실행해 보세요. 잘 동작하는 환경은 저장 이미지로 남겨 새 GPU 서버에서 복원할 수 있어요.

자주 묻는 질문

PyTorch로 GPU를 쓰려면 CUDA 툴킷(nvcc)을 설치해야 하나요?

아니요. pip로 설치한 PyTorch 휠에는 실행에 필요한 CUDA 런타임이 들어 있어서 NVIDIA 드라이버만 있으면 돼요. nvcc는 CUDA 확장을 직접 빌드할 때만 필요해요.

is_available()은 True인데 학습이 GPU에서 돌지 않는 것 같아요.

모델과 입력 텐서를 .to("cuda")로 옮겨야 GPU에서 계산돼요. next(model.parameters()).device로 모델이 어느 장치에 있는지 확인하고, 학습 중에 nvidia-smi에서 메모리 사용량이 늘어나는지 보세요.

GPU 서버가 필요할 때

필요한 GPU와 개발 환경을 골라 시간 단위로 시작해요.