Slides — Session 8 : Infrastructure & Déploiement

Programme : Applied AI — Niveau Intermédiaire — Instructeur : Yann Isola
Format : 30 slides. Chaque slide comporte le contenu projeté puis les notes orateur.
Palette : encre #1A2230, sarcelle #0F7A6C, cuivre #B4612A, sarcelle claire #E9F6F3, fond #F4F7F6.

Slide 1 — Titre

Infrastructure & Déploiement

Du notebook aux 10 000 utilisateurs

Applied AI — Session 8 — Yann Isola

Notes orateur : Accueil. Question d'ouverture : « Qui a déjà vu un prototype IA génial… qui n'est jamais sorti du notebook ? » Les mains se lèvent. « Aujourd'hui, on apprend à franchir ce fossé. » Zéro code à écrire : on raisonne en architecte.

Slide 2 — Rappel express : Session 7

  • Vous savez construire des systèmes IA qui lisent (RAG — Retrieval-Augmented Generation, génération augmentée par récupération) et agissent (outils)
  • Vous savez évaluer la qualité de leurs réponses
  • Il manque une chose : les faire tourner pour de vrai, pour de vrais utilisateurs

Notes orateur : 90 secondes max. Transition : « Un système brillant que personne ne peut utiliser vaut zéro. »

Slide 3 — Objectifs de la session

À la fin de ces 2 heures, vous saurez :

  1. Nommer les 6 chantiers entre notebook et production
  2. Intégrer une API proprement : clés, OAuth, rate limits, retry avec backoff
  3. Raisonner en budget de latence et expliquer le streaming (SSE)
  4. Réduire la facture : tokens, caching, routage de modèles
  5. Mettre en place observabilité et alertes ; traiter les prompts comme du code
  6. Choisir un patron de déploiement et sécuriser la production

Notes orateur : Contrat clair. Précisez le fil rouge : « On va suivre une seule application, SupportBot, du notebook à la production. Chaque concept résout un problème qu'elle rencontre en grandissant. »

Slide 4 — Voici SupportBot 📓

  • Assistant de support interne : RAG + outils, répond aux questions des employés
  • Dans le notebook du développeur : il marche parfaitement
  • 1 utilisateur · clé API en clair · aucune gestion d'erreur · coût invisible · latence ignorée
  • Demain : 5 000 employés, 10 000 requêtes/jour

Notes orateur : Plantez le décor en 60 secondes. Insistez : rien n'est « faux » dans le prototype — il est juste conçu pour un monde qui n'existe pas (un utilisateur, réseau parfait, budget infini).

Slide 5 — Notebook vs Production

📓 Notebook 🏭 Production
Utilisateurs 1 (vous) 10 000/jour
Clé API en clair dans le code gestionnaire de secrets
Erreur réseau on relance la cellule retry automatique
Coût invisible scruté par la direction
Latence « on s'en fiche » abandon après 5 s
« Ça marche pas » vous debuggez en direct il faut des journaux

Notes orateur : Analogie food-truck vs restaurant : même recette, mais le restaurant a besoin de réservations, d'une cuisine dimensionnée, d'une comptabilité, d'hygiène et d'un chef qui voit sa salle. La recette (le prompt) est la partie facile.

Slide 6 — Les 6 chantiers de la production

  1. 🔑 Intégration API — auth, rate limits, retry
  2. ⏱️ Latence — budget, streaming
  3. 💸 Coûts — tokens, caching, routage
  4. 🔭 Observabilité — journaux, percentiles, alertes
  5. 🛡️ Sécurité — secrets, entrées, sorties
  6. 📈 Montée en charge — scaling, files d'attente

Notes orateur : C'est le plan de la session. Question à la salle : « Lequel est le plus souvent oublié ? » Réponse : l'observabilité — invisible tant que tout va bien, indispensable dès le premier incident. Message central à marteler : « un prototype qui marche = 20 % du travail ».

Slide 7 — Chantier 1 : parler à l'API du fournisseur

  • Votre application appelle l'API (Application Programming Interface, interface de programmation applicative) d'un fournisseur de LLM (Large Language Model, grand modèle de langage)
  • Trois questions à régler :
    1. Qui a le droit d'appeler ? → authentification
    2. À quel rythme ? → rate limits
    3. Et quand ça échoue ? → retry & backoff

