Ubuntu 22.04 + RTX 5050에서 Docker로 TensorFlow sm_120 소스 빌드와 YOLO11 GPU 환경 구축하기 #2

24. YOLO11은 별도의 Docker 환경 사용

TensorFlow와 YOLO11을 같은 Docker에 모두 설치할 수도 있습니다.

하지만 여기에서는 분리합니다.

구조는 다음과 같습니다.

Docker
│
├── tensorflow-sm120
│
└── yolo-sm120

TensorFlow는 TensorFlow 학습에 사용합니다.

YOLO Docker는 PyTorch와 Ultralytics YOLO에 사용합니다.

이렇게 분리하면 문제가 발생했을 때 원인을 찾기 쉽습니다.

24. YOLO Dockerfile 만들기

다음 파일을 만듭니다.

nano ~/ai_docker/docker/yolo/Dockerfile

다음 내용을 입력합니다.

FROM nvidia/cuda:12.8.1-cudnn-runtime-ubuntu22.04

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get install -y \
    python3 \
    python3-pip \
    git \
    ffmpeg \
    libgl1 \
    libglib2.0-0

RUN python3 -m pip install \
    --upgrade \
    pip

RUN python3 -m pip install \
    torch==2.11.0 \
    torchvision==0.26.0 \
    --index-url \
    https://download.pytorch.org/whl/cu128

RUN python3 -m pip install \
    ultralytics \
    jupyterlab \
    matplotlib \
    pandas \
    pillow

WORKDIR /workspace

EXPOSE 8889

CMD [
    "jupyter",
    "lab",
    "--ip=0.0.0.0",
    "--port=8889",
    "--no-browser",
    "--allow-root"
]

파일을 저장합니다.

1) Ubuntu 기본 패키지 설치

RUN apt-get update && \
    apt-get install -y \
    python3 \
    python3-pip \
    git \
    ffmpeg \
    libgl1 \
    libglib2.0-0

Ubuntu 패키지 목록을 갱신한 후 딥러닝 및 영상 처리 환경에 필요한 기본 프로그램과 라이브러리를 설치합니다.

python3

Python 3 실행 환경입니다.

PyTorch, Ultralytics YOLO, JupyterLab 등의 프로그램을 실행하는 기본 언어로 사용됩니다.

python3-pip

Python 패키지 관리자인 pip를 설치합니다.

이후 PyTorch, Ultralytics, Pandas 등의 Python 라이브러리를 설치하는 데 사용됩니다.

git

Git 저장소에서 소스 코드를 다운로드하거나 프로젝트 버전을 관리하기 위해 사용합니다.

예를 들어 GitHub에 있는 YOLO 관련 프로젝트나 사용자 프로젝트를 컨테이너 내부로 가져올 수 있습니다.

ffmpeg

영상 및 오디오 처리 프로그램입니다.

YOLO를 이용하여 MP4, AVI 등의 동영상 파일을 분석하거나 영상 포맷을 변환할 때 사용됩니다.

libgl1

OpenGL 관련 라이브러리입니다.

OpenCV 및 이미지 처리 라이브러리에서 영상 또는 이미지를 처리하는 과정에서 필요할 수 있습니다.

libglib2.0-0

GLib 기반 라이브러리입니다.

OpenCV를 비롯한 여러 영상 처리 및 GUI 관련 패키지가 내부적으로 사용하는 시스템 라이브러리입니다.

2) pip 업그레이드

RUN python3 -m pip install \
    --upgrade \
    pip

Python 패키지 설치 프로그램인 pip를 최신 버전으로 업그레이드합니다.

오래된 pip 버전을 사용할 경우 최신 PyTorch 패키지나 Python 라이브러리 설치 과정에서 문제가 발생할 수 있으므로 먼저 업데이트합니다.

3) CUDA 12.8용 PyTorch 설치

