이 문서는 리눅스를 사용할 줄 아는 사람이 WSL2를 사용하기 위해 설정할 때 필요한 지식을 정리한 문서이다.
이 문서의 내용을 실행하면 WSL2 환경에서 한글 입력/출력, Gnome 환경의 사용, Windows에서 RDP를 통한 접근 등이 가능하다. 속도는 조금 차이가 나겠지만 일반적으로 Linux 환경에서 사용하던 대부분의 작업을 WSL2에서도 수행할 수 있다.
특히 이 문서의 내용대로 설치하면 nVidia GPU 가속 기능을 WSL2 내부의 Docker 컨테이너에서 사용할 수 있기 때문에 Gen AI를 테스트하는 환경으로 사용하기 편리하다.
작업 순서
1. WSL2 설치
2. Ubuntu 설치
3. Ubuntu Desktop 설치
4. xrdp 설치 및 설정
5. 한글 입출력 설정
6. nVidia GPU Driver
7. Docker 설치
8. nVidia Container Toolkit & CUDA 설치
9. GPU 가속 작동 확인
참고 자료
1. WSL2 설치
제어판 > 프로그램 > Windows 기능 켜기/끄기
목록에서 아래 항목을 차례대로 설치 후 Windows 리부팅 - 혹시 한 번에 설치할 때 오류가 발생하면 각각 하나씩 선택해서 설치와 리부팅을 반복한다.
- Hyper-V
- Linux용 Windows 하위 시스템
- Windows 하이퍼바이저 플랫폼
리부팅 후 혹시 모르니 WSL 자체를 업데이트 시도한다.
wsl --update
2. Ubuntu 설치
설치할 수 있는 배포판 목록을 확인한다.
wsl --list --online
이 가이드에서는 Ubuntu를 설치한다.
wsl --install -d Ubuntu
Ubuntu의 설치가 끝나면 User 계정 생성 후 Ubuntu를 업데이트한다. 배포판 릴리즈 후 수정된 애플리케이션이 많이 있을 수 있다.
sudo apt update && sudo apt full-upgrade -y
혹시 쓸 일이 생길 수 있으니 root 계정의 암호도 설정한다.
sudo passwd
마지막으로 WSL을 리부팅한다.
wsl --shutdown
참고 사항
WSL 내부의 Ubuntu에 자체 방화벽을 설치했고 어떤 이유에서 포트 오픈이 필요하다면 아래 명령으로 포트 오픈 작업을 할 수 있다.
sudo ufw allow 8080/tcp
3. Ubuntu Desktop 설치
일반적으로 Ubuntu에서 수행하는 작업들은 모두 터미널에서 수행할 수 있지만 혹시 GUI 환경에서 Ubuntu를 사용하길 원할 수 있다. 이런 경우 아래 명령으로 Ubuntu desktop 환경 전체를 설치할 수 있다.
sudo apt update && sudo apt install -y ubuntu-desktop gnome
이 작업은 PC와 네트워크 속도에 따라 상당히 긴 시간이 소요될 수 있다. 작업이 모두 끝나면 아래 명령으로 다시 한 번 WSL을 재시작한다.
wsl --shutdown
4. xrdp 설치 및 설정
Ubuntu desktop을 설치하면 조금 느리기는 해도 일반적인 Ubuntu를 사용하는 것과 같은 환경에서 WSL을 사용할 수 있다. 하지만 GUI 환경(X-window)을 보려면 윈도우의 원격 데스크탑으로 접속해서 사용해야 한다.
아래 방법으로 Ubuntu 환경을 Windows의 원격 데스크탑으로 접속하게 만들 수 있다.
우선 xrdp라는 서버 프로그램을 Ubuntu에 설치한다.
sudo apt update && sudo apt install xrdp
설치가 끝나면 설정 파일을 조금 수정할 필요가 있으므로 원본을 복사해 백업을 만든다.
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
원본을 백업 했으면 내용을 수정한다.
우선 접속 포트를 표준 원격 데스크탑 포트인 3389에서 3390으로 바꾼다. 혹시 Windows 쪽에 원격 접속이 필요한 경우가 있을 수 있기 때문에 겹치지 않게 하는 것이다.
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
아래 변경 사항은 화면 품질을 개선하기 위한 것으로 적용하지 않아도 상관 없다.
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
이 과정이 끝나면 설정 준비가 끝났으므로 WSL을 리부팅하고 Windows 쪽에서 원격 데스크탑을 이용해 localhost:3390으로 접속해본다. 접속 계정은 Ubuntu를 처음 설치 후 만들었던 User 계정 정보를 사용하면 된다.
5. 한글 입출력 설정
한국어로 시스템 메시지를 나오게 할 수 있는데 딱히 필요하지는 않다. 다만 Ubuntu desktop을 설치한 경우 한글 입력에 필요하므로 설치하는 것이 좋다. Ubuntu desktop을 설치하지 않은 경우라도 터미널에서 한국어로 출력되는 시스템 메시지를 볼 수 있게 된다.
한글 폰트를 설치한다.
sudo apt-get install fonts-nanum*
한국어 로케일을 생성한다.
sudo dpkg-reconfigure locales
위 명령을 실행하면 로케일 목록이 나오는데 이 목록에서 ko_KR.UTF-8을 선택하고 다음 화면에서 이를 기본 로케일로 선택해 완료하면 한국어 로케일이 생성된다.
재시작 후 locale 명령으로 한국어 로케일이 설정되었는지 확인한다.
아래 명령으로 한국어 입력기를 설치한다.
sudo apt update && sudo apt install fcitx fcitx-hangul fonts-noto-cjk dbus-x11
설치가 끝나면 im-config 명령으로 Input Method Configuration을 실행한다. 이 GUI 화면에서 조금 전 설치한 fcitx를 입력기로 선택하고 설정을 마친다.
여기까지 마친 후 자신의 홈 디렉토리에 있는 .bashrc에 아래 내용을 추가해 설정한 fcitx가 입력기로 사용되게 한다.
(첫 줄은 해당 .bashrc 파일의 첫 줄에 들어가야 하는 것으로 이미 있을 것이다. 파일의 마지막에 이 내용을 추가 한다면 아래 내용의 첫 줄은 넣지 않아도 된다.)
#!/bin/bash
export QT_IM_MODULE=fcitx
export GTK_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
#optional
fcitx-autostart &>/dev/null
위 수정 사항을 바로 반영되도록 아래 명령을 수행한다.
source ~/.bashrc
언어 추가 과정이 필요하다. 이 과정은 언어 지원 프로그램을 이용한다. 혹시 없다면 아래 명령으로 설치한다.
sudo apt update && sudo apt install language-selector-gnome
위 프로그램을 아래 명령으로 실행한다.
sudo gnome-language-selector
위 프로그램의 GUI에서 언어 설치 / 제거… 로 들어가 한국어를 선택하고 설치한다. 키보드 입력기: 부분은 Fcitx 4가 선택된 것을 확인한다. 선택되어 있지 않으면 선택한다.
WSL을 리부팅한다.
리부팅이 완료되면 fcitx-config-gtk3를 실행하여 한국어 키보드를 추가한다. 명령을 실행하면 나오는 화면 왼쪽 아래에 + 버튼을 누르면 추가할 입력기를 선택할 수 있는 화면이 나온다. 이 화면에서 Keyboard - 한국어를 선택해 추가한다. 이렇게 하면 Hangul이 첫 화면에 추가될 것이다.
한글 입력을 위한 설정이 모두 완료되었다.
6. nVidia GPU Driver
아래 명령을 이용해 설치 가능한 드라이버를 찾아본다.
apt search nvidia-driver
설치 가능한 드라이버들 중 최신 버전을 설치한다. 이 문서를 작성할 당시의 최신 버전은 570 버전이었다.
sudo apt update && sudo apt install -y nvidia-driver-570-server
설치가 완료되면 WSL을 리부팅하고 아래 명령으로 설치가 정상적으로 끝난 것을 확인한다.
nvidia-smi
정상적으로 설치가 완료되어 잘 작동하고 있다면 아래와 비슷한 내용이 출력된다.
Sun Apr 20 11:32:03 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.86.15 Driver Version: 576.02 CUDA Version: 12.9 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 ... On | 00000000:01:00.0 On | N/A |
| N/A 33C P8 1W / 115W | 215MiB / 8188MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
7. Docker 설치
설치를 시작하기 전에 이전에 설치한 내용을 삭제한다. 아래 명령들을 순서대로 실행하면 된다.
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Docker 공식 배포를 스크립트로 설치한다.
curl https://get.docker.com | sh
설치가 잘 끝났으면 아래 명령으로 Docker 서비스를 활성화 한다.
sudo systemctl --now enable docker
현재 User를 docker 그룹에 소속시켜 sudo를 붙이지 않고 사용할 수 있게 하려면 아래 명령들을 수행한다.
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
아래 명령으로 잘 작동하는지 확인한다. 이 때 sudo를 붙이지 않았음을 확인한다.
docker run hello-world
혹시 부트 때 docker가 샐행되도록 하려면 아래 명령들을 수행한다.
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
8. nVidia Container Toolkit & CUDA 설치
아래 명령으로 Repository의 GPG Key를 설치한다.
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
아래 내용을 가진 APT Sourcelist 파일(nvidia-container-toolkit.list)을 /etc/apt/source.list.d 디렉토리에 생성한다.
deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/deb/$(ARCH) /
#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/experimental/deb/$(ARCH) /
아래 명령으로 nvidia-container-toolkit을 설치한다.
sudo apt update && sudo apt install -y nvidia-container-toolkit
이제 Docker에서 nVidia Runtime을 사용할 수 있게 등록하고 기본 값으로 만든다. 기본 값으로 만들기를 원하지 않는다면 마지막 옵션인 --set-as-default를 빼면 된다.
sudo nvidia-ctk runtime configure --runtime=docker --set-as-default
이제 아래 명령으로 Docker를 재시작하면 사용 준비가 완료된다.
sudo systemctl restart docker
CUDA는 아래 순서로 설치하면 된다.
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-ubuntu2404.pin
sudo mv cuda-ubuntu2404.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.8.1/local_installers/cuda-repo-ubuntu2404-12-8-local_12.8.1-570.124.06-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2404-12-8-local_12.8.1-570.124.06-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2404-12-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt -y install cuda-toolkit-12-8
다음 2가지 방법 중 하나를 택해 CUDA 드라이버를 설치한다.
- Open kernel module
sudo apt-get install -y nvidia-open
- Proprietary kernel module
sudo apt-get install -y cuda-drivers
위 두 방법에 대한 참고 문서는 아래 사이트에서 찾을 수 있다.
9. GPU 가속 작동 확인
Docker의 컨테이너 내부에서 GPU를 잘 사용하고 있는지 확인하려면 아래와 같이 실행해본다. --runtime=nvidia 옵션을 주면 GPU를 사용하게 된다.
docker run --rm --runtime=nvidia nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 nvidia-smi
잘 사용하고 있다면 아래와 비슷한 출력을 볼 수 있다.
==========
== CUDA ==
==========
CUDA Version 11.8.0
Container image Copyright (c) 2016-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
This container image and its contents are governed by the NVIDIA Deep Learning Container License.
By pulling and using the container, you accept the terms and conditions of this license:
https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
A copy of this license is made available in this container at /NGC-DL-CONTAINER-LICENSE for your convenience.
Sun Apr 20 02:59:36 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 575.51.02 Driver Version: 576.02 CUDA Version: 12.9 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4060 ... On | 00000000:01:00.0 On | N/A |
| N/A 33C P8 1W / 115W | 216MiB / 8188MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
혹시 WSL에서 실행되는 GUI 자체 속도가 느린 것 같다면 외장 GPU를 사용하고 있는지 확인하고 변경할 수 있다.
현재 WSL이 사용하고 있는 GPU는 아래 명령으로 확인한다.
glxinfo | grep "OpenGL renderer"
혹시 Intel GPU를 사용하고 있다면 아래 내용을 실행하면 외장 GPU를 사용하게 할 수 있다.
export MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA
필요하다면 이 내용을 ~/.bashrc에 추가해도 된다.
참고 자료
- https://libertegrace.tistory.com/entry/wsl2-linux-ubuntu2204-docker-nvidia-gpu
- https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=24.04&target_type=deb_local
- https://github.com/microsoft/wslg/wiki/GPU-selection-in-WSLg
- https://itsfoss.com/install-mesa-ubuntu/
댓글 없음:
댓글 쓰기