Guide de démarrage rapide de Docker pour Ultralytics

Ultralytics Docker Package Visual

Ce guide sert d'introduction complète à la configuration d'un environnement Docker pour tes projets Ultralytics. Docker est une plateforme permettant de développer, de livrer et d'exécuter des applications dans des conteneurs. Elle est particulièrement avantageuse pour garantir que le logiciel s'exécutera toujours de la même manière, quel que soit l'endroit où il est déployé. Pour plus de détails, visite le dépôt Docker Ultralytics sur Docker Hub.

Docker Image Version Docker Pulls

Ce que tu vas apprendre

  • Configuration de Docker avec la prise en charge NVIDIA
  • Installation des images Docker d'Ultralytics
  • Exécution d'Ultralytics dans un conteneur Docker avec prise en charge CPU ou GPU
  • Utilisation d'un serveur d'affichage avec Docker pour afficher les résultats de détection Ultralytics
  • Montage de répertoires locaux dans le conteneur


Watch: How to Get started with Docker | Usage of Ultralytics Python Package inside Docker live demo 🎉

Prérequis

  • Assure-toi que Docker est installé sur ton système. Si ce n'est pas le cas, tu peux le télécharger et l'installer depuis le site Web de Docker.
  • Assure-toi que ton système dispose d'un GPU NVIDIA et que les pilotes NVIDIA sont installés.
  • Si tu utilises des appareils NVIDIA Jetson, assure-toi d'avoir installé la version appropriée de JetPack. Consulte le guide NVIDIA Jetson pour plus de détails.

Configuration de Docker avec la prise en charge NVIDIA

Tout d'abord, vérifie que les pilotes NVIDIA sont correctement installés en exécutant :

nvidia-smi

Installation de NVIDIA Container Toolkit

Maintenant, installons le NVIDIA Container Toolkit pour activer la prise en charge GPU dans les conteneurs Docker :

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

Mets à jour les listes de paquets et installe le paquet nvidia-container-toolkit :

sudo apt-get update

Installe la dernière version de nvidia-container-toolkit :

sudo apt-get install -y nvidia-container-toolkit \
  nvidia-container-toolkit-base libnvidia-container-tools \
  libnvidia-container1
Optionnel : Installer une version spécifique de nvidia-container-toolkit

Tu peux éventuellement installer une version spécifique du nvidia-container-toolkit en définissant la variable d'environnement NVIDIA_CONTAINER_TOOLKIT_VERSION :

export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1
sudo apt-get install -y \
  nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

Vérification du runtime NVIDIA avec Docker

Exécute docker info | grep -i runtime pour t'assurer que nvidia apparaît dans la liste des runtimes :

docker info | grep -i runtime

Installation des images Docker d'Ultralytics

Ultralytics propose plusieurs images Docker optimisées pour diverses plateformes et cas d'utilisation :

  • Dockerfile : image GPU, idéale pour l'entraînement.
  • Dockerfile-arm64 : pour l'architecture ARM64, adaptée aux appareils comme Raspberry Pi.
  • Dockerfile-cpu : version CPU uniquement pour l'inférence et les environnements sans GPU.
  • Dockerfile-jetson-jetpack4 : optimisée pour les appareils NVIDIA Jetson exécutant NVIDIA JetPack 4.
  • Dockerfile-jetson-jetpack5 : optimisée pour les appareils NVIDIA Jetson exécutant NVIDIA JetPack 5.
  • Dockerfile-jetson-jetpack6 : optimisée pour les appareils NVIDIA Jetson exécutant NVIDIA JetPack 6.
  • Dockerfile-jupyter : pour le développement interactif à l'aide de JupyterLab dans le navigateur.
  • Dockerfile-nvidia-arm64 : pour les appareils NVIDIA ARM64 tels que Jetson AGX Thor et DGX Spark, prenant en charge JetPack 7.0 et DGX OS.
  • Dockerfile-python : environnement Python minimal pour les applications légères.
  • Dockerfile-python-export : image Python minimale étendue avec des capacités d'exportation complètes pour la conversion de modèles YOLO.
  • Dockerfile-conda : inclut Miniconda3 et le package Ultralytics installé via Conda.
  • Dockerfile-export : image GPU avec toutes les dépendances de format d'exportation préinstallées pour la conversion et l'évaluation de modèles.

