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-deploy-build-use-custom-image.md.

AI Deploy - Tutoriel - Créer et utiliser une image Docker personnalisée

Voir en Markdown

Explications sur la construction et l'utilisation de votre propre image personnalisée

Info

AI Deploy est couvert par les Conditions particulières OVHcloud Public Cloud.

Objectif

Ce tutoriel couvre le processus de construction de votre propre image Docker pour AI Deploy. Après avoir détaillé les principales recommandations, nous verrons un exemple rapide.

Prérequis


Accès à l'espace client OVHcloud

  • Lien direct :
  • Pour accéder à vos services : Public Cloud > Sélectionnez votre projet

Aperçu rapide

L’objectif principal d’AI Deploy est de simplifier le déploiement de modèles ou d’applications IA et de les mettre en production, avec résilience et sécurité, en quelques secondes. Chaque application est liée à des ressources de calcul telles que des CPU ou des GPU, et peut être accédée via un endpoint HTTP fourni par AI Deploy pour chaque app.

Pour être déployés, votre modèle ou votre application doivent être conteneurisés dans une image Docker. Les containers offrent isolation mais aussi flexibilité pour vos déploiements. Les images Docker que vous construisez peuvent être déployées en local, avec AI Deploy d’OVHcloud, mais aussi chez des concurrents cloud tels qu’AWS ou GCP.

À l’intérieur de votre image Docker, vous êtes libre d’installer presque tout ce que vous souhaitez, à condition de suivre les recommandations ci-dessous.

AI Deploy accepte les images provenant de dépôts publics ou privés. En résumé, voici comment fonctionne AI Deploy :

Schéma en trois étapes conteneurisez vos modèles d'IA ou votre application web avec des frameworks comme Flask FastAPI Streamlit TensorFlow gradio et PyTorch puis poussez l'image Docker vers un registre public ou privé puis déployez en quelques secondes avec AI Deploy qui offre un endpoint HTTP des nœuds CPU et GPU la haute disponibilité une mise à l'échelle simple une authentification sécurisée l'accès à l'Object Storage et la supervision

Recommandations à suivre

Partir d’une image Docker existante

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. Par exemple, vous pouvez partir de « python », de « alpine » ou équivalent.

Si vous devez travailler avec des GPU, veuillez lire le paragraphe suivant.

Utiliser des images spécifiques avec des pilotes CUDA pour les GPU

Info

Si vous souhaitez communiquer avec notre matériel GPU dans vos apps AI Deploy, l’image de base doit avoir les pilotes cuda installés.

Voici une liste potentielle d’images de base officielles (intégrant des pilotes cuda) que vous pouvez utiliser :

Par exemple, si vous souhaitez partir de l’image de base tensorflow/tensorflow:latest-gpu :

FROM tensorflow/tensorflow:latest-gpu

Utiliser l’architecture linux/amd64

Votre image Docker doit prendre en charge au minimum la plateforme linux/amd64 pour être déployée correctement. Sinon, le déploiement échouera.

Lorsque vous lancez un build, vous pouvez définir le flag --platform pour préciser la plateforme cible du build, linux/amd64. Ceci est particulièrement pertinent si vous utilisez des ordinateurs Apple récents (puces M1/M2/…) ou des ordinateurs basés sur ARM.

docker buildx build --platform linux/amd64,linux/arm64 ...

Plus d’informations sont disponibles dans la documentation officielle Docker.

Créer un utilisateur OVHcloud et un répertoire de travail

Les containers déployés ne s’exécutent pas en tant que root, mais avec un utilisateur « OVHcloud » ayant l’UID 42420. Cela signifie que si vous souhaitez pouvoir écrire dans un répertoire spécifique lors de l’exécution, vous devrez lui donner des droits spécifiques.

C’est le cas dans la grande majorité des cas d’usage.

Vous pouvez le faire avec les instructions suivantes :

