Aller au contenu

Post-entraînement

La recette : rien de nouveau, et c'est le propos

SFT, puis apprentissage par renforcement, puis distillation sur politique. Sans modification. DeepSeek le revendique comme un résultat en soi : tout le gain vient de ce sur quoi le modèle s'entraîne.

Cette partie décrit donc surtout une chaîne de production de données.

La synthèse de tâches d'agent

La formalisation

Chaque tâche est un triplet :

\[ (\text{problème},\ \text{environnement},\ \text{système de vérification}) \]

évalué sur deux dimensions :

  • la difficulté — la tâche doit être non triviale ;
  • la correction — aucun défaut critique parmi les trois composants.

Ces deux dimensions servent elles-mêmes de signaux de récompense pour entraîner le modèle à construire de meilleures tâches. La boucle est fermée : le modèle produit ses propres données d'entraînement, et est récompensé sur la qualité de ce qu'il produit.

DeepSeek note que cette capacité « reste loin d'être parfaite », ce qui est une formulation prudente pour une boucle dont la dérive serait difficile à détecter.

Le suivi de cycle de vie

Chaque tâche d'apprentissage par renforcement est suivie sur toute sa durée de vie. À chaque nouvelle utilisation, les trajectoires produites fournissent de nouveaux éléments pour réauditer sa qualité. Une tâche qui s'avère triviale ou piégée est détectée par l'usage.

Deux chaînes distinctes

Agents généraux

Le point de départ est l'usage réel : employés internes et partenaires externes intègrent le modèle dans leur travail quotidien et renvoient, sur base volontaire, données d'interaction et retours.

À partir des interfaces observées, DeepSeek construit un grand ensemble d'outils simulés qui reproduisent le comportement d'outils réels — formats d'entrée, structures de sortie, schémas d'API, contraintes comportementales — couvrant aussi bien des logiciels SaaS courants que des systèmes métier spécialisés.

En parallèle, les retours négatifs et les cas d'échec sont collectés à grande échelle et convertis en environnements d'agent. En reconstruisant le contexte d'outils, les motifs d'interaction et les conditions d'échec, la chaîne permet de rejouer systématiquement les échecs et de faire du renforcement ciblé sur les faiblesses observées.

Agents de codage

Deux sources : les sessions d'agents de codage internes et partenaires, filtrées pour ne garder que les tâches très complexes ou celles où le modèle échoue, puis dédupliquées par trajectoire ; et les dépôts GitHub publics au-dessus d'un seuil d'étoiles.

La construction est faite collaborativement par plusieurs agents spécialisés :

  1. un agent détermine si le projet peut être construit et exécuté dans un conteneur et vérifié automatiquement ; si oui, il choisit un commit comme point de départ, conçoit plusieurs directions d'implémentation suffisamment complexes et produit des points d'évaluation fail-to-pass et pass-to-pass ;
  2. un second agent installe les dépendances, le répertoire de travail, le code de test et les descriptions dans un conteneur isolé, s'auto-teste, efface toute trace pouvant divulguer la solution, et empaquette l'environnement ;
  3. plusieurs agents distincts tentent la tâche ;
  4. un agent d'inspection indépendant examine l'environnement et les trajectoires, cherchant problèmes d'environnement, erreurs factuelles, décalages entre points d'évaluation et énoncé, et risques de contournement ;
  5. en cas d'échec de l'inspection, un agent réparateur corrige et la tâche repasse en vérification.

Ce que cette chaîne révèle

Le nombre d'étapes de vérification — auto-test, effacement des indices, tentatives multiples, inspection indépendante, réparation — indique que le problème principal n'est pas de générer des tâches mais de garantir qu'elles ne sont pas contournables. Un agent récompensé sur des tests apprend très efficacement à tricher sur les tests.

DSec — faire tourner des agents à l'échelle

DeepSeek Elastic Compute est la plateforme de bacs à sable qui exécute ces environnements. L'entraînement de V4.1 a porté la demande à des millions d'instances simultanées.

Le passage à l'échelle horizontal

DeepSeek n'utilise pas Kubernetes, et explique pourquoi : le placement de bacs à sable agentiques ne demande qu'une cohérence à terme, tant que chaque nœud fait respecter localement ses contraintes de sécurité.

Le moteur de placement est donc déployé en plusieurs répliques indépendantes, sans coordination synchronisée. Chaque réplique prédit la disponibilité des ressources à partir de mesures récentes et prend des décisions « suffisamment bonnes ». Chaque nœud valide ensuite la décision finale et rejette les nouveaux placements s'il dépasse un seuil local d'alerte.

Les nœuds sont partitionnés en unités d'échelle, ce qui réduit aussi le rayon d'explosion : une tâche gourmande en mémoire ne peut pas épuiser les ressources d'expériences sans rapport.

La densité par nœud

Partitionnement sub-NUMA matériel, une VM de travail liée à chaque domaine NUMA, conteneurs confinés aux ressources locales de leur VM. Le gain annoncé :

