당연한 이야기겠지만 M1 맥북에 torch 조합은 CUDA 가속이 안 된다.
그래도 어거지로 사용해보려고 했는데 kaggle 데이터셋을 가지고 학습해보니 말도 안되는 시간(...)이 소요되어
원활한 학습을 위해 최근에 새로 장만한 겜트북에 CUDA/cuDNN를 설치하고 그 과정을 정리해 보았다.
+ 어쩌다보니 우분투 서버에도 설치해야 해서 우분투 내용까지 추가함!
* 여담이지만 오랜만에 윈도우 OS를 다뤄보니 리눅스가 훨씬 쉬운 것 같다.;
아니 윈도우는 자동으로 패스 설정도 해주니까,, 그냥 내가 좀 이상한 것 같다;
1. 그래픽 카드(GPU) 확인
장치 관리자에서 모델명을 확인하는 방법도 있고, CPU-Z와 같은 서드파티 앱을 사용해도 된다.
나는 랩탑 구매 전 미리 GPU를 체크하고 구매했으므로 dxdiag로 구경만 해 봄.
GPU를 확인하는 이유는 compute capability를 확인하기 위함이다.
이 수치와 호환되는 버전의 CUDA를 설치해야 하니까..
* 하단 링크를 클릭해서 관련 내용을 확인할 수 있다.
우분투의 경우 아래와 같은 스크립트를 사용하거나 GUI(설정 - 디스플레이?)로 확인할 수 있다.
lshw -C display
Output:
*-display
description: VGA compatible controller
product: TU104GL [Quadro RTX 4000]
vendor: NVIDIA Corporation
physical id: 0
bus info: pci@0000:01:00.0
version: a1
width: 64 bits
clock: 33MHz
capabilities: vga_controller bus_master cap_list rom
configuration: driver=nvidia latency=0
resources: iomemory:600-5ff iomemory:600-5ff irq:147 memory:a0000000-a0ffffff memory:6000000000-600fffffff memory:6010000000-6011ffffff ioport:3000(size=128) memory:a1000000-a107ffff
*-display
description: Display controller
product: Intel Corporation
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
version: 05
width: 64 bits
clock: 33MHz
capabilities: bus_master cap_list
configuration: driver=i915 latency=0
resources: iomemory:600-5ff iomemory:400-3ff irq:146 memory:6013000000-6013ffffff memory:4000000000-400fffffff ioport:4000(size=64)
* GPU 이름이 제대로 보이지 않거나 하는 경우 그래픽 드라이버를 설치한 후 재부팅(2번 항목 참고)
2. Nvidia 그래픽 드라이버 & CUDA Toolkit 설치
최근에 바뀐건지 모르겠는데 Game Ready Driver와 같이 설치할 수 있는 Geforce Experience 앱으로 손쉽게 그래픽 드라이버를 설치할 수 있다.
아래 링크를 방문해서 다운로드 후 실행하면 알아서 설치해 줌.
CUDA Toolkit의 경우 현재 11.6 버전*까지 출시되었으나, 1번에서 언급한 compute capability 수치 이외에도 본인이 사용하고자 하는 딥 러닝 프레임워크와 호환되는지 확인하는게 좋고, pytorch stable 버전은 10.2 혹은 11.3 버전 CUDA만 지원**되는 상황. (*, **: 해당 포스트 작성일 기준)
아래 첨부된 툴킷 아카이브에서 원하는 버전으로 다운받으면 된다.
* 추가적으로 PATH(환경변수) 설정을 해 주어야 하는데, 윈도우는 저렇게 설치하고 나면 알아서 잡아준다,,
그래도 확인하고 싶다면 시스템 환경 변수 편집 > 환경 변수 탭에서 등록 여부를 체크하면 된다.
sudo ubuntu-drivers autoinstall # 권장되는 드라이버 설치
드라이버 목록 확인 및 수동 설치
ubuntu-drivers devices # 설치 권장되는 드라이버의 경우 리스트 옆에 recommended가 표시됨
# apt repository 추가
sudo add-apt-repository ppa:graphics-drivers/ppa && sudo apt-get update
# 드라이버 수동 설치
sudo apt-get install nvidia-driver-000 # 000: driver version number
수동으로 설치시 CUDA가 같이 딸려서 설치되는 경우도 있으며,
nvidia-smi
로 드라이버 설치 여부 및 버전을 확인할 수 있다.
설치 전 nouveau 비활성화 과정이 꼭 선행되어야 한다!!!
빼먹으면 로그인 창에서 계속 돌고도는 컴퓨터를 볼 수 있음(...)
위의 과정을 진행 후 CUDA Toolkit을 설치하면 되며, 방법은 윈도우와 비슷하다.
툴킷 설치가 완료되었다면 PATH 설정을 위해 .bashrc 혹은 bash_profile에 아래와 같은 내용 추가
export PATH="/usr/local/cuda-[00.0]/bin:$PATH" # CUDA, 00.0: version number
# Multi GPU 환경에서 특정 GPU에만 메모리를 할당하고 싶은 경우
export CUDA_DEVICE_ORDER="PCU_BUS_ID"
export CUDA_VISIBLE_DEVICES=0
3. cuDNN 설치
설치라고 했는데 그냥 압축파일 다운로드 - 압축해제 - 파일 복사(혹은 이동)만 하면 된다.
로그인을 하지 않으면 파일을 다운로드 받을 수 없다. ;;
아래 cuDNN 아카이브에서 CUDA 버전과 매칭되는 파일을 골라서 다운로드 하면 된다.
압축 파일을 다운로드 받으면 아래 좌측 사진과 같이 폴더 세 개와 텍스트 파일이 있는데,
텍스트 파일은 무시하고 폴더 안에 있는 내용물(혹은 폴더째)을
CUDA 툴킷 설치시 확인했던 CUDA_PATH의 같은 이름을 가진 폴더로 복사하거나 이동하면 된다.
### cudnn > tar -xvf로 압축 해제 후 cuda 디렉토리에 들어가서..
sudo cp include/cudnn* /usr/local/cuda-11.4/include
sudo cp lib64/libcudnn* /usr/local/cuda-11.4/lib64
sudo chmod a+r /usr/local/cuda-11.4/lib64/libcudnn*
### bash에 추가
export LD_LIBRARY_PATH="/usr/local/cuda-[00.0]/lib64:$LD_LIBRARY_PATH" # cuDNN, 00.0: version number
이후 다음과 같은 명령어를 사용하여
source ~/.bashrc # or bash_profile
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 # cuDNN version header (for cuDNN 8.X)
아래와 같은 결과물이 나오는지 확인하면 된다.
#define CUDNN_MAJOR 8
#define CUDNN_MINOR 3
#define CUDNN_PATCHLEVEL 2
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)
#endif /* CUDNN_VERSION_H */
3. 정상 작동여부 확인
CMD 창으로 CUDA 툴킷 설치 여부를 체크하거나,
주로 사용하는 프레임워크로 GPU가 정상적으로 감지되는지 확인하면 된다.
pytorch의 경우 아래와 같이 간단하게 확인할 수 있다.
import torch
device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
print(device)
정상적으로 감지되었을 경우 다음과 같은 아웃풋이 출력된다.
device(type='cuda', index=0)
+ 기타 트러블슈팅은 설치 과정 중 생길때마다 정리 및 추가 중
'공부기록 > ML&DL' 카테고리의 다른 글
[Pytorch] Distributed Data Parallel (0) | 2023.12.10 |
---|---|
[tool] TorchIO를 활용한 medical dataset processing (0) | 2023.04.17 |
[book] Deep learning (Adaptive Computation and Machine Learning series) (0) | 2022.02.11 |