Conteneuriser des modèles d’apprentissage automatique avec Docker
Dockerfile en plusieurs étapes, images de base CUDA, copie de l’artefact du modèle avec COPY, points de terminaison de contrôle d’état.
Conteneuriser des modèles d’apprentissage automatique avec Docker est une leçon Learn AI with Python gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Learn AI with Python, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Learn AI with Python comprend 4 leçons au total.
Pourquoi conteneuriser les modèles d'apprentissage automatique
Les modèles d'apprentissage automatique dépendent d'une version précise de Python, de bibliothèques système et de versions figées de paquets. Docker regroupe tout cela dans une image unique et immuable, afin que le modèle s'exécute de façon identique sur un ordinateur portable, un exécuteur CI et une infrastructure de production.
Pour l'apprentissage automatique, le principal problème est la dérive des dépendances : un modèle entraîné avec numpy 1.24 peut se comporter incorrectement sans avertissement avec numpy 2.0. Un conteneur fige ces versions.
L'image naïve en une seule étape
Une première tentative installe tout en une seule étape. Elle fonctionne, mais elle inclut dans l'image finale les outils de compilation (compilateurs, caches et en-têtes de développement), ce qui la rend volumineuse et augmente sa surface d'attaque.
FROM python:3.11
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "serve.py"]Compilations en plusieurs étapes : le principe
Une compilation en plusieurs étapes utilise une étape pour compiler et installer les dépendances (la construction), puis copie uniquement les artefacts terminés dans une étape finale propre. Les outils nécessaires uniquement à la compilation n'atteignent jamais la production.
- Étape de construction : image de base complète, exécute
pip install - Étape finale : image de base allégée, copie les paquets installés
Étape de construction : installation avec pip
L'étape de construction installe les paquets dans un préfixe connu afin de pouvoir les copier facilement. L'utilisation de --user les place sous /root/.local, dans un seul répertoire que nous pouvons récupérer ensuite.
FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txtÉtape finale allégée
L'étape finale part de python:3.11-slim et copie les paquets installés depuis l'étape de construction. L'image allégée exclut les chaînes d'outils de compilation, ce qui réduit la taille de l'image de plusieurs centaines de mégaoctets.
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . .Copie des poids du modèle
Les poids volumineux du modèle doivent être copiés dans leur propre couche afin que Docker puisse les mettre en cache. Si seul votre code est modifié, la couche contenant les poids est réutilisée et les reconstructions sont rapides.
COPY model/ /app/model/
COPY src/ /app/src/EXPOSE le port de service
Les serveurs d'inférence (FastAPI, Triton, TorchServe) écoutent sur un port. EXPOSE 8000 indique que le conteneur fournit un service sur le port 8000. Cette instruction ne publie pas le port à elle seule : vous devez toujours le mapper avec -p 8000:8000 lors de l'exécution.
EXPOSE 8000
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]Notions de base de HEALTHCHECK
Les orchestrateurs doivent savoir si le serveur de modèles est actif. Une instruction HEALTHCHECK exécute une commande à intervalles réguliers ; une sortie différente de zéro marque le conteneur comme défaillant afin qu'il puisse être redémarré ou retiré du répartiteur de charge.
HEALTHCHECK avec curl
Une méthode courante consiste à appeler un point de terminaison /health léger. curl -f échoue (avec une sortie différente de zéro) pour toute erreur HTTP, ce qui correspond exactement à ce qu'attend HEALTHCHECK.
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1Un point de terminaison de santé minimal
Votre application de service doit exposer un point de terminaison rapide qui confirme que le modèle est chargé, sans exécuter une inférence complète.
from fastapi import FastAPI
app = FastAPI()
model = None # loaded at startup
@app.get("/health")
def health():
return {"status": "ok", "model_loaded": model is not None}Le Dockerfile complet
Voici l'ensemble : une étape de construction installe les dépendances, une étape finale légère les copie avec le modèle, expose le port 8000 et déclare une vérification de l'état.
FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY model/ /app/model/
COPY src/ /app/src/
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD curl -f http://localhost:8000/health || exit 1
CMD ["uvicorn", "src.serve:app", "--host", "0.0.0.0", "--port", "8000"]Vérification rapide
Vérifiez votre compréhension des constructions à plusieurs étapes.
Récapitulatif
Vous avez appris à conteneuriser un modèle d'apprentissage automatique avec un Dockerfile adapté à la production :
- Construction à plusieurs étapes : l'étape de construction installe les dépendances, puis l'étape finale légère les copie
- EXPOSE 8000 documente le port de service
- HEALTHCHECK CMD curl permet aux orchestrateurs de détecter les conteneurs inactifs
- Copier les poids dans leur propre couche pouvant être mise en cache
Ensuite, vous déploierez un modèle conteneurisé sur un service cloud géré.
Questions Fréquemment Posées
La leçon « Conteneuriser des modèles d’apprentissage automatique avec Docker » est-elle gratuite ?
Oui — le texte complet de « Conteneuriser des modèles d’apprentissage automatique avec Docker » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Learn AI with Python, passe à CoddyKit PRO. Le cours Learn AI with Python comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Conteneuriser des modèles d’apprentissage automatique avec Docker » ?
Dockerfile en plusieurs étapes, images de base CUDA, copie de l’artefact du modèle avec COPY, points de terminaison de contrôle d’état. Tu pratiques Learn AI with Python avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Learn AI with Python ?
Aucune expérience préalable n'est requise. Learn AI with Python sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Conteneuriser des modèles d’apprentissage automatique avec Docker » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Learn AI with Python ?
Oui. Chaque leçon Learn AI with Python inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Conteneuriser des modèles d’apprentissage automatique avec Docker
- Déploiement cloud : AWS SageMaker
- Service haute performance avec Triton Inference Server
- Mise à l’échelle et autoscaling des points de terminaison de modèles