YOLO Vision 2026:

Docker์—์„œ YOLOv5 ๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ#

Ultralytics YOLOv5 Docker ๋น ๋ฅธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” YOLOv5๋ฅผ Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค. Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฉ๋ฆฌ๋˜๊ณ  ์ผ๊ด€๋œ ํ™˜๊ฒฝ์—์„œ YOLOv5๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ๋‹ค์–‘ํ•œ ์‹œ์Šคํ…œ์—์„œ์˜ ๋ฐฐํฌ์™€ ์ข…์†์„ฑ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ„์†Œํ™”๋ฉ๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ปจํ…Œ์ด๋„ˆํ™”๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ข…์†์„ฑ์„ ํ•จ๊ป˜ ํŒจํ‚ค์ง•ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ฒด ์„ค์ • ๋ฐฉ๋ฒ•์€ Colab Notebook Open In Colab Open In Kaggle, GCP Deep Learning VM ๋˜๋Š” Amazon AWS ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. Ultralytics ๋ชจ๋ธ์—์„œ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ฐœ์š”๋Š” Ultralytics Docker Quickstart Guide๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

ํ•„์ˆ˜ ์กฐ๊ฑด#

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ํ•ญ๋ชฉ์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค:

  1. Docker: ๊ณต์‹ Docker ์›น์‚ฌ์ดํŠธ์—์„œ Docker๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค. Docker๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.
  2. NVIDIA Drivers (GPU ์ง€์›์— ํ•„์š”): NVIDIA ๋“œ๋ผ์ด๋ฒ„ ๋ฒ„์ „ 455.23 ์ด์ƒ์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ตœ์‹  ๋“œ๋ผ์ด๋ฒ„๋Š” NVIDIA ์›น์‚ฌ์ดํŠธ์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. NVIDIA Container Toolkit (GPU ์ง€์›์— ํ•„์š”): ์ด ํˆดํ‚ท์„ ์‚ฌ์šฉํ•˜๋ฉด Docker ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ์˜ NVIDIA GPU์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์ง€์นจ์€ ๊ณต์‹ NVIDIA Container Toolkit ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

NVIDIA Container Toolkit ์„ค์ •(GPU ์‚ฌ์šฉ์ž)#

๋จผ์ € ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์—ฌ NVIDIA ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค:

nvidia-smi

์ด ๋ช…๋ น์€ GPU์™€ ์„ค์น˜๋œ ๋“œ๋ผ์ด๋ฒ„ ๋ฒ„์ „์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ NVIDIA Container Toolkit์„ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค. ์•„๋ž˜ ๋ช…๋ น์€ Ubuntu์™€ ๊ฐ™์€ Debian ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ ๋ฐ Fedora/CentOS์™€ ๊ฐ™์€ RHEL ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์‚ฌ์šฉ ์ค‘์ธ ๋ฐฐํฌํŒ์— ๋งž๋Š” ์ง€์นจ์€ ์œ„์— ๋งํฌ๋œ ๊ณต์‹ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && 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์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

Docker๋กœ CDI ๋””๋ฐ”์ด์Šค ํ™•์ธ#

GPU CDI ๋””๋ฐ”์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด nvidia-ctk cdi list์„ ์‹คํ–‰ํ•˜์„ธ์š”(toolkit์˜ nvidia-cdi-refresh ์„œ๋น„์Šค๋Š” toolkit >= 1.18์—์„œ ์‚ฌ์–‘์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค):

nvidia-ctk cdi list

nvidia.com/gpu=0 ๋ฐ nvidia.com/gpu=all๊ณผ ๊ฐ™์€ ํ•ญ๋ชฉ์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Linux์—์„œ CDI ๋””๋ฐ”์ด์Šค ์š”์ฒญ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Docker >= 28.2.0 ๋ฐ NVIDIA Container Toolkit >= 1.18์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ --gpus all ํ”Œ๋ž˜๊ทธ๋Š” ํ˜ธ์ŠคํŠธ ๋ฐ๋ชฌ์„ ๋‹ค์‹œ ๋กœ๋“œํ•œ ํ›„ GPU ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์žƒ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด์ „ Linux ํ˜ธ์ŠคํŠธ๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ๋Œ€์‹  --device์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

