Le site PyImageSearch publie un tutoriel consacré à la construction de l’architecture de DeepSeek-V3 avec PyTorch, une bibliothèque de deep learning. Cinquième volet d’une série de six, ce tutoriel, signé Puneet Mangla, assemble les briques présentées dans les leçons précédentes pour former un modèle de langage complet, qui transforme des tokens, les unités de texte traitées par le modèle, en logits, les scores attribués à chaque token possible.
- Le tutoriel assemble DeepSeek-V3 dans PyTorch à partir de MLA, MoE, RoPE et MTP.
- Le partage des poids économise environ 12,9 millions de paramètres.
- Le modèle compte 30 à 35 millions de paramètres et près de 800 Mo à l’entraînement.
- En inférence, la précision FP16 divise la mémoire par deux, sans cache clé-valeur.
Les leçons précédentes ont couvert la configuration du modèle, les Rotary Position Embeddings (RoPE), qui encodent la position des tokens, la Multihead Latent Attention (MLA), un mécanisme d’attention, et la Mixture of Experts (MoE), ou mélange d’experts, qui répartit le calcul entre plusieurs sous-réseaux spécialisés. La Multi-Token Prediction (MTP), enfin, permet de prédire plusieurs tokens à la fois. Selon le tutoriel, elle améliore l’efficacité de l’entraînement et peut accélérer l’inférence grâce au décodage spéculatif.
Chaque bloc du transformeur combine la MLA et la MoE selon un schéma dit « pre-norm », dans lequel la normalisation intervient avant chaque sous-couche. Des connexions résiduelles font transiter les signaux directement d’une couche à l’autre, ce qui, précise l’auteur, aide à résoudre le problème de disparition des gradients dans les réseaux profonds. Le modèle complet enchaîne ensuite les plongements des tokens et des positions, une couche de dropout, les blocs, une normalisation finale, une tête de prédiction du vocabulaire et, en option, des têtes de MTP.
Partage des poids et prédiction de plusieurs tokens
Le tutoriel présente aussi le partage des poids entre la matrice d’embedding des tokens et la tête de prédiction. Pour un vocabulaire de 50 259 tokens et une dimension d’embedding de 256, cette technique permet d’économiser environ 12,9 millions de paramètres. Selon l’auteur, elle améliore souvent les performances, car les espaces d’entrée et de sortie restent alignés.
Pendant l’entraînement, les sorties des têtes de MTP sont calculées pour plusieurs horizons futurs, puis leurs pertes sont combinées avec la perte principale et avec une perte auxiliaire de la MoE, destinée à équilibrer la charge entre les experts. Dans le code présenté, la perte moyenne de la MTP est pondérée par 0,3 par rapport à la perte principale. Les têtes de MTP ne sont pas utilisées lors de l’inférence, c’est-à-dire la génération de texte.
Taille du modèle et empreinte mémoire
D’après l’auteur, le modèle compte environ 30 à 35 millions de paramètres répartis sur six couches, soit 2 à 3 millions par couche, auxquels s’ajoutent 2 à 3 millions de paramètres par tête de MTP. À la précision FP32, sur 32 bits, les seuls paramètres représentent 120 à 140 mégaoctets. L’entraînement, avec les gradients et les états de l’optimiseur AdamW, nécessite environ 500 à 600 Mo, auxquels s’ajoutent les activations. Pour un lot de 4 exemples de 1 024 tokens, celles-ci pèsent 200 à 300 Mo, soit près de 800 Mo au total, une quantité que le tutoriel juge compatible avec les processeurs graphiques (GPU) actuels.
En inférence, la précision FP16 réduit la mémoire d’environ moitié. L’implémentation ne recourt pas à un cache clé-valeur et recalcule donc le contexte à chaque étape de génération. La prochaine leçon de la série portera sur l’entraînement de ce modèle sur des données réelles.
