Link to this sectionDocker-Schnellstartanleitung für Ultralytics#
Dieser Leitfaden dient als umfassende Einführung in die Einrichtung einer Docker-Umgebung für deine Ultralytics-Projekte. Docker ist eine Plattform zum Entwickeln, Versenden und Ausführen von Anwendungen in Containern. Sie ist besonders vorteilhaft, um sicherzustellen, dass die Software immer gleich läuft, unabhängig davon, wo sie bereitgestellt wird. Weitere Details findest du im Ultralytics Docker-Repository auf Docker Hub.
Link to this sectionWas du lernen wirst#
- Docker mit NVIDIA-Unterstützung einrichten
- Ultralytics Docker-Images installieren
- Ultralytics in einem Docker-Container mit CPU- oder GPU-Unterstützung ausführen
- Verwendung eines Display-Servers mit Docker zur Anzeige von Ultralytics-Erkennungsergebnissen
- Lokale Verzeichnisse in den Container einbinden
Watch: How to Get started with Docker | Usage of Ultralytics Python Package inside Docker live demo 🎉
Link to this sectionVoraussetzungen#
- Stelle sicher, dass Docker auf deinem System installiert ist. Falls nicht, kannst du es von der Docker-Website herunterladen und installieren.
- Für GPU-Beschleunigung stelle sicher, dass dein System über eine NVIDIA GPU verfügt und NVIDIA-Treiber installiert sind. CPU-Images erfordern keine NVIDIA-Hardware.
- Wenn du NVIDIA Jetson Geräte verwendest, stelle sicher, dass die entsprechende JetPack Version installiert ist. Weitere Details findest du im NVIDIA Jetson guide.
Link to this sectionDocker mit NVIDIA-Unterstützung einrichten (Optional)#
Überprüfe zunächst, ob die NVIDIA-Treiber ordnungsgemäß installiert sind, indem du Folgendes ausführst:
nvidia-smiLink to this sectionNVIDIA Container Toolkit installieren#
Installiere nun das NVIDIA Container Toolkit, um die GPU-Unterstützung in Docker-Containern zu aktivieren:
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.listAktualisiere die Paketlisten und installiere das NVIDIA Container Toolkit:
sudo apt-get updatesudo apt-get install -y nvidia-container-toolkitLink to this sectionÜberprüfe CDI-Geräte mit Docker#
Führe nvidia-ctk cdi list aus, um sicherzustellen, dass die GPU CDI-Geräte verfügbar sind (der nvidia-cdi-refresh-Dienst des Toolkits generiert und verwaltet die Spezifikation automatisch ab Toolkit-Version >= 1.18):
nvidia-ctk cdi listDu solltest Einträge wie nvidia.com/gpu=0 und nvidia.com/gpu=all sehen. Gefundene CDI-Geräte erscheinen auch in docker info.
Link to this sectionUltralytics Docker-Images installieren#
Ultralytics veröffentlicht die folgenden Images auf Docker Hub. Jedes Image wird aus seinem verknüpften Dockerfile durch den Docker-Publishing-Workflow erstellt.
| Tag | Plattform und Zweck | Quelle |
|---|---|---|
latest | Linux AMD64 mit CUDA für GPU-Training und -Inferenz | Dockerfile |
latest-export | Linux AMD64 mit CUDA und Export-Abhängigkeiten für Konvertierung und Benchmarking | Dockerfile-export |
latest-python | Leichtgewichtiges Linux AMD64 Python-Image für CPU-Inferenz | Dockerfile-python |
latest-python-export | Linux AMD64 CPU-Image mit Export-Abhängigkeiten | Dockerfile-python-export |
latest-cpu | Linux AMD64 CPU-Image mit Bash als Standardbefehl | Dockerfile-cpu |
latest-jupyter | Linux AMD64 CPU-Image mit JupyterLab und Ultralytics-Tutorial-Notebooks | Dockerfile-jupyter |
latest-arm64 | Linux ARM64 CPU-Image für Apple Silicon, Raspberry Pi und andere ARM64-Systeme | Dockerfile-arm64 |
latest-nvidia-arm64 | Linux ARM64 mit NVIDIA GPU-Unterstützung für Jetson AGX Thor, DGX Spark, JetPack 7 und DGX OS | Dockerfile-nvidia-arm64 |
latest-jetson-jetpack6 | Linux ARM64 für NVIDIA Jetson-Geräte mit JetPack 6 | Dockerfile-jetson-jetpack6 |
latest-jetson-jetpack5 | Linux ARM64 für NVIDIA Jetson-Geräte mit JetPack 5 | Dockerfile-jetson-jetpack5 |
latest-jetson-jetpack4 | Linux ARM64 für NVIDIA Jetson-Geräte mit JetPack 4 | Dockerfile-jetson-jetpack4 |
latest-runner | Linux AMD64 CUDA-Image für einen selbstgehosteten GitHub Actions GPU-Runner | Dockerfile-runner |
latest-runner-cpu | Linux AMD64-Image für einen selbstgehosteten GitHub Actions CPU-Runner | Dockerfile-runner-cpu |
Tags, die mit latest beginnen, verfolgen den zuletzt veröffentlichten Build des Hauptzweigs. Versions-Tags ersetzen das latest-Präfix durch ein Ultralytics-Release, wie VERSION, VERSION-cpu oder VERSION-jetson-jetpack6. Verwende ein Versions-Tag für eine reproduzierbare Umgebung.
Um das neueste Image zu pullen:
# Pull the latest Ultralytics image from Docker Hub
sudo docker pull ultralytics/ultralytics:latestLink to this sectionAusführen von Ultralytics in einem Docker-Container#
So führst du den Ultralytics Docker-Container aus:
Link to this sectionNur mit CPU#
# Run without GPU
sudo docker run -it --ipc=host ultralytics/ultralytics:latest-cpuLink to this sectionMit GPUs#
# Run with all GPUs
sudo docker run -it --ipc=host --device nvidia.com/gpu=all ultralytics/ultralytics:latest
# Run specifying which GPUs to use
sudo docker run -it --ipc=host --device nvidia.com/gpu=2 --device nvidia.com/gpu=3 ultralytics/ultralytics:latestDas -it-Flag weist ein Pseudo-TTY zu und hält stdin offen, wodurch du mit dem Container interagieren kannst. Das --ipc=host-Flag ermöglicht die gemeinsame Nutzung des IPC-Namensraums des Hosts, was für das Teilen von Speicher zwischen Prozessen unerlässlich ist. Das --device nvidia.com/gpu=...-Flag gewährt dem Container über CDI Zugriff auf die GPUs des Hosts.
Unter Linux erfordern CDI-Geräteanfragen Docker >= 28.2.0 (CDI standardmäßig aktiviert) und nvidia-container-toolkit >= 1.18 (automatische Generierung der CDI-Spezifikation). Aktualisiere ältere Linux-Hosts, bevor du GPU-Container ausführst. Das Legacy-Flag --gpus all kann den GPU-Zugriff verlieren (Failed to initialize NVML: Unknown Error), wenn der Host während routinemäßiger Paketupdates systemd neu lädt (nvidia-container-toolkit#48). CDI --device-Anfragen schließen die Geräteknoten in die Containerkonfiguration ein, sodass lang laufende Container wie Trainings-Worker oder CI-Runner den GPU-Zugriff auch nach einem Neustart behalten.
Docker Desktop GPU-Unterstützung unter Windows verwendet derzeit --gpus all mit dem WSL 2-Backend, da dort keine NVIDIA CDI-Geräte verfügbar sind. Windows verwendet kein Linux systemd, daher trifft der oben genannte Fehler beim daemon-reload nicht zu.
Link to this sectionHinweis zur Dateizugänglichkeit#
Um mit Dateien auf deinem lokalen Computer innerhalb des Containers zu arbeiten, kannst du Docker-Volumes verwenden:
# Mount a local directory into the container
sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container ultralytics/ultralytics:latestErsetze /path/on/host durch den Verzeichnispfad auf deinem lokalen Computer und /path/in/container durch den gewünschten Pfad innerhalb des Docker-Containers.
Link to this sectionTrainingsergebnisse persistent speichern#
Trainingsergebnisse werden standardmäßig unter /ultralytics/runs/<task>/<name>/ innerhalb des Containers gespeichert. Ohne Einbindung eines Host-Verzeichnisses gehen die Ergebnisse verloren, wenn der Container entfernt wird.
So speicherst du Trainingsergebnisse persistent:
# Recommended: mount workspace and specify project path
sudo docker run --rm -it -v "$(pwd)":/w -w /w ultralytics/ultralytics:latest \
yolo train model=yolo26n.pt data=coco8.yaml project=/w/runsDies speichert alle Trainingsergebnisse in ./runs auf deinem Host-Computer.
Link to this sectionGrafische Benutzeroberflächen (GUI) in einem Docker-Container ausführen#
Die folgenden Anweisungen sind experimentell. Das Teilen eines X11-Sockets mit einem Docker-Container birgt potenzielle Sicherheitsrisiken. Daher wird empfohlen, diese Lösung nur in einer kontrollierten Umgebung zu testen. Weitere Informationen findest du in diesen Ressourcen zur Verwendung von xhost(1)(2).
Docker wird hauptsächlich zum Containerisieren von Hintergrundanwendungen und CLI-Programmen verwendet, kann aber auch grafische Programme ausführen. In der Linux-Welt gibt es zwei Haupt-Grafikserver für die grafische Anzeige: X11 (auch bekannt als X Window System) und Wayland. Vor dem Start ist es wichtig zu bestimmen, welchen Grafikserver du aktuell verwendest. Führe diesen Befehl aus, um es herauszufinden:
env | grep -E -i 'x11|xorg|wayland'Die Einrichtung und Konfiguration eines X11- oder Wayland-Display-Servers liegt außerhalb des Geltungsbereichs dieses Leitfadens. Wenn der obige Befehl nichts zurückgibt, musst du zuerst sicherstellen, dass einer der beiden für dein System funktioniert, bevor du fortfährst.
Link to this sectionEinen Docker-Container mit einer GUI ausführen#
GPUs verwenden
Wenn du GPUs verwendest, kannst du das --device nvidia.com/gpu=all-Flag zum Befehl hinzufügen.
Wenn du X11 verwendest, kannst du den folgenden Befehl ausführen, um dem Docker-Container den Zugriff auf den X11-Socket zu ermöglichen:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host ultralytics/ultralytics:latestDieser Befehl setzt die DISPLAY-Umgebungsvariable auf das Display des Hosts, bindet den X11-Socket ein und ordnet die .Xauthority-Datei dem Container zu. Der xhost +local:docker-Befehl erlaubt dem Docker-Container den Zugriff auf den X11-Server.
Link to this sectionDocker mit einer GUI verwenden#
Jetzt kannst du grafische Anwendungen in deinem Docker-Container anzeigen. Du kannst zum Beispiel den folgenden CLI-Befehl ausführen, um die Vorhersagen eines YOLO26-Modells zu visualisieren:
yolo predict model=yolo26n.pt show=TrueTesten
Ein einfacher Weg, um zu validieren, dass die Docker-Gruppe Zugriff auf den X11-Server hat, ist das Ausführen eines Containers mit einem GUI-Programm wie xclock oder xeyes. Alternativ kannst du diese Programme auch im Ultralytics Docker-Container installieren, um den Zugriff auf den X11-Server deines GNU-Linux-Displayservers zu testen. Falls du auf Probleme stößt, ziehe in Betracht, die Umgebungsvariable -e QT_DEBUG_PLUGINS=1 zu setzen. Das Setzen dieser Umgebungsvariable ermöglicht die Ausgabe von Debugging-Informationen, was bei der Fehlerbehebung hilft.
Link to this sectionWenn du mit Docker-GUI fertig bist#
Vergiss in beiden Fällen nicht, den Zugriff der Docker-Gruppe zu widerrufen, wenn du fertig bist.
xhost -local:dockerMöchtest du Bild-Ergebnisse direkt im Terminal anzeigen?
Siehe dazu den folgenden Leitfaden zum Anzeigen der Bild-Ergebnisse über ein Terminal
Du bist nun bereit, Ultralytics mit Docker zu verwenden und die Vorteile der Funktionen zu nutzen. Um die Ultralytics-Webanwendung selbst zu hosten, siehe den Plattform On-Premise-Leitfaden. Für alternative Installationsmethoden des Python-Pakets siehe die Ultralytics-Schnellstartdokumentation.
Link to this sectionFAQ#
Link to this sectionWie richte ich Ultralytics mit Docker ein?#
Um Ultralytics mit Docker einzurichten, stelle zuerst sicher, dass Docker auf deinem System installiert ist. Wenn du eine NVIDIA GPU hast, installiere das NVIDIA Container Toolkit, um die GPU-Unterstützung zu aktivieren. Ziehe dann das neueste Ultralytics Docker-Image von Docker Hub mit dem folgenden Befehl:
sudo docker pull ultralytics/ultralytics:latestDetaillierte Schritte findest du in unserer Docker-Schnellstartanleitung.
Link to this sectionWas sind die Vorteile der Verwendung von Ultralytics Docker-Images für Machine-Learning-Projekte?#
Die Verwendung von Ultralytics Docker-Images gewährleistet eine konsistente Umgebung über verschiedene Maschinen hinweg und repliziert dieselbe Software und Abhängigkeiten. Dies ist besonders nützlich für die Zusammenarbeit in Teams, das Ausführen von Modellen auf verschiedener Hardware und die Wahrung der Reproduzierbarkeit. Verwende latest für allgemeines NVIDIA GPU-Training oder wähle das Image, das deiner JetPack-Version für ein NVIDIA Jetson-Gerät entspricht. Siehe die vollständige Image-Tabelle oder erkunde Ultralytics Docker Hub.
Link to this sectionWie kann ich Ultralytics YOLO in einem Docker-Container mit GPU-Unterstützung ausführen?#
Stelle zuerst sicher, dass das NVIDIA Container Toolkit installiert und konfiguriert ist. Verwende dann den folgenden Befehl, um Ultralytics YOLO mit GPU-Unterstützung auszuführen:
sudo docker run -it --ipc=host --device nvidia.com/gpu=all ultralytics/ultralytics:latest # all GPUsDieser Befehl richtet einen Docker-Container mit GPU-Zugriff ein. Weitere Einzelheiten findest du in der Docker-Schnellstartanleitung.
Link to this sectionWie visualisiere ich YOLO-Vorhersageergebnisse in einem Docker-Container mit einem Display-Server?#
Um YOLO-Vorhersageergebnisse mit einer GUI in einem Docker-Container zu visualisieren, musst du Docker den Zugriff auf deinen Display-Server gestatten. Für Systeme mit X11 lautet der Befehl:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ~/.Xauthority:/root/.Xauthority \
-it --ipc=host ultralytics/ultralytics:latestFür Systeme, die Wayland ausführen, verwende:
xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host ultralytics/ultralytics:latestWeitere Informationen findest du im Abschnitt Grafische Benutzeroberflächen (GUI) in einem Docker-Container ausführen.
Link to this sectionKann ich lokale Verzeichnisse in den Ultralytics Docker-Container einbinden?#
Ja, du kannst lokale Verzeichnisse mit dem -v-Flag in den Ultralytics Docker-Container einbinden:
sudo docker run -it --ipc=host --device nvidia.com/gpu=all -v /path/on/host:/path/in/container ultralytics/ultralytics:latestErsetze /path/on/host durch das Verzeichnis auf deinem lokalen Computer und /path/in/container durch den gewünschten Pfad innerhalb des Containers. Diese Einrichtung ermöglicht es dir, innerhalb des Containers mit deinen lokalen Dateien zu arbeiten. Weitere Informationen findest du im Abschnitt Hinweis zur Dateizugänglichkeit.