Docker์์ YOLOv5 ๐ ์์ํ๊ธฐ#
Ultralytics YOLOv5 Docker ๋น ๋ฅธ ์์ ๊ฐ์ด๋์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค! ์ด ํํ ๋ฆฌ์ผ์์๋ YOLOv5๋ฅผ Docker ์ปจํ ์ด๋ ๋ด์์ ์ค์ ํ๊ณ ์คํํ๋ ๋ฐฉ๋ฒ์ ๋จ๊ณ๋ณ๋ก ์๋ดํฉ๋๋ค. Docker๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฉ๋ฆฌ๋๊ณ ์ผ๊ด๋ ํ๊ฒฝ์์ YOLOv5๋ฅผ ์คํํ ์ ์์ด ๋ค์ํ ์์คํ ์์์ ๋ฐฐํฌ์ ์ข ์์ฑ ๊ด๋ฆฌ๊ฐ ๊ฐ์ํ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ปจํ ์ด๋ํ๋ฅผ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ข ์์ฑ์ ํจ๊ป ํจํค์งํฉ๋๋ค.
๋์ฒด ์ค์ ๋ฐฉ๋ฒ์ Colab Notebook
, GCP Deep Learning VM ๋๋ Amazon AWS ๊ฐ์ด๋๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค. Ultralytics ๋ชจ๋ธ์์ Docker๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ฐ์๋ Ultralytics Docker Quickstart Guide๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
ํ์ ์กฐ๊ฑด#
์์ํ๊ธฐ ์ ์ ๋ค์ ํญ๋ชฉ์ด ์ค์น๋์ด ์๋์ง ํ์ธํ์ญ์์ค:
- Docker: ๊ณต์ Docker ์น์ฌ์ดํธ์์ Docker๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ์ค์นํ์ญ์์ค. Docker๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- NVIDIA Drivers (GPU ์ง์์ ํ์): NVIDIA ๋๋ผ์ด๋ฒ ๋ฒ์ 455.23 ์ด์์ด ์ค์น๋์ด ์๋์ง ํ์ธํ์ญ์์ค. ์ต์ ๋๋ผ์ด๋ฒ๋ NVIDIA ์น์ฌ์ดํธ์์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
- 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 updatesudo apt-get install -y nvidia-container-toolkitDocker๋ก CDI ๋๋ฐ์ด์ค ํ์ธ#
GPU CDI ๋๋ฐ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ํ์ธํ๋ ค๋ฉด nvidia-ctk cdi list์ ์คํํ์ธ์(toolkit์ nvidia-cdi-refresh ์๋น์ค๋ toolkit >= 1.18์์ ์ฌ์์ ์๋์ผ๋ก ์์ฑํ๊ณ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค):
nvidia-ctk cdi listnvidia.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 $tGPU ์ฌ์ฉ#
์ปจํ
์ด๋ ๋ด์์ 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์ ๊ฐ์ ๋ค์ํ ๋ชจ๋ธ ๋ฐฐํฌ ์ต์ ์ ์ดํด๋ณด๊ณ , ๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ์ญ์์ค.

Docker ์ปจํ ์ด๋ ๋ด์์ YOLOv5๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ค์ ํ๊ณ ์คํํ์ต๋๋ค.