"리눅스 몰라도 GPU 개발 환경 만들 수 있나요?"
물론이죠! Windows에서도 GPU를 활용한 AI 개발 환경을 완벽히 구축할 수 있도록 이 가이드가 도와드립니다. 준비됐다면 바로 시작해 볼까요? 😎
Windows와 WSL2를 기반으로, PyTorch 같은 프레임워크를 GPU에서 바로 실행할 수 있는 개발 환경을 손쉽게 설정하는 방법을 제공합니다.
"복잡하지 않을까요?"
걱정 마세요! 아래 단계만 따라 하면 전문가가 아니어도 GPU 개발 환경을 손쉽게 구축할 수 있습니다.
모든 명령어는 간단하게 따라 할 수 있도록 준비되어 있습니다. 😌
💻 PowerShell을 사용할 차례!
PowerShell을 관리자 권한으로 실행하세요. 그리고 아래 명령어를 입력!
wsl --install -d Ubuntu-22.04
💡 Tip: 이 명령어 하나면 WSL2랑 우분투를 동시에 설치해줍니다. 편리하죠?
📖 자세히 보기: Microsoft WSL 공식 가이드
🐧 이번엔 WSL2 터미널에서 할 차례!
우분투를 처음 설치했으면 필요한 패키지도 챙겨야겠죠?
우분투 필수 패키지 설치 가이드를 참고하세요.
🐧 이번엔 WSL2 터미널에서 할 차례!
Docker 없이는 컨테이너를 사용할 수 없죠? 아래 명령어를 복사해서 터미널에 붙여넣으세요
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
sudo 없이 Docker 명령어를 쓰고 싶다면 사용자를 docker 그룹에 추가해야 해요.
docker 그룹이 있는지 확인
grep docker /etc/group
현재 사용자 추가
sudo usermod -aG docker $(whoami)
로그아웃 후 다시 로그인 또는 아래 명령 실행
newgrp docker
테스트
docker ps
👏 이제부터 Docker 명령어를 sudo 없이 쓸 수 있어요!
작성된 문서에서 NVIDIA GPU 지원 설정 부분에 NVIDIA Container Runtime 설정에 대한 내용을 아래처럼 추가하면 됩니다. 런타임 설정이 중요하므로 설치 이후 구성 단계를 별도로 설명하는 것이 좋습니다.
🐧 WSL2 터미널에서 GPU 설정을 시작합니다.
Docker 컨테이너에서 GPU를 사용할 수 있도록 NVIDIA Container Toolkit을 설치해야 합니다.
아래 명령어를 복사-붙여넣기만 하면 돼요!
GPG 키 추가
NVIDIA Container Toolkit의 패키지 신뢰성을 보장하기 위해 GPG 키를 추가합니다.
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
NVIDIA Container Toolkit 저장소 추가
NVIDIA 패키지 저장소를 추가합니다.
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
NVIDIA Container Toolkit 설치
이제 Toolkit을 설치하세요.
sudo apt update && \
sudo apt install -y nvidia-container-toolkit
설치 확인
성공적으로 설치되었는지 확인합니다.
nvidia-container-cli --version
👏 잘하셨습니다! 이제 GPU를 사용할 준비가 끝났습니다.
설치만으로 끝나지 않습니다! Docker가 NVIDIA GPU를 제대로 활용하려면 런타임 설정을 추가해야 합니다.
Docker 런타임 구성
Docker의 런타임 설정 파일을 수정해야 합니다:
sudo nano /etc/docker/daemon.json
아래 내용을 추가하거나 수정합니다:
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
Docker 서비스 재시작
런타임 설정을 저장한 뒤 Docker 서비스를 다시 시작합니다:
sudo systemctl restart docker
GPU 테스트
GPU가 정상적으로 동작하는지 확인합니다:
docker run --rm --gpus all nvidia/cuda:12.6.0-base nvidia-smi
성공적으로 GPU 정보가 출력되면 설정이 완료된 것입니다!
WSL2 환경에서 GPU를 활용할 때 CUDA Toolkit 설치는 선택 사항입니다. 대부분의 딥러닝 프레임워크(Pytorch, TensorFlow 등)는 Docker 컨테이너와 NVIDIA Container Toolkit을 통해 별도 CUDA Toolkit 설치 없이 GPU를 사용할 수 있습니다.
그러나, 아래와 같은 경우 CUDA Toolkit 설치가 필요할 수 있습니다.
nvcc)해서 실행하려는 경우.CUDA Toolkit을 설치하려면 아래 단계를 따르세요
CUDA 저장소 구성
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
CUDA 설치 파일 다운로드 및 설치
wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda-repo-wsl-ubuntu-12-6-local_12.6.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-6-local_12.6.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-6-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt -y install cuda-toolkit-12-6
설치 확인
nvcc --version
💡 하지만 기억하세요! 대부분의 경우 NVIDIA Container Toolkit과 Docker만으로 충분합니다.
🐧 이제 Docker 이미지를 만들어볼 차례입니다.
준비된 GitHub 레포지토리를 활용해 원하는 작업 디렉토리에서 컨테이너를 실행하세요!
먼저 GitHub 레포지토리에서 파일을 다운로드합니다.
아래 명령어를 실행하면, .git 디렉토리를 포함하지 않고 파일만 ZIP 형식으로 가져올 수 있습니다.
curl -L -o Dockerfile-Example.zip https://github.com/doh0106/Dockerfile-Example/archive/refs/heads/main.zip
압축을 해제하고 필요한 파일을 작업 디렉토리로 이동합니다:
unzip Dockerfile-Example.zip
mv Dockerfile-Example-main/* ~/my-project/
rm -rf Dockerfile-Example-main Dockerfile-Example.zip
cd ~/my-project
~/my-project/
├── Dockerfile
├── apt-packages.txt
├── build.sh
├── run.sh
└── volume/
이 파일들은 Docker 컨테이너 이미지 생성 및 실행을 위한 예제입니다.
Dockerfile과 build.sh, run.sh는 Docker 환경에서 GPU 지원을 활용할 수 있도록 설계되었습니다.
클론한 디렉토리 내부에 포함된 build.sh 스크립트를 실행하여 Docker 이미지를 빌드합니다.
bash build.sh
build.sh는 레포지토리에 포함된 Dockerfile을 기반으로 Docker 이미지를 생성합니다.
기본 설정
Dockerfile의 FROM 섹션에서 원하는 프레임워크의 기본 이미지를 수정할 수 있습니다.
예를 들어, PyTorch 외에도 TensorFlow나 다른 GPU 프레임워크를 사용하려면 각자 필요한 베이스 이미지를 참조해 변경하세요.
빌드가 완료되면 다음과 같은 이름과 태그를 가진 Docker 이미지가 생성됩니다.
my-pytorch-image1.0build.sh 파일을 열어 이름과 태그를 변경할 수도 있습니다.
레포지토리에 포함된 run.sh 스크립트를 사용하여 컨테이너를 실행합니다:
bash run.sh
run.sh는 다음과 같은 설정으로 컨테이너를 실행합니다:
--gpus allvolume/를 컨테이너 내부 /workspace로 마운트.run.sh는 레포지토리 내부의 volume/ 폴더를 컨테이너 내부 /workspace 경로로 마운트합니다.volume/ 폴더에서 작업이 가능합니다.컨테이너에 직접 접속하려면 다음 명령어를 실행하세요:
docker exec -it my-container bash
이제 컨테이너 내부 /workspace 경로에서 작업 파일을 확인하고 사용할 수 있습니다.
💡 그런데 잠깐!
이렇게 터미널에서 직접 접속할 수도 있지만, 우리는 VSCode를 활용해 컨테이너를 편리한 개발 환경으로 사용할 예정입니다.
바로 다음 섹션에서 VSCode와 Docker 컨테이너를 연결하는 방법을 알아봅시다! 🚀
volume 폴더의 역할volume/ 폴더의 목적: 샘플 데이터를 제공하기 위해 만들어진 기본 작업 디렉토리입니다.-v 옵션으로 volume/ 폴더가 컨테이너의 /workspace 경로에 마운트됩니다.volume/ 외부의 파일은 컨테이너에서 접근할 수 없습니다.💡 권장:
volume/폴더는 샘플 데이터 용도로 사용하세요.- 실제 프로젝트 작업 디렉토리가 있다면,
run.sh스크립트의-v옵션을 수정해 작업 디렉토리를 직접 마운트하세요.
#!/bin/bash
docker run -d --gpus all --ulimit memlock=-1 --ulimit stack=67108864 \
-v ~/my-project:/workspace/ \
--name my-container my-pytorch-image:1.0
위 명령어는 ~/my-project 디렉토리를 컨테이너 내부 /workspace 경로에 마운트하여 작업 파일을 컨테이너에서 직접 사용할 수 있도록 설정합니다.
🖥️ Windows에서 VSCode를 활용할 시간입니다.

Remote Exploer로 Dev Containers에 연결. 
📖 자세히 보기: VSCode Remote Development 가이드
컨테이너가 너무 많은 자원을 쓰거나 적게 쓰면 성능이 떨어질 수 있어요. 아래 옵션을 추가해서 자원을 효율적으로 할당하세요:
docker run -d --gpus all \
--cpus="2" \ # CPU 2개 할당
--memory="4g" \ # 메모리 4GB 할당
--ulimit memlock=-1 \ # 메모리 잠금
--ulimit stack=67108864 \
-v $(pwd)/volume:/workspace/ \
--name my-container my-pytorch-image:1.0
여기까지 따라오느라 고생 많으셨어요! 이제 여러분만의 GPU 개발 환경이 완성됐습니다. 궁금한 점이 있다면 각 단계의 원본 링크를 참고하세요. 🚀 Happy Coding! 😊😊