diff --git a/MyIA.AI.Notebooks/GenAI/PostTraining/PT_02_sft_baseline.ipynb b/MyIA.AI.Notebooks/GenAI/PostTraining/PT_02_sft_baseline.ipynb index 2efbd2f133..cc6ca4406f 100644 --- a/MyIA.AI.Notebooks/GenAI/PostTraining/PT_02_sft_baseline.ipynb +++ b/MyIA.AI.Notebooks/GenAI/PostTraining/PT_02_sft_baseline.ipynb @@ -1030,7 +1030,6 @@ "step 3: loss = 1.7523 grad_norm = 2.203 mean_token_accuracy = 0.6054\n", "train_loss moyen = 1.949\n", "```\n", - "\n", "**Verdict honnête** : sur 3 steps le loss **oscille** (1.92 → 2.17 → 1.75) au lieu de décroître — 50 exemples, c'est trop court pour un SFT concluant. La section 8 montre toutefois qu'après la cure d'état (#12716), la génération SFT reste **cohérente** — pas d'effondrement : 3 steps produisent une reformulation légèrement différente, pas une sortie dégénérée. Un modèle déjà instruct-tuned (comme Qwen3.5-0.8B) peut être fragilisé par une LR LoRA agressive (2e-4) sur un petit subset — **hypothèse qualitative** (le grad_norm 4.78 au step 2 signale une optimisation turbulente), aucune mesure disjointe ne l'établit. Pour observer la convergence classique (loss décroissant), il faut un dataset plus grand (quelques milliers d'exemples) et plusieurs epochs — la structure du notebook est la même, seule l'échelle change.\n" ] }, @@ -1254,7 +1253,6 @@ "Piège d'état (mesuré, #12716) : `SFTTrainer` laisse le **gradient checkpointing actif** et `use_cache=False` sur le modèle après `trainer.train()`. Pour un hybride Qwen3.5 (couches d'attention linéaire), générer dans cet état réinitialise l'état récurrent à chaque step et produit des sorties dégénérées (« UnESG. ») — le warning `use_cache=True is incompatible with gradient checkpointing` en tête de sortie en était la signature. On réinitialise l'état d'inférence avant de générer : l'état post-entraînement n'est pas l'état d'inférence.\n", "\n", "Après training, on compare deux completions sur un prompt nouveau, jamais vu en training : une fois en utilisant `base_model` (sans adapters), une fois en utilisant `peft_model` (avec adapters LoRA SFT actifs).\n", - "\n", "**Pattern observé sur ce run (post-cure #12716, verdict honnête)** : les deux générations sont **cohérentes**. Le `base_model` (adapters désactivés) définit correctement un Reward Model ; le `peft_model` (adapters SFT actifs) répond aussi de façon fluide, avec une formulation légèrement plus maladroite (« modèle de prévisionnement »). **Pas d'effondrement** : le `UnESG.` cité plus haut est l'ancien symptôme d'état **pré-#12716**, disparu avec la cure — il ne doit pas être lu comme un résultat du SFT courant.\n", "\n", "Trois choses à bien séparer :\n", @@ -1611,7 +1609,7 @@ "| LR LoRA | 2e-4 | 2e-4 (rapporté) |\n", "| Format chat | ChatML Qwen (`<\\|im_start\\|>`/`<\\|im_end>`) | `User:/Assistant:` + EOT |\n", "| Loss masking | `completion_only_loss=True` (TRL) | `ignore_index=-100` sur prompt |\n", - "| Convergence sur 3 steps | loss 2.18 → 1.89 (oscillant) | non publié |\n", + "| Convergence sur 3 steps | loss 1.92 → 1.75 (oscillant, train_loss 1.949) | non publié |\n", "\n", "Le verdict qualitatif est aligné : **avec un SFT court et peu de données,\n", "RL ne crée pas la qualité — il l'amplifie ou la dégrade**. PT-04 documente\n",