# Define a working directory called workspace
WORKDIR /workspace

# Copy some files from your computer to the Docker image
COPY my_app.py /workspace/
COPY my_models /workspace/my_models/

# Create a HOME dedicated to the OVHcloud user (42420:42420)
RUN chown -R 42420:42420 /workspace
ENV HOME=/workspace

# Change the ownership of any other useful directory to the OVHcloud user (42420:42420)
RUN chown -R 42420:42420 <another_useful_directory>

# Run your app
CMD [ "python3" , "/workspace/my_app.py" ]

Installer les dépendances via apt ou pip

Généralement, des paquets Python ou Linux seront nécessaires pour votre application. Vous pouvez suivre les bonnes pratiques Docker à cet effet, c’est-à-dire installer les dépendances avec apt ou pip.

Voici un exemple conforme :

RUN apt-get update && apt-get install -y \
  git \
  other_linux_packages \
  ... \

# Install few Python requirements, such as pandas, scikit-learn, taipy...
COPY requirements.txt /workspace/requirements.txt
RUN pip install -r requirements.txt

Gérer efficacement les données de sortie (Object Storage compatible Swift ou S3*)

Tout comme AI Notebooks et AI Training, AI Deploy se connecte facilement à un stockage distant tel que des conteneurs Object Storage compatibles Swift ou S3* au lancement. Cependant, contrairement à AI Notebooks et AI Training, AI Deploy ne synchronise PAS les données vers votre stockage distant.

Si vous devez écrire des données quelque part, par exemple la sortie de votre modèle IA (images générées), le code de votre application doit inclure une connexion au stockage. Par exemple, vous pouvez utiliser la librairie Python Boto3 lorsque vous utilisez Python et un Object Storage compatible S3.

Attention, si vous écrivez des données directement dans votre répertoire de travail, elles seront perdues à l’arrêt de votre application.

Utiliser des variables d’environnement pour les valeurs dynamiques

Info

Pour les données sensibles telles que les mots de passe ou les tokens, envisagez d’utiliser Docker Secrets.

Parfois, plutôt que de coder en dur une variable dans un Dockerfile, il est bien plus puissant de passer des variables lors du déploiement. Docker propose nativement cette option via l’argument --env, et les outils AI d’OVHcloud suivent la même logique.

Lors de la création d’une app AI Deploy, vous pourrez passer des variables d’environnement via la CLI, l’API ou l’interface du panneau de contrôle. Dans votre Dockerfile, vous pouvez récupérer ces variables avec la valeur ENV.

Par exemple, vous pouvez lancer une nouvelle app avec deux variables comme ceci :

ovhai run app <my_docker_image> -e LANGUAGE=english TOKEN=12345678

Dans votre Dockerfile, vous pouvez facilement réutiliser les variables :

# no default value
ENV LANGUAGE
ENV TOKEN

# a default value
ENV foo /bar
# or ENV foo=/bar

# ENV values can be used during the build
ADD . $foo
# or ADD . ${foo}
# translates to: ADD . /bar

Exposer votre modèle ou application avec une API

À l’intérieur de votre Dockerfile, vous devrez exposer votre modèle ou application pour que chacun puisse l’utiliser. Le moyen le plus simple consiste à exposer une API via un endpoint REST. Les frameworks open source les plus populaires pour exposer des API sont Flask et Fast API.

Vous trouverez un exemple basique dans la section ci-dessous, ainsi que des tutoriels plus avancés dans notre documentation AI Deploy.

Exposer votre application avec un frontend web

Bien qu’une API soit utile pour l’automatisation et le code, vous aurez parfois besoin d’exposer votre application ou votre modèle via une interface web.

AI Deploy est entièrement compatible avec plusieurs frameworks frontend, tels que Streamlit, Gradio ou Taipy. Vous pouvez bien sûr aussi construire votre propre frontend avec vos outils préférés, tels que HTML/CSS.

