윈도우에서 VSCode와 Docker 컨테이너를 활용하여 GPU 개발 환경 설정 가이드 🚀

김도현·2024년 11월 27일

이런 사람이 읽으면 좋아요!

"리눅스 몰라도 GPU 개발 환경 만들 수 있나요?"
물론이죠! Windows에서도 GPU를 활용한 AI 개발 환경을 완벽히 구축할 수 있도록 이 가이드가 도와드립니다. 준비됐다면 바로 시작해 볼까요? 😎

✅ 이 가이드가 필요한 이유

  1. 리눅스 초보자
    명령어만 복사해서 실행하면 끝! 복잡한 설정은 걱정하지 않아도 됩니다.
  2. 개발 속도 중시
    빠르게 설정을 마치고 바로 프로젝트를 시작하고 싶다면 제격입니다.
  3. 깔끔한 로컬 환경
    모든 작업은 컨테이너 안에서 이루어지므로, 내 PC는 항상 깨끗한 상태를 유지합니다.
  4. 환경 설정 부담 최소화
    딥러닝 개발에서는 CUDA, cuDNN, PyTorch 버전 등의 설정 충돌이 흔한 문제입니다.
    이 가이드는 사전 구성된 Docker 이미지를 통해 이러한 문제를 해결합니다.
  5. GitHub 이미지 활용 가능
    요즘은 GitHub에서 프레임워크별로 최적화된 이미지(Dockerfile)를 제공하는 경우가 많습니다.
    이 가이드를 통해 기본 이미지를 활용하거나 직접 확장할 수 있습니다.

💡 가이드의 목표: GPU를 활용한 AI 개발 환경 구축

Windows와 WSL2를 기반으로, PyTorch 같은 프레임워크를 GPU에서 바로 실행할 수 있는 개발 환경을 손쉽게 설정하는 방법을 제공합니다.


이 방법이 좋은 이유

장점

  1. 리눅스 OS 설치 없이 GPU 개발 환경을 구현할 수 있습니다.
  2. Docker 컨테이너를 사용해 로컬 환경을 깨끗하고 일관되게 유지합니다.
  3. 딥러닝, 데이터 과학 프로젝트에서 GPU를 바로 활용할 수 있습니다.
  4. 사전 구성된 Docker 이미지 활용으로 번거로운 설정 문제 해결.
    • GitHub 또는 NVIDIA에서 제공하는 최신 Docker 이미지를 기반으로 확장 가능.
  5. VSCode와 Docker를 활용해 생산성을 극대화합니다.

주의할 점

  1. 환경 준비 단계가 필요합니다
    WSL2, Docker, NVIDIA 드라이버 등 GPU 환경을 지원하기 위한 초기 설정이 필요합니다.
  2. 시스템 사양에 따라 성능 차이가 날 수 있습니다
    Docker와 WSL2의 성능은 시스템 자원에 따라 다르므로, 여유로운 자원이 있다면 더 부드럽게 실행됩니다.
  3. 최신 업데이트 필수
    Windows, Docker, 그리고 GPU 드라이버가 최신 버전인지 확인하세요. 이는 호환성 문제를 방지합니다.

💡 초보자도 문제없어요!

"복잡하지 않을까요?"
걱정 마세요! 아래 단계만 따라 하면 전문가가 아니어도 GPU 개발 환경을 손쉽게 구축할 수 있습니다.
모든 명령어는 간단하게 따라 할 수 있도록 준비되어 있습니다. 😌


목차 📚

  1. WSL2 설치 및 설정
  2. Docker 설치 및 설정
  3. NVIDIA GPU 지원 설정
  4. Docker 컨테이너 이미지 생성 및 실행
  5. Visual Studio Code 설정
  6. Docker 실행 시 자원 할당

1. WSL2 설치 및 설정 🛠️

💻 PowerShell을 사용할 차례!

1.1 WSL2 설치

PowerShell을 관리자 권한으로 실행하세요. 그리고 아래 명령어를 입력!

wsl --install -d Ubuntu-22.04

💡 Tip: 이 명령어 하나면 WSL2랑 우분투를 동시에 설치해줍니다. 편리하죠?

📖 자세히 보기: Microsoft WSL 공식 가이드


1.2 리눅스 필수 패키지 설치

🐧 이번엔 WSL2 터미널에서 할 차례!

우분투를 처음 설치했으면 필요한 패키지도 챙겨야겠죠?
우분투 필수 패키지 설치 가이드를 참고하세요.


