# Apprentissage automatique d'UNIQUE ``` Space M.O.U.H. ──(chaque session avec tests)──▶ dataset privé RDS777/mouh-trajectories ▲ │ │ redémarrage après promotion ▼ job HF planifié (t4-small, hebdomadaire) └──── adaptateur promu ◀── porte pass@1 ◀── LoRA sur Qwen/Qwen2.5-Coder-0.5B-Instruct RDS777/unique-qwen2.5-coder-0.5b-lora ``` ## Ce qui est automatique 1. **Collecte.** Chaque session du Space qui contient des tests est écrite localement, puis poussée dans le dataset privé toutes les 10 minutes (`CommitScheduler`). Une case à cocher dans l'interface permet de l'exclure. 2. **Sélection.** Le job ne garde que les sessions certifiées dont les tests importent `solution` et contiennent un `assert`. Il les dédoublonne et les découpe par tâche (90 % train, 10 % heldout) ; une tâche n'est jamais des deux côtés. 3. **Exemples.** Pour chaque session, un exemple de génération (énoncé + tests vers code certifié) et un exemple de réparation par tentative ratée (code faux + diagnostics vers code certifié). 4. **Seuil.** Sans au moins `MIN_NEW_EXAMPLES` (50) nouveaux exemples depuis le dernier cycle, le job s'arrête en quelques minutes sans charger de modèle. 5. **Porte.** Le job exécute réellement les tests du heldout pour la base, l'adaptateur promu actuel et le candidat. Le candidat n'est promu que s'il fait passer **strictement plus** de tâches que les deux, avec au moins `MIN_HELDOUT` (15) tâches. Sinon seules ses métriques sont gardées (`runs/*.json`). 6. **Mise en service.** Après une promotion, le job redémarre le Space, qui charge le nouvel adaptateur (générateur « UNIQUE » dans la liste). ## Mise en place (une fois, uniquement sur huggingface.co) 1. **Jeton** : huggingface.co/settings/tokens → *Create new token* → type **Write** → copier. 2. **Fichiers** : page du Space → onglet *Files* → *Contribute* → *Upload files* → glisser les dossiers `mouh`, `jobs`, `docs`, `tests` et les fichiers `app.py`, `requirements.txt` du paquet → *Commit*. 3. **Réglages** : page du Space → *Settings* → *Variables and secrets* : - *New secret* `HF_TOKEN` = le jeton ; - *New secret* `UNIQUE_ADMIN_KEY` = un mot de passe de votre choix (pour le bouton « Lancer un cycle maintenant ») ; - *New variable* `MOUH_DATASET_REPO` = `RDS777/mouh-trajectories` ; - *New variable* `UNIQUE_ADAPTER_REPO` = `RDS777/unique-qwen2.5-coder-0.5b-lora` ; - *New variable* `UNIQUE_AUTOTRAIN` = `1` (c'est l'accord pour les dépenses GPU). 4. Le Space redémarre et **crée lui-même** le job planifié (lundi 03:17 UTC, `t4-small`). Vérifiez dans le panneau « Apprentissage automatique d'UNIQUE » du Space (bouton *Actualiser*) et sur huggingface.co/settings/jobs. Réglages facultatifs (variables du Space) : `UNIQUE_SCHEDULE` (expression CRON), `UNIQUE_FLAVOR`, `UNIQUE_TIMEOUT`, `MOUH_RECORD_DEFAULT=0` (journalisation décochée par défaut). Pour arrêter : supprimer `UNIQUE_AUTOTRAIN` ne suffit pas, il faut aussi suspendre ou supprimer le job sur huggingface.co/settings/jobs. ## Coûts `t4-small` coûte 0,40 $/h, facturé à la seconde. Un cycle sous le seuil dure quelques minutes (installation des dépendances comprise). Un cycle complet avec 0,5 Md de paramètres et quelques centaines d'exemples tient en général dans l'heure, mais ce n'est pas mesuré : regardez la durée réelle du premier cycle dans `runs/*.json`. ## Limites à connaître - **Le volume est le vrai goulot.** Il faut environ 150 tâches certifiées distinctes pour atteindre 15 tâches de heldout, donc une première promotion. Tant que le Space n'est utilisé qu'à la main, cela n'arrivera pas vite. La prochaine étape utile est d'alimenter le Space en lot avec des tâches munies de tests. - **Certifié ne veut pas dire correct.** Le code certifié passe les tests fournis, rien de plus. Des tests faibles produisent des exemples faibles ; le filtre écarte seulement les cas les plus évidents. - **Space public = données ouvertes à tous.** N'importe qui peut soumettre des tâches qui entreront dans l'entraînement. Rendez le Space privé, ou décochez la journalisation par défaut (variable `MOUH_RECORD_DEFAULT=0`). - **Le heldout grandit avec le temps.** La porte réévalue la base et l'adaptateur actuel sur le heldout du moment : la comparaison est toujours faite sur les mêmes tâches. Sur 15 à 30 tâches, l'intervalle de confiance reste large (`ci95` dans les métriques). - **Inférence CPU.** Sur le matériel gratuit du Space (2 vCPU), une réponse de 512 jetons peut prendre une minute ou plus. - Le code généré pendant l'évaluation est exécuté dans le conteneur éphémère du job, sans autre bac à sable.