Checklist de déploiement d'un modèleModel deployment checklist

À parcourir avant d'annoncer « c'est en production ». Chaque ligne est une chose qui a réellement cassé quelque part. Run through this before announcing "it's in production". Every line is something that has genuinely broken somewhere.

1. Export & artefactsExport & artefacts

🎯 Fusionner ou garder l'adaptateur — mesuré, pas supposé (5 passages, médiane, 2026-09-18) : fusionner donne 194,4 tok/s et ne stocke que le modèle (941 Mo) ; garder l'adaptateur donne 169,7 tok/s mais ne coûte que 8,3 Mo de plus et se change sans reconvertir. Fusionner gagne 15 % de débit. Sortie identique dans les deux cas. Choisissez selon votre contrainte (débit max → fusionner ; variantes en test → adaptateur), et mesurez sur votre machine : l'écart dépend du modèle et du moteur. Merge or keep the adapter — measured, not assumed (5 runs, median, 2026-09-18): merging gives 194.4 tok/s and stores only the model (941 MB); keeping the adapter gives 169.7 tok/s but costs only 8.3 MB more and swaps without reconverting. Merging gains 15 % throughput. Identical output either way. Choose by your constraint (max throughput → merge; variants under test → adapter), and measure on your machine: the gap depends on the model and the engine.
⚠️ Le message système fait partie de l'artefact. Un modèle affiné doit être servi avec le même message système que celui utilisé à l'entraînement. Testé sans lui, il ne sait plus quelle tâche on lui demande et répond en prose — sans qu'aucune erreur ne soit levée. Extrayez-le du dataset (source de vérité) et passez-le au Modelfile, plutôt que de le retaper de mémoire. The system message is part of the artefact. A fine-tuned model must be served with the same system message used in training. Tested without it, the model no longer knows the task and answers in prose — with no error raised. Extract it from the dataset (source of truth) and pass it to the Modelfile, rather than retyping it from memory.

2. Vérification du service — par l'API, pas par le processusService verification — via the API, not the process

# 1. Le service répond-il ? (jamais par pgrep : il matche votre propre commande)
curl -s -m 5 $HOST/v1/models

# 2. Fait-il un VRAI travail ?
curl -s $HOST/v1/chat/completions -d '{"model":"...","messages":[{"role":"user","content":"ping"}],"max_tokens":5}'

# 3. Le bon processus détient-il le port, et est-il PLUS RÉCENT que votre patch ?
ss -tlnp | grep 
ps -eo pid,lstart,cmd | grep 

# 4. Les ressources consommées correspondent-elles au calcul du lab 2 ?
nvidia-smi --query-gpu=index,memory.used,utilization.gpu --format=csv
ollama ps
Deux pièges vérifiésTwo verified traps

3. Garde-fousGuardrails

4. ObservabilitéObservability

5. Capacité & coûtCapacity & cost

6. Retour arrièreRollback

7. Modèle de fiche de modèleModel card template

Nom / version      : support-json:v1
Modèle de base     : llama3.1:8b (Q4_K_M, 4,92 Go)
Méthode            : QLoRA, r=16, alpha=32, lr=2e-4, 2 époques
Dataset            : dataset_tickets.jsonl
                     sha256=...  |  255 ex. entraînement, 45 validation
Gabarit de chat    : celui du modèle de base (vérifié à l'œil)
ÉVALUATION (jeu tenu à l'écart, N cas)
  base             : JSON valide _/_  champs _/_  fuites _
  affiné           : JSON valide _/_  champs _/_  fuites _
  -> gain mesuré   : ...
COÛT / LATENCE     : __ tok/s, TTFT __ ms (matériel : ...)
RETOUR ARRIÈRE     : servir  (base intacte, adaptateur conservé)
LIMITES CONNUES    : ...