2. Docker 설치 및 설정 🐳

🐧 이번엔 WSL2 터미널에서 할 차례!

2.1 Docker 설치

Docker 없이는 컨테이너를 사용할 수 없죠? 아래 명령어를 복사해서 터미널에 붙여넣으세요

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

📖 자세히 보기: Docker 공식 설치 가이드


2.2 Docker 권한 설정

sudo 없이 Docker 명령어를 쓰고 싶다면 사용자를 docker 그룹에 추가해야 해요.

  1. docker 그룹이 있는지 확인

    grep docker /etc/group
  2. 현재 사용자 추가

    sudo usermod -aG docker $(whoami)
  3. 로그아웃 후 다시 로그인 또는 아래 명령 실행

    newgrp docker
  4. 테스트

    docker ps

👏 이제부터 Docker 명령어를 sudo 없이 쓸 수 있어요!


작성된 문서에서 NVIDIA GPU 지원 설정 부분에 NVIDIA Container Runtime 설정에 대한 내용을 아래처럼 추가하면 됩니다. 런타임 설정이 중요하므로 설치 이후 구성 단계를 별도로 설명하는 것이 좋습니다.


3. NVIDIA GPU 지원 설정 💪

🐧 WSL2 터미널에서 GPU 설정을 시작합니다.

3.1 NVIDIA Container Toolkit 설치

Docker 컨테이너에서 GPU를 사용할 수 있도록 NVIDIA Container Toolkit을 설치해야 합니다.
아래 명령어를 복사-붙여넣기만 하면 돼요!

  1. 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
  2. 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
  3. NVIDIA Container Toolkit 설치
    이제 Toolkit을 설치하세요.

    sudo apt update && \
        sudo apt install -y nvidia-container-toolkit
  4. 설치 확인
    성공적으로 설치되었는지 확인합니다.

    nvidia-container-cli --version

👏 잘하셨습니다! 이제 GPU를 사용할 준비가 끝났습니다.


3.2 NVIDIA Container Runtime 설정

설치만으로 끝나지 않습니다! Docker가 NVIDIA GPU를 제대로 활용하려면 런타임 설정을 추가해야 합니다.

  1. Docker 런타임 구성
    Docker의 런타임 설정 파일을 수정해야 합니다:

    sudo nano /etc/docker/daemon.json

    아래 내용을 추가하거나 수정합니다:

    {
        "default-runtime": "nvidia",
        "runtimes": {
            "nvidia": {
                "path": "nvidia-container-runtime",
                "runtimeArgs": []
            }
        }
    }
  2. Docker 서비스 재시작
    런타임 설정을 저장한 뒤 Docker 서비스를 다시 시작합니다:

    sudo systemctl restart docker
  3. GPU 테스트
    GPU가 정상적으로 동작하는지 확인합니다:

    docker run --rm --gpus all nvidia/cuda:12.6.0-base nvidia-smi

    성공적으로 GPU 정보가 출력되면 설정이 완료된 것입니다!


✨ 참고 자료


3.3 CUDA Toolkit 설치 (선택 사항)

WSL2 환경에서 GPU를 활용할 때 CUDA Toolkit 설치는 선택 사항입니다. 대부분의 딥러닝 프레임워크(Pytorch, TensorFlow 등)는 Docker 컨테이너와 NVIDIA Container Toolkit을 통해 별도 CUDA Toolkit 설치 없이 GPU를 사용할 수 있습니다.

그러나, 아래와 같은 경우 CUDA Toolkit 설치가 필요할 수 있습니다.

  • CUDA 프로그래밍: CUDA C++로 직접 GPU 코드를 작성하거나, 커널을 컴파일(nvcc)해서 실행하려는 경우.
  • 로컬 개발 환경 구축: 컨테이너를 사용하지 않고 WSL2 내부에 CUDA 라이브러리를 직접 설치해 활용하려는 경우.

CUDA Toolkit 설치 방법

CUDA Toolkit을 설치하려면 아래 단계를 따르세요

  1. 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
  2. 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
  3. 설치 확인

    nvcc --version

주의

💡 하지만 기억하세요! 대부분의 경우 NVIDIA Container Toolkit과 Docker만으로 충분합니다.

  • 이 과정은 로컬 CUDA 개발 환경이 필요한 경우에만 필요합니다.
  • 대부분의 사용자(딥러닝 및 데이터 과학 작업)는 NVIDIA Container Toolkit과 Docker 이미지만으로 GPU 가속 환경을 사용할 수 있으므로, CUDA Toolkit 설치는 생략 가능입니다.