RUN python3 -m pip install \
    torch==2.11.0 \
    torchvision==0.26.0 \
    --index-url \
    https://download.pytorch.org/whl/cu128

GPU 연산을 지원하는 PyTorch와 TorchVision을 설치합니다.

torch

PyTorch의 핵심 딥러닝 라이브러리입니다.

다음 작업에 사용됩니다.

  • 신경망 모델 구성
  • 모델 학습
  • GPU 연산
  • Tensor 연산
  • 추론
  • 모델 저장 및 로드
torchvision

PyTorch에서 이미지 관련 기능을 제공하는 라이브러리입니다.

주요 기능은 다음과 같습니다.

  • 이미지 전처리
  • 데이터 변환
  • 이미지 데이터셋 처리
  • 객체 인식 모델 지원
  • 이미지 관련 딥러닝 기능
CUDA 12.8 전용 PyTorch 저장소
https://download.pytorch.org/whl/cu128

일반 PyPI 저장소가 아닌 PyTorch에서 제공하는 CUDA 12.8 전용 Wheel 저장소를 사용하도록 지정합니다.

cu128은 CUDA 12.8을 의미합니다.

따라서 설치되는 PyTorch는 NVIDIA GPU를 사용할 수 있는 CUDA 지원 버전입니다.

4) 딥러닝 및 데이터 분석 Python 패키지 설치

RUN python3 -m pip install \
    ultralytics \
    jupyterlab \
    matplotlib \
    pandas \
    pillow

딥러닝 개발 및 데이터 분석에 필요한 주요 Python 패키지를 설치합니다.

ultralytics

Ultralytics YOLO 라이브러리입니다.

YOLO 계열 객체 인식 모델의 학습 및 추론에 사용할 수 있습니다.

주요 기능은 다음과 같습니다.

  • 객체 탐지(Object Detection)
  • 이미지 분류(Classification)
  • 객체 분할(Segmentation)
  • 자세 추정(Pose Estimation)
  • 객체 추적(Tracking)
  • YOLO 모델 학습 및 검증
  • 이미지 및 동영상 추론

예를 들어 Python에서는 다음과 같이 사용할 수 있습니다.

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
results = model("image.jpg")
jupyterlab

웹 브라우저 기반 Python 개발 환경입니다.

컨테이너 내부의 Python 환경을 웹 브라우저를 통해 사용할 수 있습니다.

JupyterLab에서 다음과 같은 작업을 수행할 수 있습니다.

  • Python 코드 실행
  • YOLO 모델 테스트
  • 데이터 분석
  • 모델 학습
  • 그래프 출력
  • 이미지 확인
  • Notebook 작성
matplotlib

Python 그래프 및 데이터 시각화 라이브러리입니다.

예를 들어 다음과 같은 데이터를 그래프로 표현할 수 있습니다.

  • YOLO 학습 Loss
  • Precision
  • Recall
  • mAP
  • 학습 정확도
  • 센서 데이터
pandas

Python 데이터 분석 라이브러리입니다.

CSV 또는 표 형식의 데이터를 처리할 때 사용합니다.

예를 들어 YOLO 학습 결과인 results.csv를 분석하거나 각종 실험 데이터를 정리하는 데 사용할 수 있습니다.

pillow

Python 이미지 처리 라이브러리입니다.

JPEG, PNG 등의 이미지 파일을 읽거나 저장하고 크기를 변경하거나 간단한 이미지 처리를 수행할 수 있습니다.

Ultralytics와 여러 이미지 처리 라이브러리에서도 내부적으로 활용됩니다.

5) 작업 디렉터리 설정

WORKDIR /workspace

Docker 컨테이너 내부에서 기본 작업 위치를 /workspace로 지정합니다.

컨테이너가 실행되면 기본 터미널 위치와 JupyterLab의 작업 위치가 /workspace가 됩니다.

일반적으로 호스트 PC의 프로젝트 폴더를 다음과 같이 연결하여 사용할 수 있습니다.

