Exercices Entraîner son LLM Distillation simulée
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Distillation simulée

La distillation, c'est une technique où un gros modèle (le "professeur") génère des réponses de haute qualité, et un petit modèle (l'"élève") apprend à les reproduire via fine-tuning. C'est comme ça qu'on obtient des modèles petits et rapides qui marchent presque aussi bien que les gros.

Concrètement, le processus est le suivant :
1. Tu prends une liste de questions
2. Tu fais répondre le gros modèle (GPT-4, Claude) sur chaque question
3. Tu formates les paires question/réponse en dataset de fine-tuning
4. Tu entraînes le petit modèle (GPT-4o-mini) sur ce dataset

Dans cet exercice, on simule la distillation. Tu reçois une fonction "professeur" qui prend une question et renvoie une réponse. Tu dois l'utiliser pour générer un dataset complet.

Écris une fonction distiller(questions, professeur, system_prompt, note_qualite=None) qui :
1. Appelle la fonction professeur(question) pour chaque question
2. Si note_qualite est fourni (une fonction qui prend une réponse et renvoie un score entre 0 et 1), ne garde que les réponses avec un score >= 0.7
3. Formate chaque paire en exemple d'entraînement (format messages avec system, user, assistant)
4. Renvoie un dict avec "dataset" (la liste d'exemples), "total_genere" (nombre de réponses générées), et "total_retenu" (nombre de réponses gardées après filtrage qualité)

Exemple :

def prof(q):
return "Réponse détaillée à : " + q

distiller(["Q1", "Q2"], prof, "Tu es un expert.")
renvoie {"dataset": [2 exemples formatés], "total_genere": 2, "total_retenu": 2}

Tests (4/5)

Distillation basique
def prof(q): return 'Réponse à ' + q
r = distiller(['Q1', 'Q2'], prof, 'Sois précis.')
assert len(r['dataset']) == 2
assert r['total_genere'] == 2
assert r['total_retenu'] == 2
Format des exemples
def prof(q): return 'R'
r = distiller(['Q'], prof, 'System')
ex = r['dataset'][0]
assert ex['messages'][0] == {'role': 'system', 'content': 'System'}
assert ex['messages'][1] == {'role': 'user', 'content': 'Q'}
assert ex['messages'][2] == {'role': 'assistant', 'content': 'R'}
Filtrage par qualité
def prof(q): return q * 2
def note(r): return 0.8 if len(r) > 4 else 0.3
r = distiller(['AB', 'ABCDEF'], prof, 'sys', note_qualite=note)
assert r['total_genere'] == 2
assert r['total_retenu'] == 1
Tout filtré
def prof(q): return 'mauvais'
def note(r): return 0.1
r = distiller(['Q1', 'Q2'], prof, 'sys', note_qualite=note)
assert r['total_retenu'] == 0
assert len(r['dataset']) == 0

+ 0 tests cachés

Indices (3 disponibles)

solution.py