For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/ai-machine-learning/ai-training-build-use-custom-image.md.

AI Training - Tutoriel - Construire & utiliser une image Docker personnalisée

Voir en Markdown

Comment construire et utiliser votre propre image Docker

Objectif

Ce tutoriel couvre le processus de construction de votre propre image de job pour des besoins spécifiques.

Prérequis

Aperçu rapide

AI Training vous permet d'entraîner vos modèles facilement, en quelques clics ou quelques commandes. Cette solution exécute votre job d'entraînement sur des ressources de calcul telles que des CPUs ou des GPUs. Dès que votre job d'entraînement est terminé, la facturation s'arrête immédiatement. Vous gagnez ainsi du temps et augmentez la productivité de votre équipe, tout en respectant l'intégrité de vos données sensibles (RGPD).

Pour pouvoir être lancé, votre job AI Training doit être conteneurisé dans une image Docker. Les containers offrent isolation et flexibilité. Les images Docker que vous construisez peuvent être utilisées localement, avec OVHcloud AI Training, mais aussi avec d'autres fournisseurs cloud.

Dans votre image Docker, vous êtes libre d'installer presque tout ce que vous voulez, à condition de suivre les recommandations ci-dessous.

AI Training accepte les images provenant de dépôts publics ou privés. Retrouvez plus d'informations sur l'utilisation des registres publics et privés dans cette documentation.

Recommandations à suivre

Créer un Dockerfile

Un Dockerfile est un script qui contient les instructions pour construire notre image Docker. Il spécifie l'image de base à utiliser, les paquets ou bibliothèques supplémentaires à installer, ainsi que les paramètres de configuration ou commandes à exécuter au démarrage de l'image du container.

Avant de continuer, assurez-vous d'être dans le répertoire racine de votre projet, contenant les fichiers du job (fichiers Python, requirements.txt, ...).

Une fois que vous y êtes, créez un nouveau fichier et nommez-le Dockerfile à l'aide d'un éditeur de texte (vi, vim, nano, ...).

Voici un exemple. Nous utilisons d'abord cd pour nous déplacer dans le répertoire de notre projet, où se trouvent tous nos fichiers. Ensuite, nous créons et éditons le Dockerfile :

# Move to the root directory of the project
$ cd ai_training_project/

# This directory should contain all your job files
~/ai_training_project$ ls
# output : cnn.py  main.py  requirements.txt  utils.py

# Create and edit Dockerfile
~/ai_training_project$ vim Dockerfile

Choisir une image de base

Plutôt que de partir de zéro, n'hésitez pas à partir d'une image Docker existante, à condition qu'elle respecte les recommandations suivantes.

L'en-tête de notre Dockerfile ressemblera à ceci :

FROM `<base-image>`

Quelle image devrions-nous utiliser ?

De nombreuses images officielles sont disponibles sur Docker Hub. Par exemple, nous pourrions utiliser les images Python de base, qui existent en de nombreuses versions et variantes (alpine, slim, ...), chacune conçue pour un cas d'usage spécifique.

Si nous souhaitons partir d'une image Python 3.10, nous utiliserions la commande suivante, puisque python:3.10 est le nom de l'image :

FROM python:3.10
Info

Choisir la bonne image de base est important. L'objectif est de trouver une image qui correspond à notre usage, et dont la taille est la plus petite possible. En effet, cela nous permettra de la manipuler plus rapidement et de la stocker plus facilement. Si l'image choisie ne contient pas toutes les bibliothèques nécessaires à notre projet, ce n'est pas un problème, nous verrons comment les installer.

Warning

Si vous souhaitez pouvoir utiliser du matériel GPU dans vos jobs AI Training, votre image de base doit avoir les drivers cuda installés.

Voici une liste potentielle d'images de base officielles (incluant les drivers cuda) que vous pouvez utiliser :

Par exemple, si nous souhaitons partir de l'image de base tensorflow/tensorflow:latest-gpu, nous utiliserions :

FROM tensorflow/tensorflow:latest-gpu

