Module L34 · Partie K · Ingénierie de l’IA
Choisir un modèle : une décision d’ingénierie, pas un classement.
Il existe des milliers de modèles ouverts, des dizaines d’API, et un classement public par semaine. Choisir, c’est traduire un besoin en exigences mesurables (qualité sur vos données, latence, coût, confidentialité, licence, maintenabilité), présélectionner des candidats, les évaluer sur votre banc d’essai (L32), et décider avec un coût total de possession. Ce chapitre donne la méthode, les grilles, les mathématiques de la décision multicritère et de l’arbitrage taille/qualité/coût, et les pièges (classements, licences, dépendance, obsolescence).
Durée : 2 séances · Prérequis : L27, L31, L32, L33. Objectifs : écrire une spécification de modèle ; présélectionner par contraintes dures puis évaluer ; construire une frontière de Pareto qualité/coût ; lire une licence et une carte de modèle ; documenter la décision et ses conditions de révision.
Ce que vous saurez faire à la fin
- Transformer « on veut un chatbot » en 8 exigences chiffrées.
- Présélectionner 3–5 candidats parmi des centaines, en 1 heure, sans les tester tous.
- Comparer sur votre banc d’essai avec IC et coût total, et tracer la frontière de Pareto.
- Rédiger une décision d’architecture (ADR) avec ses hypothèses et ses déclencheurs de révision.
Fiche de cours · Définitions
Définitions
Fiche de cours · Formules
Formules et grilles à connaître
Fiche de cours · Théorèmes et démonstrations
Ce qu’on peut démontrer sur le choix
01 / Spécifier
De « on veut de l’IA » à huit exigences chiffrées
| Dimension | Question | Exigence (exemple : assistant de support interne) | Type |
|---|---|---|---|
| Tâche | Que doit faire le modèle, exactement ? | Répondre à des questions sur 2 000 pages de doc, en français, avec citations | — |
| Qualité | Métrique, jeu, seuil (L32) | Exactitude ≥ 0,80 et fidélité ≥ 0,90 sur 300 questions annotées, IC bas ≥ 0,75 | Critère + seuil |
| Latence | SLO utilisateur | p95 ≤ 5 s pour 300 tokens de réponse | Dure |
| Volume et coût | Requêtes/jour, budget | 5 000 req/jour, ≤ 400 €/mois d’inférence | Dure |
| Confidentialité | Les données peuvent-elles sortir ? Où ? | Documents internes : hébergement UE ou local ; pas d’entraînement du fournisseur sur nos données | Dure |
| Licence et conformité | Usage commercial, redistribution, AI Act | Licence permettant l’usage interne commercial ; documentation du modèle disponible | Dure |
| Langue, modalité, contexte | Français ? images ? longueur ? | Français natif ; texte seul ; contexte ≥ 16 k tokens | Dure |
| Exploitation | Qui maintient ? quelle infra (L33) ? | 1 ingénieur à 20 % ; GPU 24 Go disponible ou API | Critère |
| Évolution | Fréquence de changement des données/du modèle | Doc mise à jour mensuellement ; changement de modèle ≤ 2 j d’effort | Critère |
| Risques | Ce qui ne doit jamais arriver | Pas d’invention de procédure de sécurité (refus + escalade) ; pas de fuite entre services | Dure |
Chaque ligne « dure » élimine ; chaque « critère » se mesure. Si une exigence n’a pas de métrique et de seuil, elle n’est pas encore une exigence : c’est un souhait.
02 / Présélectionner et comparer
Filtrer par contraintes dures, puis Pareto sur le banc d’essai — implémenté
02 / Présélectionner et comparer
Coût total de possession et taille optimale (Proposition 3)
03 / Lire
Lire une carte de modèle et une licence : la liste de contrôle
| Élément | Où | Ce qu’il faut vérifier | Signal d’alerte |
|---|---|---|---|
| Usage prévu / exclu | Carte de modèle | Votre cas est-il dans l’usage prévu ? Exclusions (médical, juridique, mineurs) ? | Aucune mention d’usages exclus |
| Données d’entraînement | Carte, article | Sources, langues, dates de coupure, filtrage, données personnelles, contamination des benchmarks | « Données web » sans détail ; pas de date |
| Évaluations | Carte, article, classements indépendants | Par tranche, en français, avec IC ; jeux privés ; robustesse ; sécurité (red teaming) | Un seul chiffre ; seulement des benchmarks publics |
| Licence du modèle | Fichier LICENSE, page HF | Usage commercial ? redistribution ? restrictions (utilisateurs, secteurs, attribution) ? clause de résiliation ? | Licence « custom » non relue par un juriste |
| Licence des données et des sorties | Idem + conditions d’utilisation API | Le fournisseur revendique-t-il des droits sur les sorties ? Entraîne-t-il sur vos données ? | « Nous pouvons utiliser vos données pour améliorer le service » |
| Sécurité et alignement | Carte, rapports | Taux de refus, sur-refus, jailbreaks connus, biais mesurés | Aucune évaluation de sécurité |
| Reproductibilité | Dépôt | Code d’entraînement, recette, poids intermédiaires, tokeniseur | Poids seuls |
| Maintenance | Historique | Fréquence des mises à jour, versions figées disponibles (API), politique de dépréciation | Modèles retirés sans préavis |
| Conformité | AI Act, RGPD, secteur | Catégorie de risque, documentation exigée, transparence (contenu généré), DPIA | Aucune documentation fournie |
04 / Décider
La décision d’architecture : modèle d’ADR et déclencheurs de révision
# ADR-007 : modèle pour l'assistant de support interne
Date : 2026-09 · Statut : accepté · Décideurs : équipe IA + DSI + juridique
Contexte
5 000 questions/jour sur la documentation interne (FR), données confidentielles, budget 400 €/mois,
SLO p95 5 s, 1 ingénieur à 20 % pour l'exploitation. Banc d'essai : 300 questions annotées + 60 refus + 40 adverses (L32).
Options considérées (contraintes dures : hébergement UE, licence commerciale, FR, contexte ≥ 16 k, coût ≤ 400 €/mois, p95 ≤ 5 s)
A. API modèle moyen (UE) exactitude 0,81 [0,78 ; 0,84] fidélité 0,93 350 €/mois p95 3,0 s
B. Ouvert 8B affiné LoRA (local) exactitude 0,83 [0,80 ; 0,86] fidélité 0,91 150 €/mois p95 2,5 s ops 1 200 €/mois
C. Ouvert 8B int4 (local) exactitude 0,79 [0,76 ; 0,82] fidélité 0,90 120 €/mois p95 2,5 s
(éliminés : API US — confidentialité ; 70B — coût ; 3B — qualité et FR)
Décision : A pour la mise en production initiale ; B préparé en parallèle.
Justification : A et B sont sur la frontière de Pareto ; la différence de qualité (2 pts) n'est pas significative (IC chevauchants) ;
A demande 3× moins d'exploitation et permet de livrer en 3 semaines ; le TCO 3 ans est équivalent (±10 %).
Le contrat API garantit : hébergement UE, pas d'entraînement sur nos données, version figée 12 mois.
Conséquences : dépendance à un fournisseur (mitigée par une couche d'abstraction et le banc d'essai réutilisable pour B) ;
coûts variables avec le volume ; données transitant chez un tiers (accord de traitement signé).
Déclencheurs de révision : volume > 15 000 req/j (seuil de rentabilité local) ; hausse de prix > 30 % ; dépréciation du modèle ;
exactitude mesurée < 0,78 deux semaines de suite (monitoring L35) ; exigence de hors-ligne ; B atteint 0,85 sur le banc.Un ADR tient sur une page, se relit en 5 minutes, et évite de refaire le débat dans six mois. Les déclencheurs transforment la décision en processus : on ne « choisit » pas un modèle une fois, on le re-choisit à chaque signal.
05 / Pièges
Les erreurs classiques de sélection
| Piège | Pourquoi c’est tentant | Conséquence | Parade |
|---|---|---|---|
| Choisir sur un classement public | Rapide, « objectif » | Proposition 2 : mauvaise prédiction sur votre tâche ; contamination | Banc d’essai privé avant toute décision |
| Tester avec 20 exemples | Pas de jeu annoté | IC de ± 20 points ; décision au bruit | ≥ 150–300 cas (L28, L32) ; annoter est l’investissement le plus rentable |
| Le plus gros modèle « au cas où » | Peur de manquer de qualité | Coût et latence ×10 pour 1–2 points ; Proposition 3 | Mesurer la qualité marginale ; commencer petit, monter si le banc l’exige |
| Ignorer la licence | « Tout le monde l’utilise » | Blocage juridique tardif, refonte | Licence lue et validée avant l’évaluation |
| Oublier l’exploitation | Le PoC marchait | Personne pour maintenir le GPU, les mises à jour, la sécurité | Compter les ops dans le TCO ; nommer un responsable |
| Verrouillage fournisseur | API pratique | Changer de modèle = réécrire les prompts, refaire l’évaluation | Abstraction (interface unique), prompts versionnés, banc réutilisable |
| Comparer à budgets inégaux | Un candidat a été réglé, l’autre non | Faux vainqueur | Même effort de prompt/affinage pour chaque candidat |
| Décider une fois pour toutes | Confort | Modèle obsolète en 12 mois | Déclencheurs de révision ; re-test trimestriel |
| Affiner avant d’avoir essayé le prompt et le RAG | L’affinage semble « sérieux » | Semaines perdues pour un gain que le RAG donnait | Escalade : prompt → RAG → LoRA → complet (L37) |
06 / Articles
Les articles et documents à lire
| Référence | Contribution | À retenir |
|---|---|---|
| Mitchell et al., Model Cards for Model Reporting, FAT* 2019 — 1810.03993 | Documentation standard d’un modèle | Exiger une carte ; en écrire une pour les vôtres |
| Gebru et al., Datasheets for Datasets, 2018 — 1803.09010 | Documentation des jeux de données | Provenance, consentement, usages (L36) |
| Bommasani et al., On the Opportunities and Risks of Foundation Models, 2021 — 2108.07258 | Le paradigme des modèles de fondation | Homogénéisation : un défaut du modèle se propage à toutes les applications |
| Liang et al., HELM, 2022 (L32) | Évaluation multi-métriques comparable | Base de présélection plus riche qu’un score |
| Hoffmann et al., Chinchilla, 2022 (L25) | Qualité vs taille vs données | Proposition 3 : la taille optimale est une question de coût |
| Grinsztajn et al., 2022 (L31) | Arbres vs réseaux sur tableaux | Le « modèle à la mode » perd souvent |
| Sculley et al., Hidden Technical Debt in ML Systems, 2015 | Coûts cachés | Le TCO est dominé par le système, pas le modèle |
| Nygard, Documenting Architecture Decisions, 2011 (blog) ; ThoughtWorks Technology Radar | Format ADR | Décision + contexte + conséquences + révision |
| Règlement (UE) 2024/1689 (AI Act) ; lignes directrices CNIL sur l’IA | Obligations par niveau de risque | Documentation, transparence, gestion des risques ; un critère de choix |
| Open Source Initiative, Open Source AI Definition (2024) ; licences RAIL | Ce que « ouvert » veut dire | Poids ouverts ≠ open source |
| Chatbot Arena, Open LLM Leaderboard, LiveBench, SEAL | Classements | Présélection seulement ; lire la méthodologie et la date |
TP guidé
TP — Sélection complète pour un cas réel (4 h)
- Cas. Choisir un besoin réel (support, extraction de documents, classification d’images de robot, transcription de réunions). Écrire les 8–10 exigences (tableau 01) avec métriques et seuils.
- Présélection. Lister 10 candidats (HF Hub, APIs) ; appliquer les contraintes dures avec justification ligne par ligne (licence lue !) ; garder 3–4.
- Banc d’essai. 150 cas annotés + 20 pièges ; même prompt/effort pour tous ; mesures L32 avec IC ; latence et coût réels (factures/mesures).
- Analyse. Frontière de Pareto ; score pondéré avec 3 jeux de poids (sensibilité) ; TCO 3 ans ; Proposition 3 sur vos chiffres.
- Décision. ADR d’une page avec déclencheurs de révision ; revue par un pair qui doit pouvoir reconstruire la décision à partir des chiffres seuls.
- Livrable. Exigences, tableau des candidats, banc d’essai reproductible, ADR.
Exercices
Exercices auto-corrigés
Exercice 1 — Frontière de Pareto multi-critères
Écrivez pareto(points, sens) : points = dict nom → tuple de valeurs, sens = tuple de "max"/"min" ; renvoie l’ensemble des noms non dominés. Testez sur 3 critères.
Correction
def pareto(points, sens):
def mieux_ou_egal(a, b): return all((x >= y) if s == "max" else (x <= y) for x, y, s in zip(a, b, sens))
def domine(a, b): return mieux_ou_egal(a, b) and a != b
return {n for n, p in points.items() if not any(domine(q, p) for m, q in points.items() if m != n)}Exercice 2 — Sensibilité du score pondéré
Écrivez vainqueurs(candidats, normalise, grille_poids) qui renvoie le dict {vainqueur: nombre de jeux de poids où il gagne} pour une grille de poids (toutes les combinaisons (wq, wc) avec pas 0,1, wq + wc = 1), avec deux normalisations : "minmax" et "seuils" (q : (q − 0,75)/0,15 ; c : 1 − c/2000). Montrez que la normalisation change le vainqueur pour certains poids (Proposition 1).
Correction
def vainqueurs(candidats, normalise):
from collections import Counter
qs = np.array([v[0] for v in candidats.values()]); cs = np.array([v[1] for v in candidats.values()]); noms = list(candidats)
if normalise == "minmax": uq = (qs - qs.min()) / (qs.max() - qs.min()); uc = (cs.max() - cs) / (cs.max() - cs.min())
else: uq = (qs - 0.75) / 0.15; uc = 1 - cs / 2000
res = Counter()
for wq in np.round(np.arange(0, 1.01, 0.1), 1): res[noms[int(np.argmax(wq * uq + (1 - wq) * uc))]] += 1
return resExercices
Exercices auto-corrigés (suite)
Exercice 3 — TCO et seuil de rentabilité
Écrivez tco(option, mois) (dict avec inference_mois, fixe, ops_mois, risque) et seuil_volume(prix_api_par_req, cout_fixe_local_mois, ops_local_mois, cout_var_local_par_req) : volume mensuel V* où API et local coûtent pareil (None si le local ne devient jamais rentable).
Correction
def tco(option, mois): return option["inference_mois"] * mois + option["fixe"] + option["ops_mois"] * mois + option["risque"]
def seuil_volume(prix_api, fixe_local, ops_local, var_local):
if prix_api <= var_local: return None
return (fixe_local + ops_local) / (prix_api - var_local)Exercice 4 — Valeur de l’information d’un test (Proposition 4)
Écrivez test_rentable(p_echec, cout_integration, cout_test) et p_min(cout_integration, cout_test) (probabilité d’échec à partir de laquelle le test est rentable). Puis taille_test(delta, p) = nombre de cas pour détecter un écart delta d’exactitude autour de p (16p(1−p)/Δ²), et le coût du test à c € par cas annoté.
Correction
def test_rentable(p_echec, cout_integration, cout_test): return cout_test < p_echec * cout_integration
def p_min(cout_integration, cout_test): return cout_test / cout_integration
def taille_test(delta, p): return 16 * p * (1 - p) / delta ** 2Fiche de cours · Exercices corrigés
Exercices corrigés (rédaction)
Vérification
Quelle est la première étape valide pour choisir un modèle ?
Deux questions supplémentaires
1. Pourquoi exiger la borne basse de l’IC plutôt que la moyenne ? Pour que l’exigence soit satisfaite avec une confiance connue, pas par chance d’échantillonnage.
2. À quoi sert un ADR ? À rendre la décision reconstructible, discutable, et révisable sur des déclencheurs explicites.
Référence
Les mots à retenir
| Mot | Définition |
|---|---|
| Contrainte dure / critère | Élimine / se pondère. |
| Frontière de Pareto | Candidats non dominés ; le choix s’y fait selon les priorités. |
| Score pondéré | Outil de tri, sensible à la normalisation et aux poids. |
| TCO | Inférence + affinage + évaluation + intégration + ops + risques. |
| Carte de modèle | Usage, données, évaluations, limites, licence. |
| Poids ouverts ≠ open source | Lire la licence ; données et sorties sont à part. |
| ADR | Décision documentée avec déclencheurs de révision. |
| Valeur de l’information | Tester avant d’intégrer si Ctest < p × Cintégration. |
Suite
Le modèle est choisi et déployé. Maintenant il faut le garder vivant.
Chapitre suivant : maintenir un modèle — dérive des données et des concepts, monitoring, ré-entraînement, versions, retours utilisateurs, incidents, et le coût du silence.