DeepSeek-V3 von Grund auf : Aufbau der Architektur in PyTorch

Die Website PyImageSearch veröffentlicht ein Tutorial zum Aufbau der Architektur von DeepSeek-V3 mit PyTorch, einer Deep-Learning-Bibliothek. Der fünfte Teil einer sechsteiligen Serie, dieses Tutorials, verfasst von Puneet Mangla, setzt die in den vorherigen Lektionen vorgestellten Bausteine zusammen, um ein vollständiges Sprachmodell zu bilden, das Tokens, die vom Modell verarbeiteten Textelemente, in Logits, die jedem möglichen Token zugeordneten Werte, umwandelt.

  • Das Tutorial baut DeepSeek-V3 in PyTorch Schritt für Schritt aus bekannten Bausteinen auf.
  • Das Modell verbindet MLA und MoE in Blöcken mit Pre-Norm und Residualverbindungen.
  • Die Gewichtsfreigabe spart etwa 12,9 Millionen Parameter ein, und die MTP-Köpfe entfallen bei der Inferenz.
  • FP16 halbiert den Speicherbedarf bei der Inferenz, doch der Code nutzt keinen Key-Value-Cache.

Die vorherigen Lektionen behandelten die Modellkonfiguration, die Rotary Position Embeddings (RoPE), welche die Position der Tokens kodieren, die Multihead Latent Attention (MLA), einen Aufmerksamkeitsmechanismus, und die Mixture of Experts (MoE), oder Expertenmischung, die die Berechnung auf mehrere spezialisierte Subnetzwerke verteilt. Die Multi-Token Prediction (MTP) ermöglicht schließlich die Vorhersage mehrerer Tokens gleichzeitig. Laut Tutorial verbessert sie die Trainingseffizienz und kann die Inferenz durch spekulatives Decoding beschleunigen.

Jeder Block des Transformers kombiniert MLA und MoE nach einem sogenannten « pre-norm »-Schema, bei dem die Normalisierung vor jeder Unterschicht erfolgt. Residualverbindungen leiten die Signale direkt von einer Schicht zur nächsten weiter, was laut Autor hilft, das Verschwinden von Gradienten in tiefen Netzwerken zu lösen. Das vollständige Modell verbindet anschließend die Einbettungen der Tokens und Positionen, eine Dropout-Schicht, die Blöcke, eine abschließende Normalisierung, einen Vokabular-Vorhersagekopf und optional MTP-Köpfe.

Gewichtsfreigabe und Vorhersage mehrerer Tokens

Das Tutorial stellt auch die Gewichtsfreigabe zwischen der Token-Embedding-Matrix und dem Vorhersagekopf vor. Für ein Vokabular von 50.259 Tokens und eine Embedding-Dimension von 256 spart diese Technik etwa 12,9 Millionen Parameter ein. Laut Autor verbessert sie oft die Leistung, da Eingangs- und Ausgangsräume ausgerichtet bleiben.

Während des Trainings werden die Ausgaben der MTP-Köpfe für mehrere zukünftige Horizonte berechnet, dann werden deren Verluste mit dem Hauptverlust und einem Hilfsverlust der MoE kombiniert, der dazu dient, die Last zwischen den Experten auszugleichen. Im präsentierten Code wird der mittlere MTP-Verlust mit 0,3 gegenüber dem Hauptverlust gewichtet. Die MTP-Köpfe werden bei der Inferenz, also der Texterzeugung, nicht verwendet.

Modellgröße und Speicherbedarf

Laut Autor umfasst das Modell etwa 30 bis 35 Millionen Parameter, verteilt auf sechs Schichten, also 2 bis 3 Millionen pro Schicht, zuzüglich 2 bis 3 Millionen Parameter pro MTP-Kopf. Bei FP32-Präzision auf 32 Bit repräsentieren allein die Parameter 120 bis 140 Megabyte. Das Training mit Gradienten und Zuständen des AdamW-Optimierers benötigt etwa 500 bis 600 MB, zuzüglich der Aktivierungen. Für ein Batch von 4 Beispielen mit je 1.024 Tokens wiegen diese 200 bis 300 MB, also insgesamt fast 800 MB, eine Menge, die das Tutorial als kompatibel mit aktuellen Grafikprozessoren (GPU) einschätzt.

Bei der Inferenz reduziert die FP16-Präzision den Speicherbedarf etwa um die Hälfte. Die Implementierung verwendet keinen Key-Value-Cache und berechnet den Kontext daher bei jedem Generierungsschritt neu. Die nächste Lektion der Serie wird sich mit dem Training dieses Modells an realen Daten befassen.