Définir le répertoire personnel

Définir un répertoire personnel est une bonne pratique lors de la création d'images Docker, car cela permet de garder le système de fichiers organisé et facilite la référence aux fichiers et répertoires au sein du container.

Notre répertoire personnel sera /workspace. Nous devons indiquer dans notre Dockerfile que nous souhaitons créer le répertoire /worskpace et le définir comme notre répertoire personnel. Cela peut se faire à l'aide de l'instruction WORKDIR :

WORKDIR /workspace
ENV HOME=/workspace
Warning

Déclarer le répertoire /workspace comme variable d'environnement HOME est nécessaire pour garantir la compatibilité avec AI Training.

Ajouter les fichiers du job au répertoire personnel

Une fois le répertoire /workspace mis en place, nous pouvons y ajouter nos fichiers (scripts Python, requirements.txt, et le Dockerfile) grâce à l'instruction ADD.

Voici un exemple pour ajouter un fichier spécifique, tel qu'un fichier Python main.py :

ADD main.py /workspace/

Si notre projet est composé de nombreux fichiers, nous pouvons aussi ajouter tous les fichiers du répertoire de notre projet en utilisant :

ADD . /workspace
Warning

Cette commande pourrait vous permettre de charger votre jeu de données dans votre image Docker. Cependant, cela augmenterait considérablement sa taille. Une bonne pratique consiste à placer les données à l'extérieur, comme dans Object Storage, puis à les lier au job AI Training lors de son lancement.

Donner à l'utilisateur OVHcloud accès au répertoire personnel

Info

Les images dans AI Training ne sont pas exécutées en tant qu'utilisateur root, mais par un utilisateur « OVHcloud » avec l'UID 42420.

Cela signifie que si nous souhaitons pouvoir créer et écrire dans un répertoire spécifique au runtime, nous devrons lui donner des droits spécifiques. Nous pouvons le faire avec l'instruction suivante :

RUN chown -R 42420:42420 `<specific-directory>`

Comme mentionné, le répertoire personnel de l'utilisateur « OVHcloud » (avec l'UID 42420) sera /workspace. Nous pouvons alors remplacer <specific-directory> par /workspace. Gardez toutefois à l'esprit que vous pouvez modifier la propriété de tout autre répertoire utile.

Warning

Selon les modèles et frameworks que vous utilisez, d'autres dossiers peuvent être créés pendant l'entraînement à la racine de votre environnement. Cela peut être le cas pour des dossiers comme /runs ou /logs. Dans ce cas, n'oubliez pas de donner également les droits d'accès à ces dossiers : RUN chown -R 42420:42420 /runs /logs.

Pour résumer, voici à quoi ressemble notre Dockerfile pour l'instant :

FROM tensorflow/tensorflow:latest-gpu

WORKDIR /workspace
ENV HOME=/workspace
ADD . /workspace

RUN chown -R 42420:42420 /workspace

Installer ce dont nous avons besoin

Comme expliqué précédemment, il est possible que l'image Docker choisie n'inclue pas toutes les bibliothèques nécessaires au bon fonctionnement de notre projet. Dans ce cas, nous devons les installer pour garantir le bon fonctionnement de notre job AI Training.

Nous distinguons deux types :

  • Les paquets Linux
  • Les bibliothèques Python

Ces instructions d'installation commencent par le préfixe RUN, utilisé pour exécuter une commande lors du processus de construction de l'image.

Installer des paquets système

Par exemple, supposons que le paquet ffmpeg (utilisé pour traiter les fichiers multimédias) soit nécessaire à notre job AI Training mais absent de notre image de base. Nous utiliserions alors :

RUN apt-get update && apt-get install -y ffmpeg

Si nous devons installer plusieurs paquets, nous pouvons les écrire les uns après les autres comme suit :

RUN apt-get update && apt-get install -y \
  ffmpeg \
  libsndfile1-dev \
  ... \

Pour améliorer votre Dockerfile en le rendant plus court, nous pouvons également lister tous nos paquets dans un fichier packages.txt, et l'installer avec :