docker run \
    --gpus all \
    -p 8889:8889 \
    -v $(pwd):/workspace \
    IMAGE_NAME

이 경우 현재 PC의 프로젝트 폴더와 Docker 컨테이너 내부의 /workspace가 연결됩니다.

따라서 컨테이너를 삭제하더라도 프로젝트 파일은 호스트 PC에 그대로 유지됩니다.

6) JupyterLab 포트 설정

EXPOSE 8889

컨테이너에서 JupyterLab이 사용할 포트가 8889임을 명시합니다.

실제로 외부 PC에서 접속하려면 Docker 실행 시 포트 매핑을 지정해야 합니다.

예를 들어 다음과 같습니다.

-p 8889:8889

첫 번째 8889는 호스트 PC의 포트이며 두 번째 8889는 Docker 컨테이너 내부의 포트입니다.

7) 컨테이너 시작 명령

CMD [
    "jupyter",
    "lab",
    "--ip=0.0.0.0",
    "--port=8889",
    "--no-browser",
    "--allow-root"
]

Docker 컨테이너가 시작될 때 자동으로 실행되는 명령입니다.

즉, 컨테이너가 실행되면 JupyterLab 서버가 바로 시작됩니다.

각 옵션의 의미는 다음과 같습니다.

jupyter lab

JupyterLab 서버를 실행합니다.

--ip=0.0.0.0

컨테이너 외부에서도 JupyterLab에 접근할 수 있도록 모든 네트워크 인터페이스에서 접속을 허용합니다.

이 옵션이 없으면 컨테이너 내부에서만 접속할 수 있는 문제가 발생할 수 있습니다.

--port=8889

JupyterLab 서버의 포트를 8889로 지정합니다.

--no-browser

컨테이너 내부에서 웹 브라우저를 자동으로 실행하지 않도록 설정합니다.

Docker 컨테이너에는 일반적으로 GUI 웹 브라우저가 없기 때문에 필요한 옵션입니다.

--allow-root

Docker 컨테이너 내부에서는 프로그램이 root 사용자로 실행되는 경우가 많습니다.

JupyterLab은 기본적으로 root 사용자 실행을 제한하기 때문에 해당 옵션을 통해 root 환경에서도 JupyterLab이 실행될 수 있도록 합니다.

14) YOLO Docker 이미지 만들기

프로젝트 디렉터리로 이동합니다.

cd ~/ai_docker

이미지를 만듭니다.

docker build -t yolo-sm120 -f docker/yolo/Dockerfile .

완료되면 확인합니다.

docker images

다음 이미지 2개가 보이면 됩니다.

tensorflow-sm120
yolo-sm120

15) YOLO Docker 실행

다음 명령을 실행합니다.

docker run --rm -it --gpus all --name yolo-sm120 --shm-size=4g \
-p 8889:8889 -v ~/ai_docker:/workspace yolo-sm120

각 옵션은 다음 의미입니다.

옵션의미
docker run컨테이너 실행
--rm종료하면 컨테이너 자동 삭제
-it터미널에서 직접 조작
--gpus allNVIDIA GPU 전체 사용
--name yolo-sm120컨테이너 이름 지정
--shm-size=4g공유 메모리 4GB 할당
-p 8889:8889PC의 8889 포트와 컨테이너 8889 포트 연결
-v ~/ai_docker:/workspace호스트 폴더를 컨테이너 /workspace에 연결
yolo-sm120실행할 Docker 이미지 이름

즉,

Host PC
 ├─ GPU
 ├─ ~/ai_docker
 └─ Port 8889
        │
        ▼
Docker Container
 ├─ GPU 사용
 ├─ /workspace
 └─ Port 8889

형태로 실행됩니다.

특히 -v ~/ai_docker:/workspace를 사용하면 컨테이너를 삭제해도 학습 데이터나 결과 파일은 호스트 PC에 그대로 남습니다.

