안녕하세요
pytorch를 로컬 주피터 노트북에 처음 사용하기 위한 CUDA 설정을 12시간 동안 실패하다가 마침내 드디어 CUDA 설정을 완료한 진정한 pytorch 어린이입니다. (별 것 아닌걸로 기쁘면서 성취감)
기껏 설정 완료하고 나니 pytorch 어린이가 아니라 그냥 스스로 컴맹에 머리가 나쁘다는 것을
증명한 것 같습니다.
이미 구글에 수많은 블로그와 티스토리가 있음에도 실패한 과정과 얼마나 무자비하게 초심자가 실수해갔는지를 알 수 있으며, 최종적으로 어떻게 해결하였는가에 대해서 끄적여보도록 하겠습니다.
아 참, 전 win11, 주피터 노트북에서 진행하였습니다.
바쁘신분들은 [5.결말] 만 읽으시면 되겠습니다.
[0. 서막]
23년 3월 18일 기준 파이토치 튜토리얼을 시작하기 위해
주피터 노트북을 키고, python파일을 하나 만들었습니다.
import torch
-> 오 이런, ModuleNotFoundError : no module named 'torch'
이정도는 알지 torch 라는걸 설치하면 되겠구나
셀에서
!pip install torch
자 실행완료
print(torch.version)
2.0.0
자 파이토치라는 것이 설치 되었네요
기쁩니다. 저도 이제 파이토치 유저입니다
[1. 튜토리얼 시작]
이런, ModuleNotFoundError : no module named 'torchvision'
오 torchvision도 없습니다.
!pip install torchvision
깔아주었습니다.
Dataloader 에서 신나게 트레이닝, 테스트셋 가져왔습니다
성공적입니다. 데이터셋이나 불러올줄 알다니 너무 기쁩니다
모델을 만드려고해봅니다.
자 그전에
device = "cuda" if torch.cuda.is_available() else "cpu"
print(f"Using {device} device")
을 실행해봅니다.
"cpu"
왠지 느낌상 cuda가 떠야할것 같은데 cpu가 뜹니다. 문제가 있습니다.
혹시 몰라 텐서플로우로도 확인 해봅니다
import tensorflow
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
-> CPU만 확인되고 GPU가 잡혀있지 않습니다.
멘붕입니다.
[2. 전개]
저는 얼른 구글을 킵니다.
torch.cuda.is_available() => False 라는 조건문을 발견한 제 자신이 대견합니다. torch.cuda.is_available() False 키워드로 검색합니다.
이미 수많은 블로그와 티스토리에서 선배님들이 관련 문제에 대해서 해결책을 정리해 놓으셨습니다.
pytorch, torchvision, torchaudio, CUDA, cuDNN, Nvidia driver의 버전을 모두 맞춰야한다고 합니다.
뭔말인진 모르겠지만 똑똑하신 모든 분들이 다 최신버전에 맞게 자동으로 잘 되게 해놨을거라 믿습니다
그냥 일단 해봅니다.
구글 한두페이지 분량 읽어보니 나의 그래픽카드에 맞춰서 cuda를 설치해야한다고 합니다.
읽은 정보를 토대로 실행해봅니다.
nvdia-smi 를 해봅니다. 안나옵니다
nvcc --version 을 해봅니다. nvcc가 올바른 배치가 아니랍니다.
종합적 멘붕입니다. 내 노트북에는 엔비디아 드라이버도 제대로 안깔려있는것 같습니다.
훗 하지만 전 컴퓨터 드라이버 정도는 깔줄 아는 인재입니다.
구글 검색으로 제 그래픽카드에 맞춰서 최신 드라이버를 깔아준다음 재부팅합니다.
다시 nvidia-smi 합니다.
뭔가 멋있게 나옵니다.
무려 저의 CUDA version은 12.1이라고 되어있습니다.
아뿔싸. 블로그 글들에는 12.1 버전 해결한 것은 없는것 같은데..
전 그정도 똥멍청이는 아닙니다. 이정도는 변수 x에 숫자 대입해서 푸는 정도의 일입니다.
라고 생각했는데
을 참조해서 내 그래픽카드에 맞는 어떤 cuda 숫자를 깔아야하는지
한참 지나고서야 표 읽는 법도 이해하였습니다.
- Compute Capability, GPU semiconductors and Nvidia GPU board products 표에서 자기 글카를 찾습니다
- 해당 글카의 Compute capability를 확인합니다 저의 경우에는 7.5군요. 7.5는 뭔지는 모르겠지만 이름이 Turing이랍니다.
- Compute Capability (CUDA SDK support vs. Microarchitecture) 표에서 7.5(turing)이라고 색칠되어있는 CUDA 버전은 다 깔아도 상관없는 것 같습니다. (틀렸다면 알려주세요)
일단 구글에 cuda 12.1 download 검색을 합니다.
제 컴퓨터에 맞춰서 잘 다운을 합니다.
다운로드 속도는 왜이렇게 느린겁니까.
와이파이 공유기 속도 올리는법도 엄청나게 검색해보고 별걸 다합니다.
설치파일입니다. 설치는 너무 쉽습니다.
자 그다음은 이것에 맞게 cuDNN을 깔아야한답니다.
엔비디아 홈페이지에서 가서 12.x에 맞는 cuDNN을 다운받아줍니다.
폴더 3개가 나오네요 bin include lib, 이것을 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1 안에 복사 해서 넣어줘야합니다
복사 합니다.
까먹지 않고 3개 폴더의 환경변수 설정까지 해줬습니다.
휴 선배님들의 글의 조언을 받아 이제 모든 작업을 완료해준것 같습니다.
다시 주피터를 킵니다.
torch.cuda.is_available()
False
..................... 뭐가 문제인것입니까
[3. 위기]
여전히 cpu도 안잡힙니다. 아직도 뭐가 문제인지 모릅니다.
안될때는 될때까지 하라 정신입니다.
아예 c드라이브의 nvidia 폴더를 다 지웁니다.
이런것들을 지우고 나서는 또 깔끔하게 재부팅도 해줍니다
다시 nvidia 드라이버 부터 깔아줍니다.
했던 짓을 반복합니다. => 여전히 안됩니다
뭐가 문제인지 생각합니다.
뭘해도 안됩니다. 아니 왜 gpu인식이 안되는지 도저히 모르겠습니다.
뭔가 이상합니다. pytorch 튜토리얼의 '설치 방법'을 눌러봅니다
다른거는 잘 모르겠고 cuda 11.6 11.7 만 있습니다.
아 12.1 되어있다고 12.1을 깔면 안되는구나 안정된 버전을 깔아야하는거 아닐까 하면서
CUDA 11.x 버전에 맞춰서 구글검색으로 CUDA TOOLKIT, CUDNN 다운받고 지우고 반복합니다.
잘 안되서, CUDA 10.x 버전에 맞춰서 다 깔고 CUDA TOOLKIT, CUDNN 지우고 반복합니다.
선배님들 블로그 따라서 구글검색으로 다 맞춰서 다운받고 했는데도 왜안되는거야...
아직도 뭐가 문제인지 모르는 안타까운 중생입니다.
계속 고민하다가 드디어 생각해냅니다. 아 설마 pytorch 2.0 버전이라 그런건가
pip uninstall torch로 지운다음
torch 예전 버전을 깔아줍니다. torchvision 이 안된답니다. 아 안되는 버전도 있는거였나
torch랑 torchvision이랑 맞는 버전을 겨우겨우 찾아서
!pip install torch==x.x.x torchvision==x.x.x 해줍니다
솔직히 이쯤 되었을때 너무 혼란스럽고 이것저것 해보다가 정확히 어떤것 때문에 그랬는지,
어디서 무슨 연관인지는 모르겠는데 pytorch를 다운그레이드 시켜주고
import tensorflow
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
체크해주니까 갑자기 gpu가 잡힙니다.
??? 뭐지??? 이해할 수 없습니다. 그럼 혹시...?
[4.절정]
torch.cuda.is_available()
False
...
print(torch.version)
x.x.x + cpu
??????????????? 갑자기 버전뒤에 왜 cpu가 붙어나오는지 모릅니다.
돌아버릴것 같습니다. 여기까지 읽으신 분들도 얘가 도대체 뭘하고 있던건지
감도 안잡히실 것 같습니다. 너무나 뒤죽박죽 입니다.
잘 생각해보니 아까 pytorch 튜토리얼의 '설치 방법'에서 어떤 코드를 입력하면 된다고 한것 같습니다.
아나콘다 프롬포트로 들어갔습니다.
torch 와 등등 uninstall 먼저 해줍니다
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
쳐줍니다.
뭔가 설치되는것 같습니다.
주피터로 돌아갑니다
import torch
-> 오 이런, ModuleNotFoundError : no module named 'torch'
??????????? 자 이렇게 어지러운 유니버스를 체험하고 제일 처음으로 다시 돌아왔습니다
난 설치를 했는데 왜 모듈이 없는지 모르겠습니다.
가상환경이 없이 base 밖에 없으면 conda나 pip나 같은 작용을 하는 거라고 생각했는데
그것도 아닌걸 알았습니다.
(pip는 구글스토어면 conda는 삼성스토어라고 합니다 뭔말인지 잘 안와닿지만 일단 아는척합니다)
그럼 conda 를 pip으로만 바꾸면 되지 않느냐 생각해봅니다.
pip install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
안됩니다. pytorch가 없답니다. 아 pip 는 torch로 해야되지
pip install torch torchvision torchaudio torch-cuda=11.7 -c torch -c nvidia
안됩니다. 될리가 없습니다.
멘붕입니다. 지금 제가 뭐하고 있는지 모르겠습니다.
뭘 잘못하고 있는지 몰라서 '전개~절정'을 수도없이 반복합니다
억겁 시간s... later...
[5. 결말]
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia 명령어를
pip 명령어로 할수 있는걸 찾으면 되지 않나 생각해봅니다.
엄청 검색해봅니다 뭐라고 검색해야되는지도 모르는데 닥치는 대로 해봅니다. 잘 안나옵니다.
그러다가 우리 커뮤니티의 '이전 버전의 pytorch'를 너무 뒤늦게 보게됩니다.
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116
이걸 보면서 깨닫습니다. 현재 torch 2.0 으로 어울리는 거 찾아서 설치하는거는 잘 모르겠고,
torch gpu를 쓸수있는 버전을 따로 특정해야만 했구나, 토치비전, 토치오디오도 어울리는 걸로 설치해줘야했구나. 기존 토치를 다 지우고 위 명령어로 설치하니까 gpu버전이라 그런지 약간 시간 걸립니다.
확인해봅니다.
torch.cuda.is_available()
True
!!!!
드디어.. 성공했습니다.
추가) pip install torch... 를 하더라도 nvcc _V 가 출력되지 않으면, nvdia-smi 를 한다음
버전에 맞춰서 NVIDIA cuda 11.x or 12.x 를 깔아주세요.
전 여기까지만 하니까 새로운 윈10 컴퓨터에서 pytorch 는 해결됐는데,
tensorflow에서 gpu를 못잡더라고요 그래서.... 는 여기는 파이토치 커뮤니티!
지만.. 정보 공유를 위해 텐서플로는 윈도우에서 GPU 지원을 2.10 까지 밖에 안한다는 정보를
어떤 블로그에서 입수하였습니다.. 2.1 버전을 까니까 되네요
하지만 아직도 잘 모르겠습니다
nvcc -V 하면 Cuda compilation tools, release 11.7, V11.7.64 으로 나오는데 torch 는 11.6버전 설치한 것 같은데 이 둘은 호환이 되는 거라서 상관이 없는건지, gpu는 도대체 언제 갑자기 잡히게 된건지 torch 2.0버전이라서 최신으로 나와있는 cuda 12.x버전이라 안맞아서 그랬던건지... 현재시간이 일요일 오전 5시라서 머리가 안돌아가는건지.. (+ 그래도 가독성있게 하려고 엔터를 많이 이용했는데 엔터가 여러번 안먹혀서 가독성 정말 떨어지네요 ㅠ)