Qwen2.5-7B-base2instruct (SFT → DPO → RLVR à récompense graduée)

Modèle conversationnel obtenu en post-entraînant nous-mêmes le modèle de base Qwen/Qwen2.5-7B (non-instruct) via un pipeline complet SFT → DPO → RLVR, sur un seul GPU H100 80 Go, puis comparé à l'instruct officiel Qwen/Qwen2.5-7B-Instruct.

Cette version finale utilise un RLVR de suivi d'instructions à récompense GRADUÉE (cf. plus bas), qui apporte le meilleur score IFEval du projet.

📦 Code, scripts et recette complète : https://github.com/AlexandreFenyo/qwen2.5-7b-base2instruct Checkpoints intermédiaires : SFT · DPO

Pipeline

Étape Méthode Données
1. SFT Full fine-tuning (TRL), ChatML, loss réponse seule, liger-kernel allenai/tulu-3-sft-mixture (180k)
2. DPO DPO-LoRA (TRL), référence en direct HuggingFaceH4/ultrafeedback_binarized (10k)
3. RLVR GRPO-LoRA, récompenses vérifiables : maths (gsm8k) + suivi d'instructions (contraintes vérifiées par programme) gsm8k + prompts multi-contraintes générés

Résultats (lm-evaluation-harness, backend vLLM)

modèle IFEval (prompt strict) GSM8K (flexible) MMLU
base Qwen2.5-7B 27.4 83.0 71.8
+ SFT 44.9 77.5 69.1
+ DPO 44.7 77.1 69.9
+ RLVR (maths seul) 45.1 77.4 69.9
+ RLVR (multi binaire) 44.7 76.9 69.9
+ RLVR (multi GRADUÉ — ce modèle) 49.5 76.8 69.9
instruct officiel 71.9 84.7 68.8

La leçon clé : récompense binaire → graduée

Un premier RLVR de suivi d'instructions avec récompense binaire (1 contrainte/prompt) a échoué (IFEval inchangé). Cause : effondrement de l'avantage GRPO — dans chaque groupe de générations, toutes réussissent (contrainte facile) ou toutes échouent (dure) → écart-type nul → gradient nul (frac_reward_zero_std → 1.0). Le correctif : prompts multi-contraintes + récompense graduée (fraction satisfaite) → variance intra-groupe non nulle → gradient vivant → IFEval 44.7 → 49.5.

⚠️ Piège d'éval GSM8K : strict-match exige le format #### N et pénalise injustement Qwen-Instruct (21 % au lieu de 84.7 %). Chiffres ci-dessus en flexible-extract, 1024 tokens.

Lecture honnête

Le pipeline produit un vrai modèle instruct ; le gain vient surtout du SFT (IFEval 27→45) puis du RLVR gradué (+4.8). On n'égale pas l'instruct officiel sur IFEval (49.5 vs 71.9) : celui-ci s'appuie sur une échelle de données très supérieure (~1M+ SFT, RLVR multi-domaines massif). Aucune régression MMLU.

Utilisation

from transformers import AutoModelForCausalLM, AutoTokenizer
tok = AutoTokenizer.from_pretrained("fenyo/Qwen2.5-7B-base2instruct")
model = AutoModelForCausalLM.from_pretrained("fenyo/Qwen2.5-7B-base2instruct", torch_dtype="bfloat16", device_map="auto")
msgs = [{"role": "user", "content": "Explique en deux phrases pourquoi le ciel est bleu."}]
inputs = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
print(tok.decode(model.generate(inputs, max_new_tokens=200)[0][inputs.shape[1]:], skip_special_tokens=True))

Format ChatML, identique à l'instruct officiel.

Crédits

Base/instruct de référence : Qwen2.5 (Alibaba, Apache-2.0). Entraînement : TRL (Hugging Face). Recette et expérience : github.com/AlexandreFenyo/qwen2.5-7b-base2instruct.

Downloads last month
44
Safetensors
Model size
8B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for fenyo/Qwen2.5-7B-base2instruct

Base model

Qwen/Qwen2.5-7B
Finetuned
(871)
this model

Datasets used to train fenyo/Qwen2.5-7B-base2instruct