TensorFlow JupyterLab은 다음 포트를 사용합니다.

8888

YOLO JupyterLab은 다음 포트를 사용합니다.

8889

따라서 서로 충돌하지 않습니다.

16) YOLO Docker에서 GPU 확인

새 터미널에서 다음 명령을 실행합니다.

docker exec -it yolo-sm120 bash

PyTorch가 GPU를 사용할 수 있는지 확인합니다.

python3 - <<'PY'
import torch

print(
    "PyTorch:",
    torch.__version__
)

print(
    "CUDA:",
    torch.version.cuda
)

print(
    "GPU 사용 가능:",
    torch.cuda.is_available()
)

if torch.cuda.is_available():

    print(
        "GPU:",
        torch.cuda.get_device_name(0)
    )

    print(
        "Compute Capability:",
        torch.cuda.get_device_capability(0)
    )
PY

RTX 5050에서는 다음과 비슷하게 출력되어야 합니다.

GPU 사용 가능: True

GPU:
NVIDIA GeForce RTX 5050 Laptop GPU

Compute Capability:
(12, 0)

17) YOLO 데이터셋 준비

YOLO 데이터셋은 다음 구조로 준비합니다.

~/ai_docker/dataset/yolo_images
│
├── images
│   ├── train
│   └── val
│
└── labels
    ├── train
    └── val

예를 들어 다음 이미지가 있다면

images/train/image001.jpg

다음 라벨 파일이 존재해야 합니다.

labels/train/image001.txt

18) YOLO 데이터 설정 파일 만들기

다음 파일을 만듭니다.

nano ~/ai_docker/yolo_data.yaml

다음 내용을 작성합니다.

path: /workspace/dataset/yolo_images

train: images/train
val: images/val

nc: 8

names:
  - speed_up
  - slow_down
  - turn_right
  - Crosswalk
  - Red_light
  - Green_light
  - Yellow_light
  - Crossing_gate

이번 데이터셋에는 8개의 클래스가 있습니다.

0
speed_up

1
slow_down

2
turn_right

3
Crosswalk

4
Red_light

5
Green_light

6
Yellow_light

7
Crossing_gate

19) YOLO11n 학습 실행

YOLO Docker 안에서 다음 명령을 실행합니다.

cd /workspace

학습을 시작합니다.

yolo train model=yolo11n.pt data=/workspace/yolo_data.yaml epochs=200 \
imgsz=640 device=0 project=/workspace/runs name=yolo11n_sign

의미는 다음과 같습니다.

항목의미
yolo trainYOLO 학습 시작
model=yolo11n.ptYOLO11n 기본 모델 사용
data=/workspace/yolo_data.yaml학습 데이터 설정 파일
epochs=200전체 데이터를 200번 반복 학습
imgsz=640이미지를 640×640 크기로 학습
device=0첫 번째 NVIDIA GPU 사용
project=/workspace/runs결과 저장 폴더
name=yolo11n_sign이번 학습 이름

즉,

YOLO11n 모델
    +
교통 표지/신호 데이터
    ↓
200번 학습
    ↓
학습된 YOLO 모델 생성

입니다.

여기서 가장 중요한 옵션은 다음입니다.

model=yolo11n.pt
    YOLO11n 모델 사용

epochs=200
    학습 반복 횟수

imgsz=640
    이미지 크기

device=0
    NVIDIA GPU 사용

20) YOLO 학습 결과 확인

학습 결과는 다음 위치에 저장됩니다.

~/ai_docker/runs/yolo11n_sign

중요한 모델 파일은 다음입니다.

weights/best.pt

전체 위치는 다음과 같습니다.

~/ai_docker/runs/yolo11n_sign/weights/best.pt

이 파일은 나중에 ROS 2 객체 인식 노드에서 사용할 수 있습니다.

Leave a Comment