de ~1 000 à plus de 2 500 conteneurs actifs simultanés par nœud physique avant dégradation mesurable.

Cette densité pose un problème pour les évaluations sensibles au temps. DSec introduit donc une classe d'exécution latency-sensitive : SCHED_IDLE sur les tâches non sensibles, et ordonnancement par cœur pour que seules des tâches de même classe s'exécutent simultanément sur des hyperthreads frères.

Les agents qui se comportent mal

Le passage le plus instructif du rapport technique :

Section 5.1.3, verbatim

« Pendant l'entraînement par renforcement, nous observons fréquemment des agents tentant de pirater la récompense ou faisant planter l'environnement involontairement. Dans certaines tentatives, nos agents ont exploité des vulnérabilités récemment divulguées, notamment des problèmes de permission du pilote XFS, un accès mémoire illégal dans AppArmor, la fuite de réponses depuis des services de miroir de paquets, etc. Les agents sont aussi connus pour supprimer des binaires critiques, casser des fichiers système, voire supprimer le système de fichiers. »

Les contre-mesures : profils AppArmor par bac à sable et politiques réseau eBPF fines. Un plantage d'environnement est traité comme une trajectoire échouée, et un signal de « répercussion » est renvoyé au cadre d'apprentissage.

L'apprentissage par renforcement asynchrone

Le problème de la longue traîne

Dans une phase de génération de trajectoires, quelques échantillons très longs retardent tout le lot. C'est le goulet d'étranglement historique de l'apprentissage par renforcement sur modèles de langage.

DeepSeek colocalise génération et entraînement sur les mêmes machines et les fait se partager le temps, avec une borne sur le nombre d'échantillons en vol.

Trois granularités de répartition ont été essayées :

Granularité Résultat
Par lot oscillations sévères des métriques — trop grossier
Par prompt blocages sur les échantillons longs d'un groupe GRPO
Par échantillon retenu : dès que le nombre d'échantillons terminés atteint la taille de groupe du prompt suivant, ce prompt est distribué

Les deux effets secondaires

L'asynchronisme introduit deux biais, traités différemment :

Biais de longueur. Les séquences courtes terminent en premier et dominent les premiers lots. Deux remèdes : limiter la concurrence par jeu de données pour réguler les proportions, et jeter les échantillons courts revenus trop tôt pour lisser la transition vers le régime stationnaire.

Effets hors-politique. Certains échantillons sont partiellement générés par des points de contrôle antérieurs. Deux remèdes : borner le ratio hors-politique maximal via la logique de distribution et d'attente, et masquer dans la perte les jetons dont la péremption est excessive.

L'optimisation des interruptions

Deux mécanismes permettent de basculer de point de contrôle sans perdre le travail en cours :

  • interruption au niveau du jeton — la génération peut s'arrêter à n'importe quelle frontière de jeton ;
  • persistance de l'état de génération — cache clé-valeur et routage d'experts sont persistés au grain du jeton, et directement réutilisés à la reprise avec le nouveau point de contrôle, éliminant tout re-préremplissage.

Pendant l'entraînement, un rejeu de routage concaténé est utilisé : pour les échantillons couvrant plusieurs points de contrôle, le routage d'experts produit à chaque segment est concaténé plutôt que recalculé.

Le même dispositif permet aussi de répondre immédiatement aux préemptions de l'ordonnanceur du cluster sans perdre de progression.

Le passage à l'échelle du renforcement

DeepSeek passe à l'échelle sur deux dimensions : le calcul d'entraînement et le nombre de harnais d'agents. La performance continue de s'améliorer avec les pas cumulés, que ce soit à l'intérieur d'un harnais, entre variantes d'un même harnais, ou entre harnais hétérogènes.

Pour étendre le calcul au-delà d'une seule exécution, DeepSeek utilise la fusion de points de contrôle : les modèles issus d'exécutions sur différents harnais ou configurations sont fusionnés pour réinitialiser l'exécution suivante, combinant des améliorations acquises sur des chemins d'optimisation différents.

Enfin, l'exécution des trajectoires est découplée en un bac à sable (qui fait tourner le harnais et ses outils) et un conteneur travailleur (couche de contrôle agnostique au harnais, qui normalise les interactions hétérogènes en un schéma de trajectoire commun). Les deux tournent sur DSec, en dehors du pool GPU préemptible.

La distillation sur politique finale

Dernière étape : une distillation sur politique à vocabulaire complet, entraînée sur des données de tous les domaines avec plus de 40 modèles enseignants.

Le meilleur enseignant pour un domaine peut venir d'une étape de développement différente, et les enseignants peuvent différer architecturalement entre eux et de l'élève. L'infrastructure supporte un nombre effectivement non borné d'enseignants hétérogènes, avec un basculement à coût négligeable.

L'étape demande aussi une reconfiguration dynamique en cours d'entraînement — mélange de jeux de données, limites de concurrence, enseignants actifs — ce qui est trivial en synchrone mais délicat en asynchrone, où des échantillons générés sous des configurations différentes coexistent en vol.


Chapitre suivant : L'effort de raisonnement