RUN xargs -a packages.txt apt-get install --yes

Installer des bibliothèques Python

Pour installer les bibliothèques Python manquantes, nous conseillons de créer un fichier requirements.txt, dans le répertoire racine de votre projet, où nous écrirons toutes les bibliothèques nécessaires manquantes de notre image de base.

Info

Une bonne pratique consiste à préciser la version de chaque bibliothèque dans ce fichier, afin de garantir que les versions installées soient fixes et d'éviter d'éventuels conflits.

Voici un exemple de fichier requirements.txt. Comme vous pouvez le voir, nous avons indiqué chaque bibliothèque nécessaire à notre projet, et nous avons précisé la version de chacune d'elles :

librosa==0.9.1
torch==1.11.0
torchaudio==0.11.0

Il est maintenant temps d'indiquer dans notre Dockerfile que nous souhaitons installer les bibliothèques Python à partir de ce fichier requirements.txt, à l'aide d'une instruction RUN pip install -r :

RUN pip install -r requirements.txt

Spécifier la commande principale qui exécute notre job

L'instruction CMD est généralement utilisée pour spécifier la commande principale qui exécute notre job AI Training, comme un script python ou un exécutable binaire. Elle ne peut être utilisée qu'une seule fois dans un Dockerfile.

C'est ici que nous spécifierons quel fichier Python nous souhaitons exécuter. Voici un exemple simple pour exécuter un fichier Python main.py, situé à la racine :

CMD ["python", "/workspace/main.py"]

Si votre fichier main.py prend des arguments, vous pouvez les spécifier dans la commande CMD comme suit :

CMD ["python", "/workspace/main.py", "--arg1", "value1", "--arg2", "value2"]
Info

Notez qu'il n'est pas obligatoire de spécifier une instruction CMD dans le Dockerfile. Cela ne fait que simplifier l'expérience de l'utilisateur.

Par exemple, si notre fichier main.py a des paramètres que nous souhaitons personnaliser plutôt que de les fixer dans notre image Docker, nous retirerions l'option CMD du Dockerfile et nous utiliserions la commande suivante lors du lancement du job AI Training :

-- bash -c 'python /workspace/main.py arg1 arg2'

Autres commandes utiles

Plutôt que d'ajouter tous les fichiers du projet en utilisant ADD . /workspace, vous pourriez être intéressé par l'instruction COPY, qui peut être meilleure et plus sûre pour copier des fichiers et répertoires depuis notre répertoire local vers notre image Docker.

Par exemple, si nous souhaitons ajouter le fichier example.py au répertoire personnel de notre image :

COPY example.py /workspace/example.py
Info

Pour plus d'informations sur les Dockerfiles, nous vous recommandons de consulter leur documentation officielle

Aperçu final du Dockerfile

Pour résumer ce tutoriel, voici à quoi ressemble notre Dockerfile final :

# Base image
FROM tensorflow/tensorflow:latest-gpu

# Create and set the HOME directory
WORKDIR /workspace
ENV HOME=/workspace

# Add our job's file to this directory
ADD . /workspace

# Give the OVHcloud user (42420:42420) access to this directory
RUN chown -R 42420:42420 /workspace

# Install required packages and libraries
RUN apt-get update && apt-get install -y ffmpeg libsndfile1-dev
RUN pip install -r requirements.txt

# Run your job (Optional. You can specify your file when launching the AI Training job)
CMD ["python", "/workspace/main.py"]

Construire notre image

