Docker λΉ λ₯Έ μμ κ°μ΄λ Ultralytics
μ΄ κ°μ΄λλ Ultralytics νλ‘μ νΈλ₯Ό μν Docker νκ²½ μ€μ μ λν ν¬κ΄μ μΈ μκ° μν μ ν©λλ€. Dockerλ 컨ν μ΄λμμ μ ν리μΌμ΄μ μ κ°λ°, λ°°ν¬ λ° μ€ννκΈ° μν νλ«νΌμ λλ€. νΉν μννΈμ¨μ΄κ° λ°°ν¬λ μμΉμ κ΄κ³μμ΄ νμ λμΌνκ² μ€νλλλ‘ νλ λ° μ μ©ν©λλ€. μμΈν λ΄μ©μ Docker Hubμ Ultralytics Docker 리ν¬μ§ν 리λ₯Ό μ°Έμ‘°νμΈμ.
νμ΅ λ΄μ©
- NVIDIA μ§μμΌλ‘ Docker μ€μ νκΈ°
- Ultralytics λ컀 μ΄λ―Έμ§ μ€μΉ
- CPU λλ GPU μ§μμΌλ‘ λ컀 컨ν μ΄λμμ Ultralytics μ€ννκΈ°
- Dockerμ ν¨κ» λμ€νλ μ΄ μλ²λ₯Ό μ¬μ©νμ¬ Ultralytics νμ§ κ²°κ³Ό νμνκΈ°
- 컨ν μ΄λμ λ‘컬 λλ ν°λ¦¬ λ§μ΄νΈ
μ μ 쑰건
- μμ€ν μ Dockerκ° μ€μΉλμ΄ μλμ§ νμΈνμΈμ. μ€μΉλμ΄ μμ§ μμ κ²½μ° Docker μΉμ¬μ΄νΈμμ λ€μ΄λ‘λνμ¬ μ€μΉν μ μμ΅λλ€.
- μμ€ν μ NVIDIA GPU λ° NVIDIA λλΌμ΄λ²κ° μ€μΉλμ΄ μλμ§ νμΈν©λλ€.
NVIDIA μ§μμΌλ‘ Docker μ€μ νκΈ°
λ¨Όμ NVIDIA λλΌμ΄λ²λ₯Ό μ€ννμ¬ λλΌμ΄λ²κ° μ λλ‘ μ€μΉλμλμ§ νμΈν©λλ€:
NVIDIA λ컀 λ°νμ μ€μΉ
μ΄μ Docker 컨ν μ΄λμμ GPU μ§μμ νμ±ννκΈ° μν΄ NVIDIA Docker λ°νμμ μ€μΉν΄ λ³΄κ² μ΅λλ€:
# Add NVIDIA package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(lsb_release -cs)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
# Install NVIDIA Docker runtime
sudo apt-get update
sudo apt-get install -y nvidia-docker2
# Restart Docker service to apply changes
sudo systemctl restart docker
Dockerλ‘ NVIDIA λ°νμ νμΈ
μ€ν docker info | grep -i runtime
λ₯Ό μ¬μ©νμ¬ nvidia
κ° λ°νμ λͺ©λ‘μ λνλ©λλ€:
Ultralytics λ컀 μ΄λ―Έμ§ μ€μΉ
Ultralytics λ λ€μν νλ«νΌκ³Ό μ¬μ© μ¬λ‘μ μ΅μ νλ μ¬λ¬ Docker μ΄λ―Έμ§λ₯Ό μ 곡ν©λλ€:
- λ컀νμΌ: GPU μ΄λ―Έμ§, κ΅μ‘μ μ΄μμ μ λλ€.
- λ컀νμΌ-arm64: ARM64 μν€ν μ²μ κ²½μ°, λΌμ¦λ² 리 νμ΄μ κ°μ μ₯μΉμ μ ν©ν©λλ€.
- λ컀νμΌ-cpu: CPU-μΆλ‘ λ°GPU νκ²½μ΄ μλ μ μ© λ²μ μ λλ€.
- λ컀νμΌ-μ ―μ¨: NVIDIA Jetson μ₯μΉμ μ΅μ ν.
- λ컀νμΌ-python: κ²½λ μ ν리μΌμ΄μ μ μν μ΅μνμ Python νκ²½.
- λ컀νμΌ-μ½λ€: μ½λ€λ₯Ό ν΅ν΄ μ€μΉλ λ―Έλμ½λ€3 λ° Ultralytics ν¨ν€μ§λ₯Ό ν¬ν¨ν©λλ€.
μ΅μ μ΄λ―Έμ§λ₯Ό κ°μ Έμ€λ €λ©΄
# Set image name as a variable
t=ultralytics/ultralytics:latest
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull $t
λ컀 컨ν μ΄λμμ Ultralytics μ€ν
Ultralytics λ컀 컨ν μ΄λλ₯Ό μ€ννλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€:
λ§ μ¬μ©νμ¬ CPU
GPU μ¬μ©
# Run with all GPUs
sudo docker run -it --ipc=host --gpus all $t
# Run specifying which GPUs to use
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t
κ·Έλ¦¬κ³ -it
νλκ·Έλ μμ¬ TTYλ₯Ό ν λΉνκ³ stdinμ μ΄μ΄λμ΄ μ»¨ν
μ΄λμ μνΈ μμ©ν μ μλλ‘ ν©λλ€. 컨ν
μ΄λμ --ipc=host
νλκ·Έλ₯Ό μ¬μ©νλ©΄ νλ‘μΈμ€ κ° λ©λͺ¨λ¦¬ 곡μ μ νμμ μΈ νΈμ€νΈμ IPC λ€μμ€νμ΄μ€λ₯Ό 곡μ ν μ μμ΅λλ€. κ·Έλ¦¬κ³ --gpus
νλκ·Έλ₯Ό μ¬μ©νλ©΄ 컨ν
μ΄λκ° νΈμ€νΈμ GPUμ μ‘μΈμ€ν μ μμ΅λλ€.
λ컀 컨ν μ΄λμμ Ultralytics μ€ν
Ultralytics λ컀 컨ν μ΄λλ₯Ό μ€ννλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€:
λ§ μ¬μ©νμ¬ CPU
GPU μ¬μ©
# Run with all GPUs
sudo docker run -it --ipc=host --gpus all $t
# Run specifying which GPUs to use
sudo docker run -it --ipc=host --gpus '"device=2,3"' $t
κ·Έλ¦¬κ³ -it
νλκ·Έλ μμ¬ TTYλ₯Ό ν λΉνκ³ stdinμ μ΄μ΄λμ΄ μ»¨ν
μ΄λμ μνΈ μμ©ν μ μλλ‘ ν©λλ€. 컨ν
μ΄λμ --ipc=host
νλκ·Έλ₯Ό μ¬μ©νλ©΄ νλ‘μΈμ€ κ° λ©λͺ¨λ¦¬ 곡μ μ νμμ μΈ νΈμ€νΈμ IPC λ€μμ€νμ΄μ€λ₯Ό 곡μ ν μ μμ΅λλ€. κ·Έλ¦¬κ³ --gpus
νλκ·Έλ₯Ό μ¬μ©νλ©΄ 컨ν
μ΄λκ° νΈμ€νΈμ GPUμ μ‘μΈμ€ν μ μμ΅λλ€.
νμΌ μ κ·Όμ± κ΄λ ¨ μ°Έκ³ μ¬ν
컨ν μ΄λ λ΄μμ λ‘컬 λ¨Έμ μ νμΌλ‘ μμ νλ €λ©΄ Docker λ³Όλ₯¨μ μ¬μ©ν μ μμ΅λλ€:
# Mount a local directory into the container
sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container $t
κ΅μ²΄ /path/on/host
λ₯Ό λ‘컬 μ»΄ν¨ν°μ λλ ν°λ¦¬ κ²½λ‘μ /path/in/container
λ₯Ό Docker 컨ν
μ΄λ λ΄λΆμ μνλ κ²½λ‘λ‘ μ€μ ν©λλ€.
Docker 컨ν μ΄λμμ κ·Έλν½ μ¬μ©μ μΈν°νμ΄μ€(GUI) μ ν리μΌμ΄μ μ€ννκΈ°
λ§€μ° μ€νμ - μ¬μ©μκ° λͺ¨λ μν λΆλ΄
λ€μ μ§μΉ¨μ μ€ν λ¨κ³μ
λλ€. X11 μμΌμ Docker 컨ν
μ΄λμ 곡μ νλ©΄ μ μ¬μ μΈ λ³΄μ μνμ΄ λ°μν μ μμ΅λλ€. λ°λΌμ μ΄ μ루μ
μ ν΅μ λ νκ²½μμλ§ ν
μ€νΈνλ κ²μ΄ μ’μ΅λλ€. μμΈν λ΄μ©μ λ€μ μ¬μ© λ°©λ²μ λν 리μμ€λ₯Ό μ°Έμ‘°νμΈμ. xhost
(1)(2).
Dockerλ μ£Όλ‘ λ°±κ·ΈλΌμ΄λ μ ν리μΌμ΄μ κ³Ό CLI νλ‘κ·Έλ¨μ 컨ν μ΄λννλ λ° μ¬μ©λμ§λ§ κ·Έλν½ νλ‘κ·Έλ¨λ μ€νν μ μμ΅λλ€. Linux μΈκ³μμλ λ κ°μ§ μ£Όμ κ·Έλν½ μλ²κ° κ·Έλν½ λμ€νλ μ΄λ₯Ό μ²λ¦¬ν©λλ€: X11 (X Window μμ€ν μ΄λΌκ³ λ ν¨)κ³Ό Waylandμ λλ€. μμνκΈ° μ μ νμ¬ μ¬μ© μ€μΈ κ·Έλν½ μλ²λ₯Ό νμΈνλ κ²μ΄ μ€μν©λλ€. λ€μ λͺ λ Ήμ μ€ννμ¬ μμ보μΈμ:
X11 λλ Wayland λμ€νλ μ΄ μλ²μ μ€μ λ° κ΅¬μ±μ μ΄ κ°μ΄λμ λ²μλ₯Ό λ²μ΄λ©λλ€. μμ λͺ λ Ήμ΄ μ무κ²λ λ°ννμ§ μλλ€λ©΄ κ³μνκΈ° μ μ μμ€ν μμ μλνλ κ²λΆν° μμν΄μΌ ν©λλ€.
GUIλ‘ Docker 컨ν μ΄λ μ€ννκΈ°
μ
GPU μ¬μ©
If you're using [GPUs](#using-gpus), you can add the `--gpus all` flag to the command.
X11μ μ¬μ©νλ κ²½μ° λ€μ λͺ λ Ήμ μ€ννμ¬ Docker 컨ν μ΄λκ° X11 μμΌμ μ‘μΈμ€ν μ μλλ‘ νμ©ν μ μμ΅λλ€:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host $t
μ΄ λͺ
λ Ήμ DISPLAY
νκ²½ λ³μλ₯Ό νΈμ€νΈμ λμ€νλ μ΄μ 맀ννκ³ , X11 μμΌμ λ§μ΄νΈνκ³ , νΈμ€νΈμ λμ€νλ μ΄μ .Xauthority
νμΌμ 컨ν
μ΄λμ μΆκ°ν©λλ€. 컨ν
μ΄λμ xhost +local:docker
λͺ
λ ΉμΌλ‘ Docker 컨ν
μ΄λκ° X11 μλ²μ μ‘μΈμ€ν μ μμ΅λλ€.
Waylandμ κ²½μ° λ€μ λͺ λ Ήμ μ¬μ©ν©λλ€:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host $t
μ΄ λͺ
λ Ήμ DISPLAY
νκ²½ λ³μλ₯Ό νΈμ€νΈμ λμ€νλ μ΄μ μ€μ νκ³ , Wayland μμΌμ λ§μ΄νΈνκ³ , Docker 컨ν
μ΄λκ° Wayland μλ²μ μ‘μΈμ€ν μ μλλ‘ ν©λλ€.
GUIμ ν¨κ» Docker μ¬μ©
μ΄μ Docker 컨ν μ΄λ λ΄μμ κ·Έλν½ μ ν리μΌμ΄μ μ νμν μ μμ΅λλ€. μλ₯Ό λ€μ΄ λ€μ CLI λͺ λ Ήμ μ€ννμ¬ YOLO11 λͺ¨λΈμ μμΈ‘μ μκ°νν μ μμ΅λλ€:
ν μ€νΈ
Docker κ·Έλ£Ήμ΄ X11 μλ²μ μ‘μΈμ€ν μ μλμ§ νμΈνλ κ°λ¨ν λ°©λ²μ λ€μκ³Ό κ°μ GUI νλ‘κ·Έλ¨μΌλ‘ 컨ν
μ΄λλ₯Ό μ€ννλ κ²μ
λλ€. xclock
λλ xeyes
. λλ Ultralytics λ컀 컨ν
μ΄λμ μ΄λ¬ν νλ‘κ·Έλ¨μ μ€μΉνμ¬ GNU-Linux λμ€νλ μ΄ μλ²μ X11 μλ²μ λν μ‘μΈμ€λ₯Ό ν
μ€νΈν μλ μμ΅λλ€. λ¬Έμ κ° λ°μνλ©΄ νκ²½ λ³μλ₯Ό λ€μκ³Ό κ°μ΄ μ€μ ν΄ λ³΄μΈμ. -e QT_DEBUG_PLUGINS=1
. μ΄ νκ²½ λ³μλ₯Ό μ€μ νλ©΄ λλ²κΉ
μ 보λ₯Ό μΆλ ₯ν μ μμ΄ λ¬Έμ ν΄κ²° νλ‘μΈμ€μ λμμ΄ λ©λλ€.
Docker GUIλ₯Ό μλ£νλ©΄
μ‘μΈμ€ κΆν μ·¨μ
λ κ²½μ° λͺ¨λ μμ μ΄ λλλ©΄ Docker κ·Έλ£Ήμμ μ‘μΈμ€ κΆνμ μ·¨μνλ κ²μ μμ§ λ§μΈμ.
ν°λ―Έλμμ μ΄λ―Έμ§ κ²°κ³Όλ₯Ό λ°λ‘ νμΈνκ³ μΆμΌμ κ°μ?
λ¨λ§κΈ°λ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§ κ²°κ³Όλ₯Ό 보λ λ°©λ²μ λ€μ κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ.
μΆνν©λλ€! μ΄μ Dockerμμ Ultralytics μ μ¬μ©ν μ μλλ‘ μ€μ λμμΌλ©° κ°λ ₯ν κΈ°λ₯μ νμ©ν μ€λΉκ° λμμ΅λλ€. λ€λ₯Έ μ€μΉ λ°©λ²μ μμλ³΄λ €λ©΄ Ultralytics λΉ λ₯Έ μμ λ¬Έμλ₯Ό μ°Έμ‘°νμΈμ.
μμ£Ό 묻λ μ§λ¬Έ
Dockerμμ Ultralytics μ€μ μ μ΄λ»κ² νλμ?
Dockerλ‘ Ultralytics μ μ€μ νλ €λ©΄ λ¨Όμ μμ€ν μ Dockerκ° μ€μΉλμ΄ μλμ§ νμΈνμΈμ. NVIDIA GPU , NVIDIA Docker λ°νμμ μ€μΉνμ¬ GPU μ§μμ νμ±νν©λλ€. κ·Έλ° λ€μ λ€μ λͺ λ Ήμ μ¬μ©νμ¬ Docker Hubμμ μ΅μ Ultralytics Docker μ΄λ―Έμ§λ₯Ό κ°μ Έμ΅λλ€:
μμΈν λ¨κ³λ Docker λΉ λ₯Έ μμ κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ.
λ¨Έμ λ¬λ νλ‘μ νΈμ Ultralytics Docker μ΄λ―Έμ§λ₯Ό μ¬μ©νλ©΄ μ΄λ€ μ΄μ μ΄ μλμ?
Ultralytics λ컀 μ΄λ―Έμ§λ₯Ό μ¬μ©νλ©΄ μ¬λ¬ μ»΄ν¨ν°μμ λμΌν μννΈμ¨μ΄μ μ’
μμ±μ 볡μ νμ¬ μΌκ΄λ νκ²½μ 보μ₯ν μ μμ΅λλ€. μ΄λ ν κ° νμ
, λ€μν νλμ¨μ΄μμ λͺ¨λΈ μ€ν, μ¬νμ± μ μ§μ νΉν μ μ©ν©λλ€. GPU κΈ°λ° κ΅μ‘μ κ²½μ° Ultralytics μμ λ€μκ³Ό κ°μ μ΅μ νλ Docker μ΄λ―Έμ§λ₯Ό μ 곡ν©λλ€. Dockerfile
μΌλ°μ μΈ GPU μ¬μ© λ° Dockerfile-jetson
NVIDIA Jetson μ₯μΉμ©. νμ Ultralytics λ컀 νλΈ μμ μμΈν λ΄μ©μ νμΈνμΈμ.
GPU μ μ§μνλ Docker 컨ν μ΄λμμ Ultralytics YOLO μ μ€ννλ €λ©΄ μ΄λ»κ² ν΄μΌ νλμ?
λ¨Όμ NVIDIA Docker λ°νμμ΄ μ€μΉ λ° κ΅¬μ±λμλμ§ νμΈν©λλ€. κ·Έλ° λ€μ λ€μ λͺ λ Ήμ μ¬μ©νμ¬ GPU μ§μμΌλ‘ Ultralytics YOLO μ μ€νν©λλ€:
μ΄ λͺ λ Ήμ GPU μ‘μΈμ€ κΆνμ΄ μλ Docker 컨ν μ΄λλ₯Ό μ€μ ν©λλ€. μμΈν λ΄μ©μ Docker λΉ λ₯Έ μμ κ°μ΄λλ₯Ό μ°Έμ‘°νμΈμ.
λμ€νλ μ΄ μλ²κ° μλ Docker 컨ν μ΄λμμ YOLO μμΈ‘ κ²°κ³Όλ₯Ό μκ°ννλ €λ©΄ μ΄λ»κ² ν΄μΌ νλμ?
Docker 컨ν μ΄λμμ GUIλ₯Ό μ¬μ©νμ¬ YOLO μμΈ‘ κ²°κ³Όλ₯Ό μκ°ννλ €λ©΄ Dockerκ° λμ€νλ μ΄ μλ²μ μ‘μΈμ€ν μ μλλ‘ νμ©ν΄μΌ ν©λλ€. X11μ μ€ννλ μμ€ν μ κ²½μ° λͺ λ Ήμ λ€μκ³Ό κ°μ΅λλ€:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host ultralytics/ultralytics:latest
Waylandλ₯Ό μ€ννλ μμ€ν μμλ λ€μμ μ¬μ©ν©λλ€:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host ultralytics/ultralytics:latest
μμΈν λ΄μ©μ Docker 컨ν μ΄λ μΉμ μ GUI(κ·Έλν½ μ¬μ©μ μΈν°νμ΄μ€) μ ν리μΌμ΄μ μ€νμμ νμΈν μ μμ΅λλ€.
λ‘컬 λλ ν°λ¦¬λ₯Ό Ultralytics Docker 컨ν μ΄λμ λ§μ΄νΈν μ μλμ?
μ, λ‘컬 λλ ν°λ¦¬λ₯Ό Ultralytics λ컀 컨ν
μ΄λμ λ§μ΄νΈν μ μμ΅λλ€. -v
νλκ·Έ:
sudo docker run -it --ipc=host --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest
κ΅μ²΄ /path/on/host
λ₯Ό λ‘컬 μ»΄ν¨ν°μ λλ ν°λ¦¬μ /path/in/container
λ₯Ό 컨ν
μ΄λ λ΄λΆμ μνλ κ²½λ‘λ‘ μ€μ ν©λλ€. μ΄ μ€μ μ μ¬μ©νλ©΄ 컨ν
μ΄λ λ΄μμ λ‘컬 νμΌλ‘ μμ
ν μ μμ΅λλ€. μμΈν λ΄μ©μ λ€μμ κ΄λ ¨ μΉμ
μ μ°Έμ‘°νμΈμ. λ‘컬 λλ ν 리 λ§μ΄νΈ.