Notes orateur : Recadrez : dans 90 % des projets, vous n'hébergez PAS le modèle — vous appelez une API. Toute la fiabilité de votre produit dépend donc de la qualité de cette intégration.

Slide 8 — Les clés API : le badge de l'entreprise

  • Une clé API = un mot de passe de service
  • Règles d'or :
    • ❌ jamais dans le code source (ni dans Git)
    • ❌ jamais côté client — navigateur, appli mobile
    • ✅ variables d'environnement ou gestionnaire de secrets
    • ✅ rotation : révocable sans tout casser

Notes orateur : Démonstration mentale : « Ouvrez F12 dans votre navigateur, onglet Réseau. Tout ce que le navigateur envoie, VOUS le voyez. Une clé dans le front-end est publique de fait — elle sera volée et utilisée à vos frais. » C'est la règle de sécurité n° 1 de la session, elle reviendra slide 25.

Slide 9 — OAuth : le badge visiteur nominatif

  • OAuth (Open Authorization, protocole d'autorisation déléguée)
  • Quand l'application agit au nom d'un utilisateur : son agenda, son CRM (Customer Relationship Management, gestion de la relation client), ses fichiers
  • L'utilisateur autorise explicitement → l'application reçoit un jeton limité, expirable, révocable
  • Clé API = badge de l'entreprise · OAuth = badge visiteur nominatif avec date d'expiration

Notes orateur : Ne rentrez pas dans le détail du protocole (flows, scopes) — retenez le QUAND : identité globale de service → clé API ; action au nom d'un utilisateur précis → OAuth. Exemple SupportBot : consulter le solde de congés de cet employé → OAuth vers le SIRH (système d'information RH).

Slide 10 — Rate limits : la file d'attente du fournisseur

  • Les fournisseurs limitent le débit :
    • RPM (Requests Per Minute, requêtes/minute)
    • TPM (Tokens Per Minute, tokens/minute)
  • ⚠ Les valeurs dépendent du fournisseur et du niveau de compte
  • Dépassement → réponse HTTP 429 « Too Many Requests » + souvent un en-tête retry-after
  • Le 429 n'est pas une panne : c'est une consigne — ralentissez