Une fois le Dockerfile complet et conforme à nos besoins, nous devons choisir un nom d'image et construire l'image à l'aide de l'une des commandes suivantes (assurez-vous d'être toujours dans le répertoire racine de votre projet, où se trouve le Dockerfile) :

# Build the image using your machine's default architecture
docker build . -t `<image-identifier>`

# Build image targeting the linux/amd64 architecture
docker buildx build --platform linux/amd64 -t `<image-identifier>` .
  • La première commande construit l'image en utilisant l'architecture par défaut de votre système. Cela peut fonctionner si votre machine utilise déjà l'architecture linux/amd64, qui est requise pour exécuter des containers avec nos produits AI. Cependant, sur des systèmes avec une architecture différente (par exemple ARM64 sur Apple Silicon), l'image résultante ne sera pas compatible et ne pourra pas être déployée.

  • La seconde commande cible explicitement l'architecture linux/amd64 afin de garantir la compatibilité avec nos services AI. Elle nécessite buildx, qui n'est pas installé par défaut. Si vous n'avez jamais utilisé buildx, vous pouvez l'installer en exécutant : docker buildx install

Info

L'argument point . indique que votre contexte de build (emplacement du Dockerfile et des autres fichiers nécessaires) est le répertoire courant.

L'argument -t vous permet de choisir l'identifiant à donner à votre image. En général, les identifiants d'image sont composés d'un nom et d'un tag de version <name>:<version>.

Essayez de trouver un nom facilement identifiable. Cela vous permettra de gérer vos images Docker plus facilement, surtout lorsque vous avez plusieurs images et versions.

Par exemple, nous pourrions utiliser :

docker build . -t cnn_image_segmentation_project

Tester l'image en local (optionnel)

Si nous souhaitons vérifier que notre image construite fonctionne correctement, nous pouvons exécuter la commande suivante :

docker run --rm -it --user=42420:42420 <image-identifier>
Warning

N'oubliez pas l'argument --user=42420:42420 si vous souhaitez simuler exactement le même comportement que celui qui se produira sur les jobs AI Training. Il exécute le container Docker en tant qu'utilisateur OVHcloud spécifique (utilisateur 42420:42420).

Envoyer l'image vers le registre de votre choix

Envoyer notre image vers un registre est nécessaire pour qu'AI Training puisse la récupérer.

AI Training fournit, pour chaque projet Public Cloud, un registre par défaut appelé registre partagé, où tous les utilisateurs d'un même projet Public Cloud peuvent envoyer leurs images personnalisées.

Warning

Ce registre partagé peut vous aider à réaliser vos tests, mais ne doit pas être utilisé en production, car nous nous réservons le droit de supprimer son contenu si nécessaire. Les images envoyées vers ce registre sont uniquement destinées aux workloads AI Tools, et ne seront pas accessibles pour des usages externes. C'est pourquoi il peut être intéressant d'ajouter d'autres registres. Découvrez comment faire en suivant cette documentation.

Voici les commandes de base pour envoyer une image Docker vers un registre :

    docker login -u `<registry-user>` -p <registry-password> `<registry-address>`
    docker tag `<image-identifier>` <registry-address>/<image-identifier>:`<tag-name>`
    docker push `<registry-address>`/<image-identifier>:`<tag-name>`

Par exemple, si nous souhaitons envoyer une première version de notre image construite nommée cnn_image_segmentation_project vers un registre registry.gra.ai.cloud.ovh.net, nous utiliserions :

    docker login -u <registry-user> -p <registry-password> my-registry.ai.cloud.ovh.net
    docker tag cnn_image_segmentation_project:v1.0.0 my-registry.ai.cloud.ovh.net/cnn_image_segmentation_project:v1.0.0
    docker push my-registry.ai.cloud.ovh.net/cnn_image_segmentation_project:v1.0.0

Si vous souhaitez connaître les commandes exactes pour envoyer vers votre registre partagé, consultez le bouton Détails de la section Shared Docker Registry, dans le panneau Home d'AI Training.

Onglet Home d'AI Training avec le panneau Information listant Shared Docker Registry et OVHcloud AI Training command line interface chacun avec un bouton Details

Exemples de Dockerfile

Si vous souhaitez plus d'exemples concrets, n'hésitez pas à consulter les différents Dockerfiles disponibles sur notre dépôt GitHub ai-training-examples.

Aller plus loin

Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.

Votre avis nous intéresse !

N’hésitez pas à nous faire part de vos questions, retours et suggestions pour améliorer le service :

Cette page vous a-t-elle aidé ?