한 줄 진단부터 해요
GPU를 쓰려는 바로 그 환경에서 실행하세요. PyTorch 버전, 빌드의 CUDA 버전, GPU 사용 가능 여부가 차례로 나와요.
python -c "import torch; print(torch.__version__, torch.version.cuda, torch.cuda.is_available())"| 출력 | 뜻 | 먼저 볼 곳 |
|---|---|---|
2.4.0+cpu None False | GPU용 코드가 없는 빌드예요 | CPU 전용 빌드 |
2.4.0+cu124 12.4 False | CUDA 빌드인데 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 표가 나오는지 보세요.
nvidia-smicommand 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는 찾지 못해요.
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에 설정돼 있어야 해요.
docker run --rm --gpus all ubuntu nvidia-smicould 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이 서로 다른 환경을 가리키는 거예요.
which python
python -m pip show torch
python -c "import sys; print(sys.executable)"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) 경고가 먼저 나오기도 해요.
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 빌드로 다시 설치하기
드라이버가 지원하는 CUDA 버전을 확인해요
nvidia-smi의CUDA Version보다 높은 CUDA로 빌드된 PyTorch는 고르지 마세요.공식 선택기에서 설치 명령을 받아요
PyTorch 설치 페이지에서 OS, pip, Python, Compute Platform을 고르면 명령이 나와요. 드라이버와 GPU 세대를 모두 지원하는 CUDA 버전을 고르세요.
기존 torch를 지우고 설치해요
같은 버전이 있으면 pip이
Requirement already satisfied로 넘어가니 먼저 지워요.실제 GPU 연산으로 확인해요
간단한 계산까지 돌려 보면 no kernel image 문제도 함께 확인돼요.
python -m pip uninstall -y torch torchvision torchaudio
python -m pip install torch --index-url https://download.pytorch.org/whl/cu124python -c "import torch; x = torch.ones(3, device='cuda'); print(torch.cuda.get_device_name(0), (x * 2).sum().item())"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에서 메모리 사용량이 늘어나는지 보세요.
