| """ |
| push_model_to_hub.py — Envoie le modèle fine-tuné sur le Hugging Face Hub. |
| =========================================================================== |
| |
| POURQUOI CE SCRIPT EXISTE : |
| Le modèle entraîné pèse ~270 Mo. GitHub refuse les fichiers de plus de |
| 100 Mo : impossible de versionner les poids avec le code. La solution |
| standard de l'écosystème ML : |
| |
| CODE -> GitHub (léger, versionné, revu en PR) |
| POIDS -> Hugging Face Hub (stockage de modèles, gratuit, versionné aussi) |
| |
| Au déploiement, le Space lit la variable d'environnement MODEL_ID |
| (ex: "rima/avissense-distilcamembert") et télécharge les poids depuis |
| le Hub au démarrage de l'API. Code et poids voyagent séparément mais |
| se retrouvent en production. |
| |
| PRÉREQUIS (une seule fois) : |
| 1. Créer un compte sur https://huggingface.co |
| 2. Créer un token d'accès : Settings > Access Tokens > type "Write" |
| (le type "Read" ne suffit pas : on veut ÉCRIRE sur le Hub) |
| 3. Se connecter en local : huggingface-cli login (coller le token) |
| |
| COMMENT LANCER (depuis la racine du projet) : |
| python scripts/push_model_to_hub.py --repo VOTRE_PSEUDO/avissense-distilcamembert |
| """ |
|
|
| |
| import argparse |
| import sys |
| from pathlib import Path |
|
|
| from transformers import AutoModelForSequenceClassification, AutoTokenizer |
|
|
| |
| PROJECT_ROOT = Path(__file__).resolve().parent.parent |
| MODEL_DIR = PROJECT_ROOT / "model" / "sentiment_model" |
|
|
|
|
| def main(): |
| parser = argparse.ArgumentParser(description="Pousse le modèle fine-tuné sur le HF Hub") |
| |
| |
| parser.add_argument("--repo", required=True, |
| help="Nom du repo Hub, ex : rima/avissense-distilcamembert") |
| args = parser.parse_args() |
|
|
| |
| if not MODEL_DIR.exists(): |
| sys.exit(f"Erreur : modèle introuvable dans {MODEL_DIR}. Lancez d'abord train.py.") |
|
|
| |
| |
| print(f"Chargement du modèle local depuis {MODEL_DIR} ...") |
| model = AutoModelForSequenceClassification.from_pretrained(str(MODEL_DIR)) |
| tokenizer = AutoTokenizer.from_pretrained(str(MODEL_DIR)) |
|
|
| |
| |
| |
| |
| print(f"Upload vers https://huggingface.co/{args.repo} ...") |
| model.push_to_hub(args.repo) |
| tokenizer.push_to_hub(args.repo) |
| print("Terminé ! Le modèle est en ligne sur le Hub.") |
| print(f"Sur le Space, réglez la variable : MODEL_ID = {args.repo}") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|