WSL2 도커를 이용한 PyTorch GPU 설치 (2)

❗ 중요

윈도우 OS에서 해야하는 사전 조건 (중요) :

  1. Windows 10 21H2 버전이상
  2. BIOS의 인텔 가상화 기술 (Intel Virtualization Technology) 활성화
  3. CUDA를 사용할 수 있는 디바이스
  4. 그래픽 드라이버 설치 및 path 설정 (저의 경우 10.2와 11.3, 11.4가 경로에 있습니다.)

image

Windows 21H2 버전이상이 아닐 경우, 다음과 같은 에러가 나온다. 업데이트 해주자.

Failed to initialize NVML: GPU access blocked by the operating system
Failed to properly shut down NVML: GPU access blocked by the operating system

1. NVIDIA-SMI 설치 & 확인

1.1 다음 명령어들을 이용하여 Ubuntu에 cuda를 사용할수 있게 한다. (좀 오래 걸린다)

(저는 11.4로 설치, 최근(2022-09)은 공식홈피에서 11.7을 권장합니다.)

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda-repo-wsl-ubuntu-11-4-local_11.4.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-4-local_11.4.0-1_amd64.deb
sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-4-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

설치가 끝나면 확인을 위해 다음 명령어를 입력한다.

nvidia-smi -q

image

2. nvidia-container-toolkit 설치

후술하겠지만 컨테이너를 –gpus 옵션을 두어 생성하는 경우에 에러가 나는 경우가 있다. 이를 방지하기 위해 nvidia-container-toolkit를 설치한다. 명령어는 아래와 같이 순서대로 입력한다.

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit

이후 아래의 명령어를 입력하여 도커 서비스를 재시작한다. (WSL2에선 sudo systemctl restart docker와 동일하지만 systemlctl의 PID 권한이 없다고 할때가 있으므로 아래를 이용한다.)

sudo /etc/init.d/docker restart

3. pytorch 설치 방법

pytorch는 도커허브(dockerhub)에 각 버전별로 있다. 도커허브의 pytorch는 크게 base, devel과 runtime이 있다.

이름 설명
base CUDA runtime을 사용할 수 있는 기본
devel runtime 이미지에서 build하였고, 컴파일러 도구 모음, 디버깅 도구, 헤더 및 정적 라이브러리를 포함 이 이미지로 소스에서 CUDA 애플리케이션을 컴파일 가능
runtime base에서 build한것으로 CUDA math 라이브러리와 NCLL, CUDNN을 포함

여기서는 devel을 사용한다. 아래의 링크로 접속한다.

https://hub.docker.com/r/pytorch/pytorch/tags

필터 태그에 11.3을 검색하고, devel 버전으로 image pull할 주소를 복사한다.

image

3.1 pytorch 이미지을 통한 run

아래의 명령어를 입력한다. (해석 : interactive 가능한 (=bash) "swoo" 이름 컨테이너를 torch 1.12.1의 CUDA 11.3 버전으로 gpu 버전으로 다운로드 하고 바로 사용하고 싶어요)

docker run -it --gpus all --name 'swoo' pytorch/pytorch:1.12.1-cuda11.3-cudnn8-devel

명령어를 입력하면 이미지가 없으니 설치 할것이다.

image

토치도 잘 작동하는 것을 확인하였다.

import torch
torch.cuda.is_available()

image

반대로 tensorflow는 다음 명령어를 입력하면 사용할 수 있다.

docker run -it --gpus all --name 'swoo_tf' tensorflow/tensorflow:2.10.0-gpu

image

from tensorflow.python.client import device_lib
device_lib.list_local_devices()

image

다음에는 도커파일(Dockerfile)을 작성하여 torch 및 flask 라이브러리를 동시에 설치하여 웹 서버에 필요하도록 한다.

Leave a comment