YOLO Vision 2026:

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

Ultralytics YOLOv5 Docker ๋น ๋ฅธ ์‹œ์ž‘ ๊ฐ€์ด๋“œ์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ YOLOv5๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‹จ๊ณ„๋ณ„ ์ง€์นจ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 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 ๋“œ๋ผ์ด๋ฒ„ (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์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค(ํˆดํ‚ท์˜ nvidia-cdi-refresh ์„œ๋น„์Šค๋Š” ํˆดํ‚ท ๋ฒ„์ „ 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 ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ(Pull)#

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

# 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 ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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 ์ฐธ์กฐ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

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

์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ๋กœ์ปฌ ํŒŒ์ผ(๋ฐ์ดํ„ฐ์…‹, ๋ชจ๋ธ ๊ฐ€์ค‘์น˜ ๋“ฑ)์„ ์ž‘์—…ํ•˜๋ ค๋ฉด -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 ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ์žˆ์Šต๋‹ˆ๋‹ค! ์—ฌ๊ธฐ์—์„œ ๊ฐ์ฒด ๊ฐ์ง€์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ฐ ๋”ฅ ๋Ÿฌ๋‹ ์ž‘์—…์„ ์œ„ํ•œ ํ‘œ์ค€ 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์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋‚ด๋ณด๋‚ด๊ธฐ ํ˜•์‹์„ ์ดํ•ดํ•˜๊ณ , ๋‹ค์–‘ํ•œ Model Deployment Options์„ ์‚ดํŽด๋ณด์„ธ์š”. model weights๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”.

Running YOLOv5 inside a Docker container on GCP

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

๊ธฐ์—ฌ์ž

๋Œ“๊ธ€