1๋‹จ๊ณ„: YOLOv5 Docker ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ#

Ultralytics๋Š” Docker Hub์—์„œ ๊ณต์‹ YOLOv5 ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. latest ํƒœ๊ทธ๋Š” ์ตœ์‹  repository ์ปค๋ฐ‹์„ ์ถ”์ ํ•˜๋ฏ€๋กœ ํ•ญ์ƒ ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค์‹ญ์‹œ์˜ค:

# Define the image name with tag
t=ultralytics/yolov5:latest

# Pull the latest YOLOv5 image from Docker Hub
sudo docker pull $t

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ด๋ฏธ์ง€๋Š” Ultralytics YOLOv5 Docker Hub repository์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๋‹จ๊ณ„: Docker ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰#

์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CPU๋งŒ ์‚ฌ์šฉ#

CPU๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€ํ™”ํ˜• ์ปจํ…Œ์ด๋„ˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด -it ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. --ipc=host ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ธ์ŠคํŠธ IPC ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

# Run an interactive container instance using CPU
sudo docker run -it --ipc=host $t

GPU ์‚ฌ์šฉ#

์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ GPU ์•ก์„ธ์Šค๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด --device nvidia.com/gpu=... CDI ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” NVIDIA Container Toolkit์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# Run with access to all available GPUs
sudo docker run -it --ipc=host --device nvidia.com/gpu=all $t

# Run with access to specific GPUs (e.g., GPUs 2 and 3)
sudo docker run -it --ipc=host --device nvidia.com/gpu=2 --device nvidia.com/gpu=3 $t

๋ช…๋ น ์˜ต์…˜์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ Docker run reference๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋กœ์ปฌ ๋””๋ ‰ํ„ฐ๋ฆฌ ๋งˆ์šดํŠธ#

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋กœ์ปฌ ํŒŒ์ผ(๋ฐ์ดํ„ฐ์…‹, ๋ชจ๋ธ ๊ฐ€์ค‘์น˜ ๋“ฑ)์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด -v ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธํ•˜์‹ญ์‹œ์˜ค:

# Mount /path/on/host (your local machine) to /path/in/container (inside the container)
sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container $t

/path/on/host์„ ๋จธ์‹ ์˜ ์‹ค์ œ ๊ฒฝ๋กœ๋กœ, /path/in/container์„ Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์›ํ•˜๋Š” ๊ฒฝ๋กœ(์˜ˆ: /usr/src/datasets)๋กœ ๋ฐ”๊พธ์‹ญ์‹œ์˜ค.

3๋‹จ๊ณ„: Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ YOLOv5 ๐Ÿš€ ์‚ฌ์šฉํ•˜๊ธฐ#

์ด์ œ ์‹คํ–‰ ์ค‘์ธ YOLOv5 Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์žˆ์Šต๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์„œ Object Detection๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ Machine Learning ๋ฐ Deep Learning ์ž‘์—…์— ํ‘œ์ค€ YOLOv5 ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# Train a YOLOv5 model on your custom dataset (ensure data is mounted or downloaded)
python train.py --data your_dataset.yaml --weights yolov5s.pt --img 640 # Start training

# Validate the trained model's performance (Precision, Recall, mAP)
python val.py --weights path/to/your/best.pt --data your_dataset.yaml # Validate accuracy

# Run inference on images or videos using a trained model
python detect.py --weights yolov5s.pt --source path/to/your/images_or_videos # Perform detection

# Export the trained model to various formats like ONNX, CoreML, or TFLite for deployment
python export.py --weights yolov5s.pt --include onnx coreml tflite # Export model

๋‹ค์–‘ํ•œ ๋ชจ๋“œ์˜ ์ž์„ธํ•œ ์‚ฌ์šฉ๋ฒ•์€ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค:

Precision, Recall, mAP์™€ ๊ฐ™์€ ํ‰๊ฐ€ ์ง€ํ‘œ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์‹ญ์‹œ์˜ค. ONNX, CoreML, TFLite์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋ชจ๋ธ ๋ฐฐํฌ ์˜ต์…˜์„ ์‚ดํŽด๋ณด๊ณ , ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์‹ญ์‹œ์˜ค.

Running YOLOv5 inside a Docker container on GCP

Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ YOLOv5๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€