Vous trouverez un exemple basique dans la section ci-dessous, ainsi que des tutoriels plus avancés dans notre documentation AI Deploy.

Exemple basique : écrire votre propre Dockerfile et construire votre image

Nous allons ici construire une image Docker basique, en suivant les recommandations.

Préparer le Dockerfile

Créez un nouveau fichier et nommez-le Dockerfile, en suivant les recommandations.

  1. Choisissez d’abord une image de base pour démarrer.
  2. Installez ce dont vous avez besoin comme dépendances avec apt ou pip. Les instructions de commande bash dans votre Dockerfile doivent commencer par le préfixe RUN.
  3. Copiez les fichiers depuis votre répertoire local dans l’image Docker avec le préfixe COPY.
  4. Autorisez l’utilisateur « OVHcloud UID 42420 » à obtenir des droits spécifiques.
  5. Exécutez votre script.

Un exemple basique peut être résumé comme ceci :

# Start from official Python image since we don't need GPU
FROM python:3.9

# Create a working directory
WORKDIR /workspace

# Install a few requirements, such as vim and git
RUN apt-get update && apt-get install -y vim git

# Add your files to your Docker image. NB: best practice is to put data outside, using Object Storage
ADD example.py /workspace/
ADD dataset.csv /workspace/

# Create a HOME dedicated to the OVHcloud user (42420:42420). Mandatory step
RUN chown -R 42420:42420 /workspace
ENV HOME=/workspace

# Run your script
CMD [ "python3" , "/workspace/example.py" ]

Construire votre image Docker

Une fois votre Dockerfile complet et conforme à vos besoins, vous devez choisir un nom et construire l’image à l’aide de l’une des commandes suivantes :

# 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, 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. Généralement, les identifiants d’image sont composés d’un nom et d’un tag de version <name>:<version>. Pour cet exemple, nous avons choisi image-identifier.

Tester en local (optionnel)

Si vous souhaitez vérifier que votre image construite fonctionne correctement, exécutez 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 apps AI Deploy. 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 votre image vers un registre est nécessaire pour qu’AI Deploy puisse la récupérer.

AI Deploy fournit un registre par défaut appelé Shared registry, où les utilisateurs peuvent envoyer leurs images personnalisées. Il est lié à chaque projet par défaut.

Warning

Le registre partagé ne doit être utilisé qu’à des fins de test. Pensez à créer et à rattacher votre propre registre. Plus d’informations à ce sujet sont disponibles ici. Les images envoyées vers ce registre sont réservées aux charges de travail AI Tools et ne seront pas accessibles pour des usages externes.

Les commandes de base pour envoyer une image Docker vers un registre sont :

# Add a new registry into OVHcloud AI Tools
ovhai registry add <url>

# Push your image
docker login -u <registry-user> -p <registry-password> <registry>
docker tag <image-identifier> <registry>/<image-identifier>
docker push <registry>/<image-identifier>

Exemple : si vous souhaitez envoyer une image nommée custom-image dans un registre registry.gra.ai.cloud.ovh.net :

# Add a new registry into OVHcloud AI Tools
ovhai registry add my-registry.ai.cloud.ovh.net

docker login -u <registry-user> -p <registry-password> my-registry.ai.cloud.ovh.net
docker tag custom-image:latest my-registry.ai.cloud.ovh.net/custom-image:latest
docker push my-registry.ai.cloud.ovh.net/custom-image:latest

Si vous souhaitez connaître les commandes exactes pour envoyer sur le registre partagé, veuillez consulter 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

Aller plus loin

  • Découvrez quelques apps AI Deploy que nous avons construites avec une API ou un frontend web via notre Portfolio d'app.

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 :

*: S3 est une marque déposée d'Amazon Technologies, Inc. Le service d'OVHcloud n'est ni sponsorisé, ni approuvé, ni autrement affilié à Amazon Technologies, Inc.

Cette page vous a-t-elle aidé ?