DeepSeek-V3 : Wie man den DeepSeek Trainer von Grund auf implementiert

PyImageSearch veröffentlicht den letzten Teil einer Serie zum Aufbau von DeepSeek-V3 « from scratch », diesmal mit Fokus auf das Training des Modells und die Textgenerierung. Das von Puneet Mangla verfasste Tutorial erläutert die Trainingsschleife, die Hyperparameter und die für ein kleines Modell verwendeten Daten.

  • PyImageSearch veröffentlicht den letzten Teil einer Serie zum Aufbau von DeepSeek-V3.
  • Das Training nutzt die Trainer-API von Hugging Face mit angepasster Verlustberechnung.
  • Das Modell lernt auf TinyStories, einem Datensatz mit einfachen Kindergeschichten.
  • Das kleine Modell bleibt schwächer als große Modelle und kann sich wiederholen.

Dieser sechste Teil schließt eine Serie ab, die Schritt für Schritt die Konfiguration, Rotary Position Embeddings (RoPE), Multi-head Latent Attention (MLA), Mixture of Experts (MoE), Multi-Token Prediction (MTP) und schließlich den Zusammenbau der Architektur in PyTorch behandelt hat. Das Tutorial stellt den « Trainer » vor, die Komponente, die die Architektur zum Laufen bringt, indem sie sie mit Daten konfrontiert.

Ein Training auf Basis von Hugging Face

Das Training eines Transformator-Modells erfordert die Koordination von Datenladen, Optimierung, Checkpoint-Management und Evaluation. Der Autor nutzt dafür die Trainer-API von Hugging Face mit den Versionen transformers==4.57.3, datasets==4.8.5 und accelerate==1.15.0. Da das Modell ein Tupel (Logits, Loss) zurückgibt, passt eine benutzerdefinierte compute_loss-Methode seine Ausgabe an das vom Trainer erwartete Format an.

Mehrere Techniken kommen zum Einsatz. Die Gradientenakkumulation simuliert große Batches, wenn der GPU-Speicher begrenzt ist: Mit einem Batch von 4 Beispielen und 4 Akkumulationsschritten erreicht die effektive Größe 16 auf einem einzelnen Gerät. Die Lernrate folgt einer Aufwärmphase (Warmup), gefolgt von einem linearen Abfall. Schließlich kann gemischte Präzision (FP16) die Berechnung beschleunigen, obwohl der Gewinn von Hardware und Arbeitslast abhängt.

Daten und Konfiguration

Das Modell wird auf TinyStories trainiert, einem Datensatz mit einfachen Kindergeschichten, der für einen kleinen Wortschatz und eine einfache Grammatik für kleine Sprachmodelle konzipiert ist. Der Autor verwendet nur die ersten 10.000 Beispiele, aufgeteilt in 9.000 für Training und 1.000 für Evaluation ohne Vermischung. Dieser zweite Satz stammt also aus der ausgewählten Teilmenge und nicht aus dem offiziellen Validierungssatz des Datensatzes.

Der Text wird mit dem GPT-2-Tokenizer tokenisiert, der Byte-Paar-Kodierung (BPE) verwendet. Füllpositionen werden durch den Wert -100 vom Loss-Berechnung ausgeschlossen. Die Konfiguration setzt eine Lernrate von 5e-4, 10 Warmup-Schritten, einer Regularisierung von 0,01 und 2 Trainingsepochen fest. Alle 50 Schritte werden Checkpoints erstellt, drei werden behalten, und das finale Modell ist das mit dem niedrigsten Validierungsverlust.

Um die Generierung zu testen, verwendet der Autor eine Temperatur von 0,8 und ein Top-k-Sampling von 50, mit 150 neuen Tokens. Die als Beispiel präsentierte Geschichte ist ausdrücklich illustrativ und nicht aus einer aufgezeichneten Ausführung. Das Tutorial stellt klar, dass dieses kleine Modell nicht mit großen vortrainierten Modellen konkurrieren wird und dass seine Ausgaben sich wiederholen, abschweifen oder inkohärent werden können. Das vollständige Tutorial und sein Quellcode sind auf der PyImageSearch-Website verfügbar.