DeepSeek-V3 : comment implémenter le DeepSeek Trainer de zéro

PyImageSearch publie le dernier volet d’une série consacrée à la construction de DeepSeek-V3 « from scratch », centré cette fois sur l’entraînement du modèle et la génération de texte. Rédigé par Puneet Mangla, le tutoriel détaille la boucle d’entraînement, les hyperparamètres et les données utilisées pour un modèle de petite taille.

  • PyImageSearch publie la sixième partie de sa série sur DeepSeek-V3 et détaille l’entraînement du modèle.
  • L’auteur utilise le Trainer de Hugging Face, avec accumulation de gradients, warmup et précision mixte FP16.
  • Le modèle apprend sur 9 000 histoires de TinyStories, avec un taux d’apprentissage de 5e-4 sur 2 époques.
  • Le petit modèle ne rivalisera pas avec les grands modèles et peut se répéter ou perdre en cohérence.

Cette sixième partie clôt une série qui a abordé, étape par étape, la configuration et les Rotary Position Embeddings (RoPE), la Multi-head Latent Attention (MLA), le Mixture of Experts (MoE), la Multi-Token Prediction (MTP), puis l’assemblage de l’architecture en PyTorch. Le tutoriel présente le « trainer », le composant qui fait fonctionner l’architecture en la confrontant à des données.

Une entraînement s’appuyant sur Hugging Face

Entraîner un modèle de type transformeur implique de coordonner le chargement des données, l’optimisation, la gestion des points de sauvegarde et l’évaluation. L’auteur s’appuie pour cela sur l’API Trainer de Hugging Face, avec les versions transformers==4.57.3, datasets==4.8.5 et accelerate==1.15.0. Le modèle renvoyant un couple (logits, loss), une méthode compute_loss personnalisée adapte sa sortie au format attendu par le Trainer.

Plusieurs techniques sont mises en place. La accumulation de gradients simule de grands lots lorsque la mémoire du GPU est limitée : avec un lot de 4 exemples et 4 étapes d’accumulation, la taille effective atteint 16 sur un seul appareil. Le taux d’apprentissage suit une phase de montée progressive (warmup), suivie d’une décroissance linéaire. Enfin, l’entraînement en précision mixte (FP16) peut accélérer le calcul, bien que le gain dépende du matériel et de la charge de travail.

Données et configuration

Le modèle est entraîné sur TinyStories, un jeu de données d’histoires simples pour enfants, conçu pour un vocabulaire et une grammaire adaptés aux petits modèles de langage. L’auteur n’en retient que les 10 000 premiers exemples, répartis sans mélange en 9 000 pour l’entraînement et 1 000 pour l’évaluation. Ce second ensemble provient donc du sous-ensemble choisi, et non de la validation officielle du jeu de données.

Le texte est tokenisé avec le tokenizer GPT-2, qui utilise le codage par paires d’octets (BPE). Les positions de remplissage sont exclues du calcul de la perte grâce à la valeur -100. La configuration fixe un taux d’apprentissage de 5e-4, 10 étapes de warmup, une régularisation de 0,01 et 2 époques d’entraînement. Des points de sauvegarde sont créés toutes les 50 étapes, trois sont conservés, et le modèle final retenu est celui qui présente la plus faible perte de validation.

Pour tester la génération, l’auteur utilise une température de 0,8 et un échantillonnage top-k de 50, avec 150 nouveaux tokens. L’histoire présentée comme exemple est explicitement illustrative et non issue d’une exécution enregistrée. Le tutoriel précise que ce petit modèle ne rivalisera pas avec les grands modèles pré-entraînés et que ses productions peuvent se répéter, dériver ou perdre en cohérence. Le tutoriel complet et son code source sont disponibles sur le site de PyImageSearch.