Windows Insider Preview 버전 문제 (2020-10-16 빌드에서 해결됨)
Windows 10 Insider Preview 버전에 따라서, WSL2나 CUDA가 아예 동작하지 않는 경우가 많습니다. 여기에서 버전별 작동여부를 확인 후에 설치하시는것이 좋을것 같네요.
WSL2에서 Ubuntu와 CUDA 사용하기
이제 Windows 10 Build 2020에서는 Windows Subsystem for Linux 2와 GPU 가속 지원 기능을 함께 사용할 수 있습니다. 이 가이드에서는 Windows 10 디바이스에서 WSL2와 Ubuntu를 이용하여 CUDA 개발 환경을 구축할 수 있도록 합니다.
이 튜토리얼에서는 WSL에 Docker를 구동하여, 결과적으로 Jupyter Notebook 내에서 CUDA를 End-to-End로 실행할 수 있도록 합니다. 구체적으로는 아래와 같은 구성으로 진행됩니다.
Windows 10 Insider Preview 채널로 변경하기
이 과정에 앞서, 설치된 Windows 10을 2020년 6월 17일자로 릴리즈된 Windows 10 Insider 빌드로 업그레이드해야 합니다. 이를 위해서 Windows Insider에 가입하여, 사용중인 기기를 Dev Channel에 등록할 수 있습니다(주로 “Fast Ring” 또는 한국어로 “초기”라고도 쓰입니다). 이 후, Windows 10 빌드 20150 버전으로 업그레이드할 수 있습니다.
Windows 10 Insider Preview 빌드 시작 페이지 또는 Windows 10 21H1 빌드 배포 노트(홍차의 꿈님 블로그)를 참조하여 개발자 빌드에 참여하는 방법을 확인하세요.
WSL2 활성화하기 – Step #1
먼저, WSL Version 1을 먼저 활성화합니다. 이 과정 이후, 추후에 WSL2로 업그레이드를 합니다.
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
필요시 재부팅을 해야할 수 있습니다. 보통의 경우 바로 이어서 WSL2를 활성화할 수 있습니다.
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
이 뒤, Windows를 재시작합니다.
Restart-Computer
WSL2 활성화하기 – Step #2
이제 재부팅을 완료하면, 시스템이 WSL2를 구동할 수 있는 상태입니다. 다만, 아직은 호환성 등을 이유로 기본값은 WSL Version 1입니다. 아래 코드로 기본 버전을 변경할 수 있습니다(원할 시 Distro마다, 기존 Version 1으로 다시 설치할 수 있습니다)
wsl.exe --set-default-version 2
Ubuntu를 WSL에 설치하기
Microsoft Store으로부터 Ubuntu를 설치할 수 있습니다(링크).
WSL에 Ubuntu를 다른 방식으로 설치할 수 있습니다(링크, 영문).
(옵션) Windows Terminal 설치하기
Windows Terminal은 MS사에서 개발한 대체 터미널 어플리케이션입니다. 기존 MobaXterm이나 Cygwin, ConEmu 등의 솔루션을 대체할 수 있는 Lightweight한 오픈소스 터미널 도구입니다(링크 또는 GitHub). 화면 렌더링의 GPU 가속 및 커스터마이징 등, 다양한 기능들을 가지고 있으며 기존 Windows의 콘솔(cmd, powershell)을 이어 더 나은 사용성을 제공합니다.
WSL에서 Ubuntu 설치하기
Windows의 시작 메뉴에서 Ubuntu를 선택하고, 초기 실행이므로 WSL내의 Ubuntu 사용자를 설정합니다. 이 Ubuntu 사용자와 Windows 사용자는 독립입니다(서로 관계가 없으며 이름이 같아도 됩니다).
이전 단계에서 Windows Terminal을 다운로드받았다면, 사용자를 생성했던 이전 콘솔을 닫고, + 아이콘을 눌러 새로운 Ubuntu 콘솔을 열 수 있습니다:
이제, 설치가 완료되었으므로 Ubuntu가 WSL2에서 구동되는지 확인해봅니다:
uname -r
커널 버전을 확인했을 때, 4.19.121보다 높아야 합니다.
※ 그렇지 않다면, 아래 명령어를 cmd 또는 powershell 터미널에서 실행해보세요:
wsl.exe --update
위 명령어를 실행한 뒤에도 동일한 커널 버전으로 나타난다면(WSL이나 Windows를 재시작해야할 수도 있습니다), Windows Updates 설정에서 “고급 옵션 > Windows를 업데이트할 때 다른 Microsoft 제품에 대한 업데이트 받기”가 켜져 있는지 확인합니다:
이 뒤에, Windows Update를 다시 확인합니다.
Windows 10용 NVIDIA 드라이버 설치
이 다음, 시스템에 설치된 GeForce 또는 Quadro 그래픽카드에 따라 적절한 드라이버를 다운로드합니다. 몇 달 내로 Windows Update를 통해 드라이버가 배포될 예정이지만, 그 때까지는 직접 설치하는 과정이 필요합니다.
드라이버를 얼리-엑세스로 다운로드하기 위해서는 NVIDIA Developer Program에 가입되어 있어야 합니다. NVIDIA 개발자 블로그(영문)에서 CUDA on WSL에 관련한 기술적 내용을 찾아볼 수 있습니다.
WSL에 Docker 설치
기본적으로 Canonical에서 제공하는 Docker를 설치할 수 있습니다(Docker Hub에서 제공하는 최신 Docker Engine을 설치하기 위해서는 아래 명령어 대신 이 링크의 튜토리얼을 따라하시면 됩니다. 영어입니다.)
sudo apt -y install docker.io
sudo
없이 docker
명령어를 이용하기 위해서는, 추가로 아래 명령어를 입력할 수 있습니다(보안상 이슈가 있을 수 있으며, 선택입니다):
sudo adduser $USER docker
NVIDIA Container Toolkit 설치
변수 distribution
을 설정하고, NVIDIA 레포지토리 GPG 키를 가져온 뒤, NVIDIA 레포지토리를 Ubuntu의 apt 패키지 매니저에 추가합니다.
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
curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container-experimental.list | sudo tee /etc/apt/sources.list.d/libnvidia-container-experimental.list
Ubuntu의 기본 레포지토리를 한국 서버로 변경합니다. apt update
나 apt upgrade
등의 작업이 훨씬 빨라집니다.
sudo sed -i "s/archive.ubuntu.com/mirror.kakao.com/g" /etc/apt/sources.list
Ubuntu의 apt 레포지토리를 초기화한 뒤, NVIDIA 런타임을 설치합니다.
sudo apt update && sudo apt install -y nvidia-docker2
설치 완료 시, 모든 Ubuntu 터미널을 종료하고, Powershell 터미널을 열어 모든 Ubuntu WSL 인스턴스를 종료합니다:
wsl.exe --shutdown Ubuntu
GPU 컴퓨팅 테스트
새로운 Ubuntu 터미널을 열어, Docker 서비스를 시작합니다.
sudo service docker start
그리고 아래 명령어를 실행합니다:
sudo docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
모든 과정이 이상없이 진행되었다면, 아래와 같이 GPU의 성능 정보들이 정상적으로 표시됩니다:
Tensorflow 컨테이너 시작하기
새로운 Ubutnu 터미널을 열어, 아래 명령어를 실행합니다:
docker run -u $(id -u):$(id -g) -it --gpus all -p 8888:8888 tensorflow/tensorflow:latest-gpu-py3-jupyter
또다른 새로운 Ubuntu 터미널을 열어, wslview
를 입력 후, 그 뒤에 Jupyter Notebook URL을 입력합니다. 단, 여기서 127.0.0.1
을 localhost
로 바꿔 입력합니다!
wslview http://localhost:8888/?token=a83a1ad288a7bf1bd1deb694c8a7f19223c8d0baa7d5fb3c
기본 브라우저에 Jupyter Notebook이 실행되고, 이를 통해 GPU 가속이 가능한 Tensorflow 라이브러리를 사용할 수 있습니다! 이제 Tensorflow, CUDA를 WSL에서 사용할 수 있습니다.
Related blog posts
- Ubuntu: Ubuntu on WSL 2 Is Generally Available
- Ubuntu: New GPU and GUI features announced for WSL at Build
- Microsoft: GPU Compute, WSL Install and WSL Update arrive in the latest Insider build for the Windows Subsystem for Linux
- Nvidia: Announcing CUDA on Windows Subsystem for Linux 2
Additional resources
- Awesome TensorFlow
- Jupyter Docker Stacks
- PyTorch
- TensorFlow Tutorials
- NVIDIA Drivers for CUDA on WSL
- CUDA on WSL User Guide
번역 원본
https://ubuntu.com/blog/getting-started-with-cuda-on-ubuntu-on-wsl-2
도커 실행하기 전에 sudo apt update를 하고 싶은데
Type ‘<!DOCTYPE' is not known on line 1 in source list /etc/apt/sources.list.d/libnvidia-container-experimental.list
이러한 에러가 뜨는데 혹시 어떻게 해결해야하나요..?
좋은 자료 감사합니다!
잠시 NVIDIA 서버에 문제가 있거나, 네트워크에 문제가 있는것 같습니다. 보통 지원하지 않는 배포판이면
# Unsupported distribution!
# Check https://nvidia.github.io/libnvidia-container
이러한 결과가 저장되고, 지원하는 배포판의 경우
deb https://nvidia.github.io/libnvidia-container/experimental/ubuntu18.04/$(ARCH) /
이렇게 저장됩니다 (이 결과는 Ubuntu 버전별로 다를 수 있습니다.) 네트워크 상태를 확인해보시는 것이 좋을것 같습니다.
위에 코드 다 따라오고 docker run 했더니
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #0:: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: initialization error: nvml error: driver not loaded: unknown.
ERRO[0009] error waiting for container: context canceled
이런식으로 에러가 나오는데 어떻게 하나요?
일부 커뮤니티를 확인해보니 WSL2를 다시 설치하고 해결되었다는 내용이 있습니다.
https://teratail.com/questions/274036
WSL2 Ubuntu와 WSL2 자체를 재설치해 보시고, 해보시는 것도 좋을 것 같습니다
https://pureinfotech.com/uninstall-wsl2-windows-10/