Fine-Tuning de Phi-2 pour la Data Science (Pandas & Matplotlib)
Ce dépôt contient les poids de l'adaptateur LoRA pour le modèle Microsoft Phi-2 (2.7B). Ce projet explore l'adaptation d'un LLM dans un environnement matériel contraint, ciblant spécifiquement la génération de code Python avec les bibliothèques pandas et matplotlib.
Note : Le code source complet de l'entraînement, les scripts de filtrage des données et les configurations se trouvent sur le dépôt GitHub du projet : https://github.com/Fitz-V/Projet_CMI_L2_Finetune_Phi2 .
Architecture et Paramètres Techniques
- Modèle de base :
microsoft/phi-2(chargé enfloat16) - Méthode d'adaptation : LoRA (Low-Rank Adaptation) avec un rang $r=16$ et $\alpha=32$.
- Corpus d'entraînement : Sous-ensemble filtré de The Stack Dedup (isolation stricte des scripts Python contenant
import pandasouimport matplotlib). - Statut de l'entraînement : Interrompu au Chunk 0 (voir section Limites).
- Optimisation VRAM : Optimiseur
paged_adamw_32bitet accumulation de gradients (Batch effectif de 16).
Utilisation et Inférence
Pour utiliser ce modèle, vous devez charger le modèle de base Phi-2 et y fusionner cet adaptateur LoRA via la bibliothèque peft.
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base_model_id = "microsoft/phi-2"
peft_model_id = "jhondoe789/projet_cmi_L2_phi-2_lora" #
# 1. Charger le tokenizer et le modèle de base
tokenizer = AutoTokenizer.from_pretrained(peft_model_id)
base_model = AutoModelForCausalLM.from_pretrained(base_model_id, device_map="auto", torch_dtype="auto")
# 2. Charger et appliquer l'adaptateur LoRA
model = PeftModel.from_pretrained(base_model, peft_model_id)
# 3. Inférence (Rappel : format Causal LM, pas d'instructions)
prompt = "import pandas as pd\nimport matplotlib.pyplot as plt\n\n# Load the dataset and plot a histogram of the 'age' column\n"
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
Évaluation et Analyse Critique (Distribution Shift)
Les performances ont été mesurées via la métrique Pass@1 sur le benchmark DS-1000.
| Modèle | Pass@1 moyen (%) |
|---|---|
| GPT-4-turbo | 53.9 |
| GPT-3.5-turbo (0125) | 39.4 |
| GPT-3.5-turbo (0613) | 38.6 |
| Phi-2 fine-tuné (chunk0) | 10.2 |
| Mistral 7B | 10.1 |
| Phi-2 base | 10.0 |
Analyse des résultats :
Le fine-tuning ciblé a permis l'émergence de capacités non nulles sur des bibliothèques tierces (Scipy, Sklearn), mais le score global stagne par rapport au modèle de base (10.2% vs 10.0%).
Cette stagnation s'explique par un biais d'alignement majeur (Distribution Shift) entre la phase d'apprentissage et l'évaluation : 1. L'entraînement (Causal LM) : Le modèle a ingéré du code source brut. Ses poids ont été ajustés pour la prédiction stricte du token suivant (auto-complétion de scripts). 2. L'évaluation (Instruction-following) : DS-1000 interroge les modèles à l'aide d'instructions complexes en langage naturel (ex: "Write a python function to..."). Le modèle n'ayant bénéficié d'aucune phase d'Instruction Tuning, la dégradation de certaines métriques spécifiques (comme la baisse sur matplotlib) illustre une rupture de distribution plutôt qu'une régression syntaxique : le modèle échoue à interpréter la structure de la requête, masquant ainsi ses réelles capacités de génération de code.
Limites et Biais
Outre l'absence d'Instruction Tuning mentionnée ci-dessus, ce modèle n'a été entraîné que sur une fraction initiale du corpus prévu (Chunk 0) en raison de contraintes matérielles. Par conséquent : - Il existe un risque de surapprentissage localisé sur la distribution spécifique de ce sous-ensemble de données. - Les performances peuvent se dégrader fortement si le contexte s'éloigne des schémas de code prédominants dans ce premier lot de données.
- Downloads last month
- 24
Model tree for jhondoe789/projet_cmi_L2_phi-2_lora
Base model
microsoft/phi-2