Pour extraire la dernière image :

# Set image name as a variable
t=ultralytics/ultralytics:latest

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

Exécution d'Ultralytics dans un conteneur Docker

Voici comment exécuter le conteneur Docker Ultralytics :

Utilisation uniquement du CPU

# Run without GPU
sudo docker run -it --ipc=host $t

Utilisation des GPU

# Run with all GPUs
sudo docker run -it --ipc=host --runtime=nvidia --gpus all $t

# Run specifying which GPUs to use
sudo docker run -it --ipc=host --runtime=nvidia --gpus '"device=2,3"' $t

L'indicateur -it attribue un pseudo-TTY et maintient stdin ouvert, te permettant d'interagir avec le conteneur. L'indicateur --ipc=host permet le partage de l'espace de noms IPC de l'hôte, essentiel pour partager la mémoire entre les processus. L'indicateur --gpus permet au conteneur d'accéder aux GPU de l'hôte.

Note sur l'accessibilité des fichiers

Pour travailler avec des fichiers sur ta machine locale à l'intérieur du conteneur, tu peux utiliser des volumes Docker :

# Mount a local directory into the container
sudo docker run -it --ipc=host --runtime=nvidia --gpus all -v /path/on/host:/path/in/container $t

Remplace /path/on/host par le chemin du répertoire sur ta machine locale et /path/in/container par le chemin souhaité à l'intérieur du conteneur Docker.

Persistance des résultats d'entraînement

Les résultats d'entraînement sont enregistrés par défaut dans /ultralytics/runs/<task>/<name>/ à l'intérieur du conteneur. Sans montage d'un répertoire hôte, les résultats sont perdus lorsque le conteneur est supprimé.

Pour conserver les résultats d'entraînement :

# 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/runs

Cela enregistre tous les résultats d'entraînement dans ./runs sur ta machine hôte.

Exécuter des applications d'interface utilisateur graphique (GUI) dans un conteneur Docker

Hautement expérimental - L'utilisateur assume tous les risques

Les instructions suivantes sont expérimentales. Le partage d'un socket X11 avec un conteneur Docker présente des risques de sécurité potentiels. Par conséquent, il est recommandé de tester cette solution uniquement dans un environnement contrôlé. Pour plus d'informations, reporte-toi à ces ressources sur la façon d'utiliser xhost(1)(2).

Docker est principalement utilisé pour conteneuriser des applications en arrière-plan et des programmes CLI, mais il peut également exécuter des programmes graphiques. Dans le monde Linux, deux serveurs graphiques principaux gèrent l'affichage graphique : X11 (également connu sous le nom de X Window System) et Wayland. Avant de commencer, il est essentiel de déterminer quel serveur graphique tu utilises actuellement. Exécute cette commande pour le découvrir :

env | grep -E -i 'x11|xorg|wayland'

L'installation et la configuration d'un serveur d'affichage X11 ou Wayland sortent du cadre de ce guide. Si la commande ci-dessus ne renvoie rien, tu devras commencer par faire fonctionner l'un ou l'autre pour ton système avant de continuer.

Exécution d'un conteneur Docker avec une GUI

Exemple
Utiliser des GPU

Si tu utilises des GPU, tu peux ajouter l'indicateur --gpus all à la commande.

Indicateur de runtime Docker

Si ton installation Docker n'utilise pas le runtime nvidia par défaut, tu peux ajouter l'indicateur --runtime=nvidia à la commande.

Si tu utilises X11, tu peux exécuter la commande suivante pour autoriser le conteneur Docker à accéder au socket X11 :

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v ~/.Xauthority:/root/.Xauthority \
  -it --ipc=host $t

Cette commande définit la variable d'environnement DISPLAY sur l'affichage de l'hôte, monte le socket X11 et mappe le fichier .Xauthority sur le conteneur. La commande xhost +local:docker autorise le conteneur Docker à accéder au serveur X11.

Utilisation de Docker avec une GUI

