WSL2에서 GPU를 사용하기 위한 CUDA 설정을 해보자! 처음에는 헷갈리고 어려웠지만, 몇 번 시행착오를 겪으며 설치하다보니 익숙해지고 있다. WSL2를 세팅하는 동안 가장 중요하다고 느낀 점은 한국어가 편하다고 블로그를 뒤적거리는 것보다 NVIDIA 공식 홈페이지를 확인해보자는 것이다.
일반적으로 CUDA 설정은 NVIDIA Driver, CUDA Toolkit, cuDNN 설치를 이야기한다.
CUDA 설정을 진행하면서 가장 헷갈렸던 점이다. 블로그에서는 다들 NVIDIA Driver를 설치해야 된다고 하는데, 일반적으로 컴퓨터를 새로 사자마자 Windows NVIDIA Driver를 설치하기 때문이다. 그러면 Linux Driver를 새로 설치하라는 의미인가? 싶었지만, WSL2에서는 Linux Driver를 인식하지 못하고 계속 오류가 발생했다.
NVIDIA에서는 다음과 같이 안내하고 있다.
Once a Windows NVIDIA GPU driver is installed on the system, CUDA becomes available within WSL 2. The CUDA driver installed on Windows host will be stubbed inside the WSL 2 as libcuda.so, therefore users must not install any NVIDIA GPU Linux driver within WSL 2. One has to be very careful here as the default CUDA Toolkit comes packaged with a driver, and it is easy to overwrite the WSL 2 NVIDIA driver with the default installation.
한 마디로 Linux NVIDIA Driver를 별도로 설치하면 overwrite 문제가 발생하기에, Windows NVIDIA Driver를 사용 + 추가로 WSL2용 CUDA Toolkit 설치만 할 것을 권장한다는 이야기이다. 실제로도 Windows terminal, WSL2, Ubuntu에 nvidia-smi
명령어를 입력하면, Driver가 설치되어 있고 GPU를 잘 인식하고 있음을 확인할 수 있다.
먼저 오래된 GPG key를 삭제한다.
sudo apt-key del 7fa2af80
CUDA Toolkit 설치 옵션은 두 가지가 있다.
1. WSL-Ubuntu package를 이용한 설치 (권장)
2. Meta package를 이용한 설치
이 글에서는 권장 옵션에 대해 설명하고자 한다. 공식 링크를 따라가면 최신 버전 12.6 다운로드 방법을 안내해준다. 하지만, 무작정 최신 버전을 다운로드하기보단 개인의 GPU와 NVIDIA Driver에 따라 버전을 선택해야하므로 CUDA Toolkit Archive에 들어가자.
일반적으로 nvidia-smi
명령어를 입력한 뒤 우상단에 CUDA Version보다 같거나 낮은 버전을 사용한다. 해당 명령어 상의 CUDA 버전과 Cuda Toolkit의 버전이 같은 것을 가르키지 않기에 무조건 같을 필요는 없다 (참고).
wget https://developer.download.nvidia.com/compute/cuda/12.0.0/local_installers/cuda_12.0.0_525.60.13_linux.run
sudo sh cuda_12.0.0_525.60.13_linux.run
설치가 정상적으로 끝났는지 확인해보자
ls /usr/local/ | grep cuda
cuDNN 홈페이지에서 내 CUDA Version에 맞는 파일을 선택한다. 나는 CUDA Toolkit 12.0 버전을 설치했으므로, CUDA Version 12를 선택했다.
Ubuntu의 deb 파일이 아닌 Tarball의 tar.xz 파일로 다운로드 후 설치했다.
# 다운로드
wget https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/linux-x86_64/cudnn-linux-x86_64-9.4.0.58_cuda12-archive.tar.xz
# 압축해제
tar -xvf cudnn-linux-x86_64-9.4.0.58_cuda12-archive.tar.xz
# CUDA 폴더로 이동
cd cudnn-linux-x86_64-9.4.0.58_cuda12-archive
sudo cp include/cudnn*.h /usr/local/cuda-12.0/include
sudo cp lib/libcudnn* /usr/local/cuda-12.0/lib64
설치를 완료하기 위해서는 PATH 설정이 필요하다.
vi ~/.profile
PATH=/usr/local/cuda-12.0/bin:$PATH
LD_LIBRARY_PATH=/usr/local/cuda-12.0/extras/CUPTI/lib64:$LD_LIBRARY_PATH
LD_LIBRARY_PATH=/usr/local/cuda-12.0/lib64:$LD_LIBRARY_PATH
source ~/.profile
설치가 정상적으로 끝났는지 확인해보자
nvcc --version
WSL2의 자체적인 한계로 아직 profilers를 지원하지 않으며, nvidia-smi
와 같은 명령어를 사용해도 특정 프로세스가 얼마만큼의 vram을 사용하는지 확인할 수 없다. (e.g. GPU Memory Usage shows "N/A")
예전에 이 문제를 해결하려고 Linux용 Driver를 설치하는 등의 노력을 해봤지만... 애초에 해결할 수 있는 문제가 아닌 듯하니 받아들이자.
WSL2로 CUDA 환경 설정하기
Steps to manage multiple CUDA environments