Notes orateur : Anecdote SupportBot : lundi 9 h, 800 employés se connectent en même temps → rafale de 429. Distinguer : rate limit = limitation volontaire, prévisible, négociable (augmentation de quota) ; panne = involontaire. Les deux se gèrent par retry, mais le rate limit se prévient aussi (lissage, file d'attente).

Slide 11 — Retry & backoff exponentiel

Tentative 1 → échec (429/5xx)
   attendre 1 s (+ jitter)
Tentative 2 → échec
   attendre 2 s (+ jitter)
Tentative 3 → échec
   attendre 4 s (+ jitter)
Tentative 4 → échec → abandon PROPRE (message clair à l'utilisateur)
  • Jitter = variation aléatoire → évite que 1 000 clients réessaient au même instant
  • ❌ Ne jamais réessayer les 400/401/403 : une requête invalide reste invalide

Notes orateur : Schéma à reproduire au tableau si besoin. Expliquez le « thundering herd » (effet troupeau) : sans jitter, tous les clients réessaient à la même seconde et recréent le pic. Avec backoff + jitter, l'expérience du lundi 9 h passe de « 30 % d'erreurs » à « 2–3 s d'attente pour les moins chanceux ».

Slide 12 — Chantier 2 : le budget de latence

Partir de l'utilisateur, pas de la technique :

Attente Perception Réponse technique
< 1 s instantané rien à faire
1–3 s acceptable indicateur d'attente
3–10 s frustrant streaming obligatoire
> 10 s inacceptable en direct passer en asynchrone

Notes orateur : « Combien de temps l'utilisateur peut-il attendre ? » est une question produit, pas une question technique. Fixez le budget AVANT de choisir modèle et architecture. Un utilisateur de chat n'attend pas comme un service batch de nuit.

Slide 13 — Où part le temps ?

Latence totale =
   réseau aller (~50–100 ms)
 + TTFT (Time To First Token, délai avant le 1er token : ~0,2–1 s ⚠)
 + génération (proportionnelle aux tokens de SORTIE)
 + réseau retour
  • Le poste dominant : la génération des tokens de sortie
  • Conséquence : une réponse 2× plus courte ≈ 2× plus rapide

Notes orateur : Insight contre-intuitif : contrôler la longueur des réponses (consigne de concision, max_tokens) est une optimisation de LATENCE autant que de coût. Les participants croient souvent que la latence vient du réseau — non, elle vient de la génération.

Slide 14 — Streaming : SSE change tout (sauf la latence)

  • SSE (Server-Sent Events, événements envoyés par le serveur) : la connexion HTTP reste ouverte, le serveur pousse les tokens au fil de la génération
  • Latence totale : quasi inchangée
  • Latence perçue : effondrée — premier mot < 1 s
  • C'est pourquoi toutes les interfaces de chat IA streament

Notes orateur : Question rhétorique : « Vous préférez 8 secondes d'écran figé, ou un premier mot à 0,8 s et la suite qui défile ? » Mentionnez le coût caché : gestion d'erreur en cours de flux et filtrage de sortie plus délicats (on filtre quoi, si la réponse arrive par morceaux ?). Démo : onglet Monitoring de la page web, ligne TTFT.

Slide 15 — Chantier 3 : la facture se compte en tokens

Coût = tokens_entrée × prix_entrée + tokens_sortie × prix_sortie
  • 1 token ≈ ¾ de mot en anglais ; en français ≈ 1,3–2 tokens/mot ⚠
  • La sortie coûte 3 à 5× plus cher que l'entrée ⚠
  • Ordres de grandeur ⚠ (mi-2026) : ~0,1–1 $/M tokens d'entrée (petits modèles) à ~3–15 $/M (grands) — vérifiez la grille du jour

Notes orateur : N'enseignez pas les prix (ils changent chaque trimestre), enseignez la MÉTHODE et le réflexe « je vérifie la grille tarifaire avant de projeter un budget ». Transition : « Voyons les trois leviers pour faire fondre cette facture. » L'Exercice 1 vient de le faire vivre — appuyez-vous sur leurs chiffres.

Slide 16 — Levier 1 : le prompt caching

  • Le début du prompt est souvent identique à chaque requête : prompt système, documents, définitions d'outils
  • Le fournisseur le met en cache → tokens cachés facturés à une fraction du prix
  • Jusqu'à 90 % d'économie ⚠ sur la partie cachée
  • Règle d'or : stable au début, variable à la fin

Notes orateur : Chiffres de l'Exercice 1 : SupportBot passe de 9 000 à ~4 100 $/mois juste avec le cache. Piège classique : insérer un horodatage dynamique en tête de prompt système → cache invalidé à chaque requête, économie zéro. Le cache est géré par le fournisseur, mais c'est VOTRE structure de prompt qui le rend possible.

Slide 17 — Levier 2 : le routage de modèles

  • Toutes les requêtes ne se valent pas :
    • « Quels sont les horaires du support ? » → petit modèle
    • « Analyse ce contrat de 40 pages » → grand modèle
  • Un routeur (règles simples ou petit classifieur) dirige chaque requête vers le modèle le moins cher capable de la traiter
  • En pratique : 70–90 % ⚠ du trafic d'un assistant support relève du petit modèle

Notes orateur : C'est souvent LE plus gros levier : dans l'Exercice 1, le routage 80/20 fait passer la facture de ~4 100 à ~1 100 $/mois (−88 % vs naïf). Le risque : mal router une question difficile vers le petit modèle → prévoir une escalade (le petit modèle peut dire « je passe la main »).

Slide 18 — Levier 3 : plafonds et alertes budgétaires

  • Budget mensuel de tokens défini à l'avance
  • Alertes à 50 % / 80 % / 100 % du budget
  • À 100 % : coupure ou dégradation gracieuse (bascule vers le petit modèle)

« Une facture surprise de 20 000 € tue plus de projets IA qu'un bug. »

Notes orateur : Histoire vraie générique : la boucle d'agent qui tourne toute la nuit, ou le script de test lancé sur la mauvaise boucle. Sans plafond, on le découvre sur la facture. Avec plafond + alerte, on le découvre à 50 %. La dégradation gracieuse vaut mieux que la coupure sèche : le service continue, en mode économique.

Slide 19 — Chantier 4 : l'observabilité — journaliser TOUT

Pour chaque requête, consigner :

  • horodatage · identifiant de requête · version du prompt
  • modèle utilisé · tokens entrée/sortie
  • latence · statut (succès/erreur)

⚖️ RGPD (Règlement Général sur la Protection des Données) : durée de rétention définie, pseudonymisation si données personnelles

Notes orateur : Scénario : un utilisateur dit « hier, SupportBot m'a répondu n'importe quoi ». Sans journal : impossible à diagnostiquer. Avec journal : vous retrouvez la requête, le prompt exact, la version, le modèle — et vous reproduisez. La « version du prompt » dans le journal prépare la slide 22.

Slide 20 — La moyenne ment : pensez percentiles

  • p50 (médiane) : l'expérience typique
  • p95 : l'expérience d'1 utilisateur sur 20
  • p99 : les pires cas — ceux qui se plaignent et partent

Exemple : moyenne 1,2 s… et p99 à 9 s 😱

Les SLA (Service Level Agreement, engagement de niveau de service) s'écrivent en percentiles : « p95 < 3 s » — jamais « moyenne < 2 s »

Notes orateur : Démo web : le dashboard affiche p50/p95/p99 en direct — montrez le p95 qui décroche pendant que la moyenne reste sage. Phrase choc : « Vos utilisateurs ne vivent pas la moyenne ; chacun vit SA requête. »

Slide 21 — Alertes : chaque alarme a un mode d'emploi

Format d'une règle d'alerte :

SI taux d'erreur > 2 % PENDANT 5 min ALORS astreinte notifiée FAIT vérifier statut fournisseur, activer mode dégradé

Les 3 alertes de base :

  1. Taux d'erreur (seuil sur fenêtre glissante)
  2. Latence p95 (le SLA)
  3. Budget de tokens (50/80/100 %)

Notes orateur : Règle absolue : une alerte sans action documentée est du bruit — elle sera ignorée dès la 3e fois, y compris quand ce sera grave. Si personne ne sait quoi faire quand elle sonne : supprimez-la ou écrivez le mode d'emploi.

Slide 22 — Les prompts sont du code

  • Un mot changé dans un prompt peut casser 15 % des réponses
  • Donc les prompts sont :
    • versionnés (Git, l'outil de gestion de versions)
    • relus (revue de pairs, comme une PR — Pull Request, demande de fusion)
    • testés : la suite d'évaluations tourne à chaque PR → tests de régression de prompts
  • C'est la CI/CD (Intégration Continue / Déploiement Continu) appliquée à l'IA

Notes orateur : Pont avec les sessions précédentes : « Vous avez appris à construire des évals. Ici, on les branche sur le robinet : elles tournent automatiquement à chaque modification. » Spécificité IA : sorties non déterministes → tester des critères (format, présence d'infos clés, score d'un juge), pas une égalité stricte. Sans ça, les régressions se découvrent en production, via les utilisateurs.

Slide 23 — Chantier 5 & 6 : déployer, sécuriser, encaisser

Trois dernières questions :

  1. faire tourner le backend ? → patrons de déploiement
  2. Comment le protéger ? → sécurité
  3. Comment encaisser la charge ? → scaling & files d'attente

Notes orateur : Transition rapide — l'Exercice 2 a déjà fait manipuler ces choix. Cette partie consolide et nomme les patterns.

Slide 24 — Trois patrons de déploiement

☁️ Serverless 📦 Conteneur 🖥️ GPU dédié
Exemples Lambda, Cloud Functions Docker (+ Kubernetes) instance GPU cloud/on-prem
Gestion serveur zéro moyenne totale
Facturation à l'exécution à l'instance fixe, élevée
Montée en charge automatique à configurer manuelle
Limites durée max, démarrage à froid compétences requises coût + expertise
Idéal pour trafic irrégulier, petite équipe trafic soutenu et régulier auto-hébergement d'un modèle open-weights

Notes orateur : Point clé : le GPU (Graphics Processing Unit, processeur graphique) dédié n'est nécessaire QUE si vous hébergez le modèle vous-même — souveraineté des données ou volume extrême. Si vous appelez une API, le GPU est chez le fournisseur. 90 % des projets : serverless ou conteneur suffisent. Cold start : première requête après inactivité plus lente — acceptable ou non selon le budget de latence (boucle avec slide 12).

Slide 25 — Sécurité : les 3 règles non négociables

  1. 🔑 Clé API jamais côté client → toujours un backend intermédiaire, même minuscule
  2. 🧹 Assainir les entrées (input sanitization) : longueur max, détection d'injection de prompt
  3. 🚿 Filtrer les sorties (output filtering) : données sensibles, contenu inapproprié — avant affichage

Notes orateur : La règle 1 boucle avec la slide 8 — c'est voulu, répétition espacée. Règle 2 : rappel de la session sur l'injection de prompt — en production, l'attaquant existe vraiment. Règle 3 : le modèle peut régurgiter des données du contexte (ex. données d'un autre client si le RAG est mal cloisonné) — dernier filet avant l'écran de l'utilisateur.

Slide 26 — Monter en charge : horizontal + file d'attente

  • Horizontal : plusieurs instances identiques derrière un répartiteur de charge (load balancer) — plutôt qu'une machine géante
  • Pour l'asynchrone massif : architecture à file d'attente (queue)
Producteurs → [ File d'attente ] → Workers (au rythme du rate limit) → Résultats

Exemple : 50 000 documents/nuit, rate limit 500 req/min ⚠ → la file absorbe, les workers lissent, tout est prêt au matin

Notes orateur : La file d'attente réconcilie deux rythmes incompatibles : l'arrivée massive des tâches et le débit autorisé par le fournisseur. Bonus : résilience gratuite — si le fournisseur tombe 10 minutes, la file grossit puis se vide, rien n'est perdu. C'était le scénario B de l'Exercice 2.

Slide 27 — L'architecture de SupportBot en production

Employé → Passerelle API → Backend (serverless)
              │                 │  ├── cache de prompt (fournisseur)
              │                 │  ├── routeur petit/grand modèle
              │                 │  └── retry + backoff
              │                 ▼
              │          Fournisseur LLM (streaming SSE)
              └── Journalisation → Dashboard + alertes

10 000 req/jour · p95 < 3 s · ~1 100 $/mois ⚠ · zéro clé exposée

Notes orateur : Slide de synthèse — la boucle est bouclée : chaque composant répond à un problème vu dans la session. Faites nommer chaque brique par la salle : « À quoi sert la passerelle ? Le routeur ? Pourquoi le journal est-il branché partout ? » 2–3 minutes de récapitulation active.

Slide 28 — Ce qu'il faut retenir

  1. La production = les 80 % invisibles du travail
  2. 429 → backoff exponentiel + jitter ; jamais de retry sur 400/401/403
  3. Streaming SSE : la latence perçue s'effondre, pas la latence totale
  4. Coûts : caching (stable au début) + routage (bon modèle, bonne tâche) + plafonds
  5. Observabilité : journaux exhaustifs, percentiles, alertes actionnables
  6. Les prompts sont du code : versionnés, relus, testés en CI/CD
  7. Clé API jamais côté client

Notes orateur : Lisez lentement. Chaque ligne correspond à un chantier de la slide 6. Si un participant ne retient qu'une phrase : « la production est une discipline, pas un détail ».

Slide 29 — Quiz & Exit Tickets

  • 📝 Quiz : 10 QCM — 6 minutes
  • 🎫 Exit ticket : 1 question, 1 minute, avant de sortir

Notes orateur : Distribuez les 5 exit tickets en alternance dans la salle. Relevez-les : ils calibrent l'ouverture de la Session 9.

Slide 30 — La suite : Session 9

Vous savez déployer.

Mais comment savoir si ce que vous avez déployé est bon ?

Session 9 : évaluation avancée & amélioration continue
— évals en production, feedback utilisateurs, boucles d'amélioration

Notes orateur : Teaser en 30 secondes. Rappelez la question piège de l'Exercice 3 (le dashboard ne voit pas la qualité) : « C'est exactement le trou que la Session 9 va boucher. » Remerciez, restez disponible pour les questions individuelles.