Spaces:
Running
Running
|
Download docs/LEARNING.md from RDS777/TARGET_SPACE: direct link, hf CLI and curl.
- Browser
- Download file 6.39 kB
-
https://huggingface.co/spaces/RDS777/TARGET_SPACE/resolve/main/docs/LEARNING.md
- Command line
-
hf download hf://spaces/RDS777/TARGET_SPACE/docs/LEARNING.md
-
curl -L -o LEARNING.md https://huggingface.co/spaces/RDS777/TARGET_SPACE/resolve/main/docs/LEARNING.md
6.39 kB
| # Apprentissage continu d'UNIQUE (tout sur Hugging Face) | |
| > **Obsolète depuis la v4.1** : le mode Jobs (pilote automatique, professeur, alimentation, export) est retiré. Le fonctionnement actuel est décrit dans [ADR-004](ADR-004-LOCAL.md). | |
| ``` | |
| OpenCodeInstruct ─▶ job d'alimentation (CPU, chaque heure) ─┐ | |
| Space M.O.U.H. (sessions avec tests) ───────────────────────┴─▶ dataset privé RDS777/mouh-trajectories | |
| │ | |
| ┌───────────── job d'entraînement (GPU T4, relancé chaque heure s'il ne tourne pas) ◀┘ | |
| │ boucle : SFT (TRL) → porte pass@1 → GRPO récompensé par pytest (TRL) → porte → … | |
| ▼ | |
| adaptateur promu RDS777/unique-qwen2.5-coder-0.5b-lora ─▶ redémarrage du Space (générateur « UNIQUE ») | |
| progression toutes les ~20 s ─▶ bucket privé RDS777/unique-progress ─▶ panneau en direct dans le Space | |
| ``` | |
| ## La boucle | |
| 1. **Alimentation** (`jobs/ingest_tasks.py`, CPU `cpu-upgrade`, chaque heure) : tranche suivante de 4 000 lignes de | |
| `nvidia/OpenCodeInstruct` (CC BY 4.0), tests convertis en pytest, solutions **ré-exécutées**, seules celles qui passent | |
| sont ajoutées. | |
| 2. **SFT** (`trl.SFTTrainer`, LoRA r=16, perte sur la réponse seulement) sur la tranche suivante de 2 000 exemples, | |
| en repartant de l'adaptateur en service. | |
| 3. **Porte** : pass@1 réel (tests pytest exécutés) sur un **heldout figé** de 100 tâches jamais vues. Promotion seulement si | |
| le candidat fait strictement mieux que l'adaptateur en service (ou que la base au départ). | |
| 4. **GRPO** (`trl.GRPOTrainer`) : 4 solutions générées par tâche, récompense = 1 si les tests passent, 0,1 si le code | |
| compile mais échoue, 0 sinon. Même porte. | |
| 5. Après une promotion, le Space redémarre et charge le nouvel adaptateur. | |
| Un passage dure au plus 11 h 30 (UNIQUE_RUN_HOURS) ; le job planifié chaque heure relance la boucle dès qu'aucun passage ne tourne | |
| (jamais deux à la fois). Un passage qui démarre alors que le budget GPU du jour est épuisé s'arrête aussitôt. | |
| ## Améliorations (v3) et interrupteurs de retour arrière | |
| Chaque amélioration se coupe par une variable du Space (Settings → Variables), sans ré-uploader de fichier : | |
| le Space recrée alors le job concerné avec l'ancien comportement. | |
| | Amélioration | Ce qu'elle fait | Interrupteur (mettre `0` pour revenir en arrière) | | |
| |---|---|---| | |
| | Curriculum adaptatif | GRPO choisit en priorité les tâches que l'élève réussit *parfois* (les seules qui donnent un signal) ; statistiques par tâche gardées d'un passage à l'autre | `UNIQUE_CURRICULUM` | | |
| | Vrais échecs | les échecs d'UNIQUE pendant GRPO sont enregistrés avec leur vraie trace pytest (`failures/` du dataset) | `UNIQUE_SAVE_FAILURES` | | |
| | Réflexion fondée sur les tests | 25 % des prompts GRPO demandent de corriger un échec réel à partir de sa trace | `GRPO_REPAIR_FRACTION` (= `0`) | | |
| | Modèle maître | job toutes les 2 h : 30 tâches nouvelles au niveau de l'élève (facile / moyen / difficile selon son score), gardées seulement si la solution passe ses tests **et** si les tests tuent au moins 60 % des mutants (test par mutation) ; + correction des vrais échecs, validée par pytest | `UNIQUE_TEACHER` (supprime le job) | | |
| | Benchmark indépendant | HumanEval (164 tâches, jamais utilisé à l'entraînement) mesuré pour la base et pour chaque nouvel adaptateur en service ; les sessions qui partagent 13 mots consécutifs avec HumanEval sont retirées de l'entraînement | `UNIQUE_BENCHMARK` | | |
| | Mémoire à long terme | recherche BM25 des 2 tâches validées les plus proches, données en exemple ; jamais la tâche elle-même ni un quasi-doublon. Mesurée avec / sans sur le heldout (panneau) | mesure : `UNIQUE_MEMORY_AB` ; utilisation dans le Space : `UNIQUE_MEMORY=1` seulement si le panneau affiche « gain » | | |
| Modèle maître : `UNIQUE_TEACHER_MODEL` (défaut `Qwen/Qwen3-Coder-30B-A3B-Instruct`), appelé via les Inference Providers | |
| de Hugging Face, facturé à l'usage sur votre compte. Le jeton `HF_TOKEN` doit avoir le droit « Make calls to Inference | |
| Providers ». Sans ce droit, le job du maître échoue proprement et les autres continuent. | |
| Retour complet à la version précédente : remettre les fichiers de la version « boucle continue » (onglet Files → | |
| historique de chaque fichier), puis redémarrer le Space ; les jobs sont recréés automatiquement. | |
| ## Panneau dans le Space | |
| En haut de la page : phase en cours avec barre de progression et temps restant, budget GPU du jour, perte et | |
| récompense, score base / meilleur en service, courbe des scores avec les promotions. Rafraîchi toutes les 15 s. | |
| ## Réglages (Settings → Variables and secrets) | |
| | Variable | Défaut | Effet | | |
| |---|---|---| | |
| | `UNIQUE_AUTOTRAIN` | — | `1` = accord pour les dépenses ; sans elle, rien ne démarre | | |
| | `UNIQUE_MAX_GPU_HOURS_PER_DAY` | `24` | plafond quotidien d'heures GPU (24 = non-stop) | | |
| | `UNIQUE_FLAVOR` | `t4-small` | matériel d'entraînement | | |
| | `UNIQUE_INGEST` | `1` | `0` coupe l'alimentation | | |
| | `INGEST_SOURCE` | `opencodeinstruct` | `kodcode` possible (licence CC BY-NC : non commercial) | | |
| Le secret `UNIQUE_ADMIN_KEY` protège les boutons « Alimenter maintenant » et « Entraîner maintenant ». | |
| Pour tout arrêter : suspendre les deux jobs sur huggingface.co/settings/jobs (retirer la variable ne suffit pas). | |
| ## Coûts | |
| `t4-small` : 0,40 $/h. En non-stop : environ 9,60 $ par jour, 290 $ par mois. L'alimentation CPU coûte quelques | |
| centimes par jour. Réduire `UNIQUE_MAX_GPU_HOURS_PER_DAY` plafonne la dépense. | |
| ## Limites | |
| - Non mesuré en conditions réelles : durée d'un cycle sur T4, part des tâches qui passent la re-vérification, gain réel. | |
| - GRPO sur un modèle de 0,5 Md n'apprend que si certaines générations réussissent déjà : sur les tâches trop dures, | |
| toutes les récompenses sont nulles et la phase n'apporte rien (visible dans le panneau, `reward` proche de 0). | |
| - « Certifié » = passe les tests fournis. La qualité du modèle dépend de celle des tests. | |
| - Le heldout est figé pour que les scores restent comparables ; s'il est agrandi, la base et l'adaptateur en service | |
| sont re-mesurés avant toute nouvelle promotion. | |