1. GPU가 사용 가능한 상태인지 확인
import os
os.environ['CUDA_DEVICE_ORDER']="PCI_BUS_ID"
os.environ['CUDA_VISIBLE_DEVICES']='0'
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print('Device:', device)
# print('Current cuda device:', torch.cuda.current_device())
print('Count of using GPUs:', torch.cuda.device_count())
[Out]
-> 사용불가한 상태라면, 'CPU', Count of using GPUs : '0'으로 출력된다. 지금은 이상태를 가정하겠다.
2. 해당 서버 또는 컨테이너의 shell에서 CUDA버전을 확인
- CUDA버전과 torch관련 라이브러리의 버전이 모두 호환되어야 GPU사용이 'True'로 출력된다.
#서버접속
ssh -p 2023 root@10.80.179.4
#cuda버전 확인(상단에 'CUDA 10.1' 과 같은 형태로 노출)
watch -d -n 0.5 nvidia-smi
-> 정정 : 위 watch -d -n .5 nvidia-smi에서 출력되는 CUDA Version은 설치된 NVIDIA 드라이버에서 권장하는 CUDA버전을 의미한다. 설치된 CUDA버전과는 관계없다.
-> 정확한 현재 cuda버전을 확인하려면, 'nvcc --version'을 통해 현재 release된 cuda버전을 확인할 수 있다.
3. 해당 CUDA버전과 호환되는 torch버전 확인
- cuda버전을 확인해서 가장 최신버전의 torch, torchvision, torchaudio를 설치한다.
torch install link : https://pytorch.org/get-started/previous-versions/
예시)
# CUDA 10.1
pip install torch==1.8.1+cu101 torchvision==0.9.1+cu101 torchaudio==0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
4. 터미널 또는 Jupyter notebook 스크립트에서 위 설치 명령문을 실행해서 설치한다.
5. 잘 설치되었는지 확인한다
6. jupyter notebook을 restart한다 (중요)
- 위 내용이 반영되기 위해 재시작한다.
7. GPU사용가능한지 확인한다.
추가. gpu사용 코드를 돌릴때는 model과 계산하려는 tensor를 모두 gpu device로 할당해야한다.
- device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
- model.to(device) → 모델을 gpu(또는 cpu)로
- tensor데이터.to(device) → 계산할 tensor 데이터를 gpu(또는 cpu)로
추가. 만약, 위 방법으로 CUDA와 torch의 버전을 일치시켰음에도 torch.cuda.is_available()이 False로 출력되는 경우
이 경우, 실제 사용중인 CUDA의 버전이 'watch -n -d nvidia-smi'에서 확인되는 버전과 다를 수 있다.
이때, 실질적인 cuda 사용버전을 확인하는방법은
ls -al /usr/local 경로 내부에서 실제 사용중인 cuda의 버전을 확인한다.
확인해보면, 실제로는 cuda 11.4 버전이 사용되고 있을 확률이 높다.
uninstall 진행 후 다시 torch버전을 cuda 11.4에 맞춰서 설치할 경우, 정상적으로 gpu를 사용할 수 있는것을 확인할 수 있다.
추가. CUDA버전을 확인하는 여러가지 방법
- (중요) 'nvcc --version' :
현재 시스템에 설치되어있는 CUDA 컴파일러 버전을 의미한다.
다만, 단순히 이 정보는 단순히 시스템에 설치된 CUDA 컴파일러의 버전일 뿐, 현재 실행 중인 애플리케이션이나 라이브러리가 실제로 사용하고 있는 CUDA 버전을 반드시 나타내는 것은 아니다.
- 'import torch'
- 'print(torch.version.cuda)'
현재 실행중인 라이브러리(torch)가 호환되는 CUDA버전을 의미한다. 설치된 CUDA버전과는 무관하다.
'DEVELOP_NOTE > 그 외' 카테고리의 다른 글
[Cache]Soft Cache & Hard Cache (1) | 2023.11.27 |
---|---|
[GitLab]소스코드 관리, GitLab으로 완벽 해결하기 (0) | 2023.07.21 |
[Flower]Celery웹 모니터링 도구 'Flower'을 분해해보자. (0) | 2023.03.29 |
[WAS]Django를 활용한 웹 어플리케이션 구조 분해 (0) | 2023.03.26 |
[Git]Branch 조회 & 기본 Branch 변경 (0) | 2023.03.24 |