Maintenant, tu peux afficher des applications graphiques à l'intérieur de ton conteneur Docker. Par exemple, tu peux exécuter la commande CLI suivante pour visualiser les prédictions d'un modèle YOLO26 :

yolo predict model=yolo26n.pt show=True
Test

Un moyen simple de valider que le groupe Docker a accès au serveur X11 est d'exécuter un conteneur avec un programme GUI comme xclock ou xeyes. Alternativement, tu peux aussi installer ces programmes dans le conteneur Docker Ultralytics pour tester l'accès au serveur X11 de ton serveur d'affichage GNU-Linux. Si tu rencontres des problèmes, envisage de définir la variable d'environnement -e QT_DEBUG_PLUGINS=1. Définir cette variable d'environnement active la sortie des informations de débogage, facilitant le processus de dépannage.

Une fois terminé avec la GUI Docker

Révoquer l'accès

Dans les deux cas, n'oublie pas de révoquer l'accès du groupe Docker lorsque tu as terminé.

xhost -local:docker
Tu souhaites visualiser les résultats d'image directement dans le terminal ?

Tu es maintenant prêt à utiliser Ultralytics avec Docker et prêt à tirer parti de ses capacités. Pour d'autres méthodes d'installation, consulte la documentation de démarrage rapide d'Ultralytics.

FAQ

Comment configurer Ultralytics avec Docker ?

Pour configurer Ultralytics avec Docker, assure-toi d'abord que Docker est installé sur ton système. Si tu as un GPU NVIDIA, installe le NVIDIA Container Toolkit pour activer la prise en charge GPU. Ensuite, extrait la dernière image Docker Ultralytics depuis Docker Hub en utilisant la commande suivante :

sudo docker pull ultralytics/ultralytics:latest

Pour des étapes détaillées, reporte-toi à notre guide de démarrage rapide Docker.

Quels sont les avantages d'utiliser les images Docker Ultralytics pour les projets de machine learning ?

L'utilisation des images Docker Ultralytics garantit un environnement cohérent sur différentes machines, reproduisant les mêmes logiciels et dépendances. Ceci est particulièrement utile pour collaborer entre équipes, exécuter des modèles sur divers matériels et maintenir la reproductibilité. Pour l'entraînement basé sur GPU, Ultralytics fournit des images Docker optimisées telles que Dockerfile pour une utilisation générale du GPU et Dockerfile-jetson pour les appareils NVIDIA Jetson. Explore Ultralytics Docker Hub pour plus de détails.

Comment exécuter Ultralytics YOLO dans un conteneur Docker avec prise en charge GPU ?

Tout d'abord, assure-toi que le NVIDIA Container Toolkit est installé et configuré. Ensuite, utilise la commande suivante pour exécuter Ultralytics YOLO avec la prise en charge GPU :

sudo docker run -it --ipc=host --runtime=nvidia --gpus all ultralytics/ultralytics:latest # all GPUs

Cette commande configure un conteneur Docker avec accès GPU. Pour des détails supplémentaires, consulte le guide de démarrage rapide Docker.

Comment visualiser les résultats de prédiction YOLO dans un conteneur Docker avec un serveur d'affichage ?

Pour visualiser les résultats de prédiction YOLO avec une GUI dans un conteneur Docker, tu dois autoriser Docker à accéder à ton serveur d'affichage. Pour les systèmes exécutant X11, la commande est :

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

Pour les systèmes exécutant Wayland, utilise :

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

Plus d'informations peuvent être trouvées dans la section Exécuter des applications d'interface utilisateur graphique (GUI) dans un conteneur Docker.

Puis-je monter des répertoires locaux dans le conteneur Docker Ultralytics ?

Oui, tu peux monter des répertoires locaux dans le conteneur Docker Ultralytics en utilisant l'indicateur -v :

sudo docker run -it --ipc=host --runtime=nvidia --gpus all -v /path/on/host:/path/in/container ultralytics/ultralytics:latest

Remplace /path/on/host par le répertoire sur ta machine locale et /path/in/container par le chemin souhaité à l'intérieur du conteneur. Cette configuration te permet de travailler avec tes fichiers locaux à l'intérieur du conteneur. Pour plus d'informations, reporte-toi à la section Note sur l'accessibilité des fichiers.

Commentaires