Files
wiki/wsl-docker
2024-08-20 01:21:16 +09:00
..
2024-08-20 01:21:16 +09:00

본 문서에서는 Fresh Windows 10 (or 11)에 WSL2 > Debian > Docker > NVIDIA CUDA를 설치하는 법을 순서대로 설명한다.

WSL2 설치

Ref: https://learn.microsoft.com/ko-kr/windows/wsl/install

1. 새로운 Windows에 WSL을 설치하는 경우

Powershell (관리자로 실행)

wsl --install

2. WSL 리눅스 배포판 설치

Powershell (관리자로 실행)

wsl --install -d Debian
  • 다른 배포판을 설치할 수도 있지만 Debian이 제일 근본이다.

3. Windows Terminal 설치

https://apps.microsoft.com/detail/9n0dx20hk701?hl=en-US&gl=US

  • 현대적인 디자인으로 CMD, powershell, Debian Bash 각각 탭으로 켤수 있다.

Docker 설치

4. WSL에 docker 설치

  • docker daemon을 실행하려면 systemd가 켜져있어야 한다.
  • 정상적인 linux는 이미 systemd가 실행되어 있지만 wsl에서는 기본적으로 꺼져있다. Debian Bash
echo -e "\n[boot]\nsystemd=true\n" | sudo tee -a /etc/wsl.conf

Powershell (관리자로 실행)

wsl --shutdown # 종료
wsl # 재시작

Debian Bash

curl -fsSL https://get.docker.com | sudo sh
echo 'alias docker="sudo docker"' >> ~/.bashrc
source ~/.bashrc
docker run hello-world

성공 메시지:

Hello from Docker!
This message shows that your installation appears to be working correctly.

5. 암호를 입력하지 않고 docker 실행하는 법

Debian Bash

sudo visudo
  • 맨 아래줄에 아래와 같이 추가한다.
  • 띄어쓰기 개수는 중요하지 않고 ,는 중요하다.
  • myid 부분을 자신의 아이디로 바꾼다.
myid ALL=(ALL) NOPASSWD: /usr/bin/apt-get, /usr/bin/docker

입력후에 Ctrl + S 로 저장, Ctrl + X 로 종료하고 나오면 되고, 뭔가 잘못 입력하면 나갈수 없다.

6. WSL background 실행

WSL는 기본적으로 실행중인 터미널이 없으면 WSL 자체가 종료되도록 되어 있어서 서버를 굴릴수가 없다.

  • https://www.autohotkey.com/
  • AHK v1.1 (Deprecated) 설치
  • Win+R > shell:startup : 시작프로그램 폴더가 열린다.
  • 메모장으로 아래의 wsl.ahk 파일을 생성하여 시작프로그램 폴더에 저장
Run, wsl.exe, , Hide
  • 이제 더블클릭해서 실행해보아도 아무것도 보이지 않지만 눈에 보이지 않는 터미널 하나가 실행되어, wsl이 꺼지지 않게 된다.
  • 컴퓨터를 재시작 할 경우에도 항상 하나가 켜져 있을 것이다.

예외: 본인이 wsl --shutdown으로 강제 종료하면 눈에 안보이는 이것도 꺼지므로 그때는 저걸 다시 켜주어야 함)

Docker에 NVIDIA 설치

WSL에서 nvidia-driver까지는 자동으로 깔아주므로 별다른 설정 없이 nvidia-smi를 사용할 수 있지만 docker container 내부에서 CUDA를 사용하기 위해서는 nvidia-container-toolkit을 설치해야 한다.

7. nvidia-container-toolkit 설치

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installing-with-apt

위의 부분의 명령어를 따라가면 되는데 아래와 같이 WSL Debian 기준으로는 아래와 같이 실행하면 된다.

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

docker run --gpus all debian nvidia-smi # test

nvidia-smi가 잘 실행되면 성공이다.

[추가] WSL에 Python & Jupyter Lab 설치

sudo apt-get update && sudo apt-get install -y python3-venv
cd ~
python3 -m venv .venv # ~/.venv에 가상환경 python을 만든다.
echo 'export PATH="$HOME/.venv/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
which python
# /home/<your-id>/.venv/bin/python
which pip
# /home/<your-id>/.venv/bin/pip

이제 activate/deactivate 신경쓰지 않고 pip install로 설치하는 것들은 ~/.venv 안에 잘 설치된다.

pip install jupyter lab

jupyter lab --IdentityProvider.token="" # 암호 없이 localhost:8888 로그인 가능