📖 자세히 보기: NVIDIA CUDA WSL 가이드


4. Docker 컨테이너 이미지 생성 및 실행 🛠️

🐧 이제 Docker 이미지를 만들어볼 차례입니다.
준비된 GitHub 레포지토리를 활용해 원하는 작업 디렉토리에서 컨테이너를 실행하세요!

4.1 레포지토리 다운로드 및 파일 이동

먼저 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 컨테이너 이미지 생성 및 실행을 위한 예제입니다.
Dockerfilebuild.sh, run.sh는 Docker 환경에서 GPU 지원을 활용할 수 있도록 설계되었습니다.


4.2 Docker 이미지 빌드

클론한 디렉토리 내부에 포함된 build.sh 스크립트를 실행하여 Docker 이미지를 빌드합니다.

bash build.sh

build.sh는 레포지토리에 포함된 Dockerfile을 기반으로 Docker 이미지를 생성합니다.

기본 설정

  • 예시의 Docker 이미지는 GPU 프레임워크(Pytorch) 기반 환경을 포함합니다.
  • NVIDIA의 기본 Docker 이미지를 사용하여 GPU 활용이 가능하도록 설정되었습니다.

참고

DockerfileFROM 섹션에서 원하는 프레임워크의 기본 이미지를 수정할 수 있습니다.
예를 들어, PyTorch 외에도 TensorFlow나 다른 GPU 프레임워크를 사용하려면 각자 필요한 베이스 이미지를 참조해 변경하세요.

이미지 정보

빌드가 완료되면 다음과 같은 이름과 태그를 가진 Docker 이미지가 생성됩니다.

  • 이미지 이름: my-pytorch-image
  • 태그: 1.0

build.sh 파일을 열어 이름과 태그를 변경할 수도 있습니다.

📖 자세히 보기: nvidia NGC catalog


4.3 컨테이너 실행

레포지토리에 포함된 run.sh 스크립트를 사용하여 컨테이너를 실행합니다:

bash run.sh

run.sh는 다음과 같은 설정으로 컨테이너를 실행합니다:

  • GPU 지원 활성화: --gpus all
  • 마운트 경로: 로컬 디렉토리 volume/를 컨테이너 내부 /workspace로 마운트.
    기본 run.sh는 레포지토리 내부의 volume/ 폴더를 컨테이너 내부 /workspace 경로로 마운트합니다.
    - 수정 없이 실행하면 volume/ 폴더에서 작업이 가능합니다.

4.4 컨테이너 접속

컨테이너에 직접 접속하려면 다음 명령어를 실행하세요:

docker exec -it my-container bash

이제 컨테이너 내부 /workspace 경로에서 작업 파일을 확인하고 사용할 수 있습니다.

💡 그런데 잠깐!
이렇게 터미널에서 직접 접속할 수도 있지만, 우리는 VSCode를 활용해 컨테이너를 편리한 개발 환경으로 사용할 예정입니다.
바로 다음 섹션에서 VSCode와 Docker 컨테이너를 연결하는 방법을 알아봅시다! 🚀


4.5 추가 설명: 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 경로에 마운트하여 작업 파일을 컨테이너에서 직접 사용할 수 있도록 설정합니다.


5. Visual Studio Code 설정 🎨

🖥️ Windows에서 VSCode를 활용할 시간입니다.

5.1 VSCode 플러그인 설치

  1. Remote Development 플러그인 설치.

5.2 Docker 컨테이너로 연결

  1. Docker 컨테이너 실행 후(4.3 에서 실행 되었음) VSCode에서 Remote Exploer로 Dev Containers에 연결.
  2. 컨테이너 내부 파일을 열어 작업 시작!

📖 자세히 보기: VSCode Remote Development 가이드


6. Docker 실행 시 자원 할당 💻

컨테이너가 너무 많은 자원을 쓰거나 적게 쓰면 성능이 떨어질 수 있어요. 아래 옵션을 추가해서 자원을 효율적으로 할당하세요:

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

📖 자세히 보기: Docker 자원 제한 공식 문서


끝! 🎉

여기까지 따라오느라 고생 많으셨어요! 이제 여러분만의 GPU 개발 환경이 완성됐습니다. 궁금한 점이 있다면 각 단계의 원본 링크를 참고하세요. 🚀 Happy Coding! 😊😊

profile
AI 관련 학습자료 정리 공간

0개의 댓글