Skip to content

Guide de démarrage rapide de Docker pour Ultralytics

Ultralytics Docker Package Visual

Ce guide sert d'introduction complète à la mise en place d'un environnement Docker pour tes projets Ultralytics . Docker est une plateforme qui permet de développer, d'expédier et d'exécuter des applications dans des conteneurs. Elle est particulièrement bénéfique pour s'assurer que le logiciel fonctionnera 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.

Version de l'image Docker Les tirages de Docker

Ce que tu apprendras

  • Configuration de Docker avec prise en charge de NVIDIA
  • Installation de Ultralytics Images Docker
  • ExĂ©cuter Ultralytics dans un conteneur Docker avec le support de CPU ou GPU .
  • Utilisation d'un serveur d'affichage avec Docker pour afficher les rĂ©sultats de la dĂ©tection de Ultralytics .
  • Montage des rĂ©pertoires locaux dans le conteneur

Conditions préalables

  • 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 Ă  partir du site web de Docker.
  • Assure-toi que ton système dispose d'un NVIDIA GPU et que les pilotes NVIDIA sont installĂ©s.

Configuration de Docker avec NVIDIA Support

Tout d'abord, vérifie que les pilotes NVIDIA sont correctement installés en lançant :

nvidia-smi

Installation de NVIDIA Docker Runtime

Maintenant, installons le runtime Docker NVIDIA pour activer la prise en charge de GPU dans les conteneurs 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

VĂ©rifier NVIDIA Runtime avec Docker

Exécuter docker info | grep -i runtime pour s'assurer que nvidia apparaît dans la liste des durées d'exécution :

docker info | grep -i runtime

Installation de Ultralytics Images Docker

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

  • Dockerfile : image GPU , idĂ©ale pour la formation.
  • Dockerfile-arm64 : Pour l'architecture ARM64, adaptĂ©e aux appareils comme le Raspberry Pi.
  • Dockerfile-cpu: CPU-version uniquement pour les environnements d'infĂ©rence et nonGPU .
  • Dockerfile-jetson : OptimisĂ© pour les appareils NVIDIA Jetson.
  • Dockerfile-python: Environnement minimal Python pour les applications lĂ©gères.
  • Dockerfile-conda : inclut le paquet Miniconda3 et Ultralytics installĂ© via Conda.

Pour obtenir 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écuter Ultralytics dans un conteneur Docker

Voici comment exécuter le conteneur Docker Ultralytics :

En utilisant uniquement le CPU

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

Utilisation des 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

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

Exécuter Ultralytics dans un conteneur Docker

Voici comment exécuter le conteneur Docker Ultralytics :

En utilisant uniquement le CPU

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

Utilisation des 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

Le -it attribue un pseudo-TTY et garde stdin ouvert, ce qui te permet d'interagir avec le conteneur. L'indicateur --ipc=host permet de partager l'espace de noms IPC de l'hôte, ce qui est 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 au sein du conteneur, tu peux utiliser les volumes Docker :

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

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

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

Très 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 potentiels pour la sécurité. Il est donc recommandé de tester cette solution uniquement dans un environnement contrôlé. Pour plus d'informations, reporte-toi à ces ressources sur l'utilisation de xhost(1)(2).

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

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, alors tu devras commencer par faire fonctionner l'un ou l'autre pour ton système avant de continuer.

Exécuter un conteneur Docker avec une interface graphique

Exemple

Utilise les GPU
If you're using [GPUs](#using-gpus), you can add the `--gpus all` flag to the command.

Si tu utilises X11, tu peux exécuter la commande suivante pour permettre au conteneur Docker d'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 le DISPLAY à l'écran de l'hôte, monte le socket X11 et fait correspondre la variable d'environnement .Xauthority au conteneur. Le xhost +local:docker La commande permet au conteneur Docker d'accéder au serveur X11.

Pour Wayland, utilise la commande suivante :

xhost +local:docker && docker run -e DISPLAY=$DISPLAY \
-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \
--net=host -it --ipc=host $t

Cette commande définit le DISPLAY variable d'environnement à l'affichage de l'hôte, monte le socket Wayland et permet au conteneur Docker d'accéder au serveur Wayland.

Utiliser Docker avec une interface graphique

Tu peux maintenant afficher des applications graphiques à l'intérieur de ton conteneur Docker. Par exemple, tu peux exécuter la commandeCLI suivante pour visualiser les prédictions d'un modèleYOLOv8 :

yolo predict model=yolov8n.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 d'interface graphique tel que. xclock ou xeyes. 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, pense à définir la variable d'environnement -e QT_DEBUG_PLUGINS=1. La définition de cette variable d'environnement permet la sortie d'informations de débogage, ce qui facilite le processus de dépannage.

Lorsque tu as terminé avec l'interface graphique de 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 veux voir les résultats des images directement dans le terminal ?

Reporte-toi au guide suivant pour visualiser les résultats de l'image à l'aide d'un terminal.


Félicitations ! Tu es maintenant configuré pour utiliser Ultralytics avec Docker et prêt à profiter de ses puissantes capacités. Pour connaître d'autres méthodes d'installation, n'hésite pas à explorer la documentation de démarrage rapide deUltralytics .

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 NVIDIA GPU , installe le runtime Docker NVIDIA pour activer la prise en charge de GPU . Ensuite, tire la dernière image Docker Ultralytics depuis Docker Hub à l'aide de la commande suivante :

sudo docker pull ultralytics/ultralytics:latest

Pour connaître les étapes détaillées, reporte-toi à notre guide de démarrage rapide de Docker.

Quels sont les avantages de l'utilisation des images Docker Ultralytics pour les projets d'apprentissage automatique ?

L'utilisation de Ultralytics images Docker garantit un environnement cohérent sur différentes machines, en répliquant les mêmes logiciels et dépendances. Cela est particulièrement utile pour collaborer entre équipes, exécuter des modèles sur différents matériels et maintenir la reproductibilité. Pour les formations basées sur GPU, Ultralytics fournit des images Docker optimisées telles que Dockerfile pour l'utilisation générale de GPU et Dockerfile-jetson pour NVIDIA Jetson devices. Explorer Ultralytics Hub Docker pour plus de détails.

Comment puis-je exécuter Ultralytics YOLO dans un conteneur Docker avec la prise en charge de GPU ?

Tout d'abord, assure-toi que le runtime Docker NVIDIA est installé et configuré. Ensuite, utilise la commande suivante pour exécuter Ultralytics YOLO avec le soutien de GPU :

sudo docker run -it --ipc=host --gpus all ultralytics/ultralytics:latest

Cette commande configure un conteneur Docker avec un accès à GPU . Pour plus de détails, voir le guide de démarrage rapide de Docker.

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

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

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 utilisant 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

Tu trouveras plus d'informations dans la section Exécuter des applications d'interface graphique 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 à l'aide de la commande -v drapeau :

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

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



Créé le 2023-11-12, Mis à jour le 2024-07-05
Auteurs : glenn-jocher (7), Burhan-Q (1), jpedrofonseca_94@hotmail.com (1)

Commentaires