TARGET_SPACE / docs /LEARNING.md
RDS777's picture
Upload 115 files
884b5f8 verified
|
Raw History Blame Contribute Delete
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.

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.