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 all | NVIDIA GPU 전체 사용 |
--name yolo-sm120 | 컨테이너 이름 지정 |
--shm-size=4g | 공유 메모리 4GB 할당 |
-p 8889:8889 | PC의 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 train | YOLO 학습 시작 |
model=yolo11n.pt | YOLO11n 기본 모델 사용 |
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 객체 인식 노드에서 사용할 수 있습니다.