DeepSeek-V3 vanaf nul : de architectuur bouwen in PyTorch

De website PyImageSearch publiceert een tutorial gewijd aan het bouwen van de architectuur van DeepSeek-V3 met PyTorch, een deep learning-bibliotheek. Als vijfde deel van een serie van zes, assembleert deze tutorial, geschreven door Puneet Mangla, de bouwstenen uit eerdere lessen tot een volledig taalmodel, dat tokens, de teksteenheden die het model verwerkt, omzet in logits, de scores toegekend aan elke mogelijke token.

Eerdere lessen behandelden de modelconfiguratie, de Rotary Position Embeddings (RoPE), die de positie van tokens coderen, de Multihead Latent Attention (MLA), een aandachtmechanisme, en de Mixture of Experts (MoE), of mengsel van experts, die de berekening verdeelt over meerdere gespecialiseerde subnetwerken. De Multi-Token Prediction (MTP), ten slotte, maakt het mogelijk meerdere tokens tegelijk te voorspellen. Volgens de tutorial verbetert dit de trainings efficiëntie en kan het de inferentie versnellen dankzij speculatieve decodering.

Elk transformerblok combineert de MLA en de MoE volgens een zogenaamd « pre-norm »-schema, waarbij de normalisatie voor elke sublaag plaatsvindt. Residuele verbindingen laten signalen rechtstreeks van de ene naar de andere laag stromen, wat, zo preciseert de auteur, helpt bij het oplossen van het probleem van verdwijnende gradients in diepe netwerken. Het volledige model voegt vervolgens achtereenvolgens de token- en positie-embeddings, een dropoutlaag, de blokken, een eindnormalisatie, een vocabulairevoorspellingskop en, optioneel, MTP-koppen samen.

Gewichtsdeling en voorspelling van meerdere tokens

De tutorial behandelt ook de gewichtsdeling tussen de token-embeddingmatrix en de voorspellingskop. Voor een vocabulaire van 50.259 tokens en een embeddingdimensie van 256 bespaart deze techniek ongeveer 12,9 miljoen parameters. Volgens de auteur verbetert dit vaak de prestaties, omdat de invoer- en uitvoerruimtes uitgelijnd blijven.

Tijdens de training worden de uitvoeren van de MTP-koppen berekend voor meerdere toekomstige horizonten, waarna hun verliezen worden gecombineerd met het hoofdverlies en met een hulpverlies van de MoE, bedoeld om de belasting tussen de experts in evenwicht te brengen. In de gepresenteerde code wordt het gemiddelde MTP-verlies gewogen met 0,3 ten opzichte van het hoofdverlies. De MTP-koppen worden niet gebruikt tijdens de inferentie, dat wil zeggen de tekstgeneratie.

Modelgrootte en geheugenvoetafdruk

Volgens de auteur heeft het model ongeveer 30 tot 35 miljoen parameters verdeeld over zes lagen, oftewel 2 tot 3 miljoen per laag, waaraan 2 tot 3 miljoen parameters per MTP-kop worden toegevoegd. Bij FP32-precisie, op 32 bits, nemen alleen de parameters al 120 tot 140 megabyte in beslag. De training, met de gradients en de toestanden van de AdamW-optimizer, vereist ongeveer 500 tot 600 MB, waaraan de activaties worden toegevoegd. Voor een batch van 4 voorbeelden van 1.024 tokens wegen deze 200 tot 300 MB, wat bijna 800 MB in totaal is, een hoeveelheid die de tutorial compatibel acht met huidige grafische processoren (GPU’s).

Bij inferentie vermindert FP16-precisie het geheugen met ongeveer de helft. De implementatie maakt geen gebruik van een sleutel-waardecache en berekent de context daarom opnieuw bij elke generatiestap. De volgende les in de serie zal gaan over het trainen van dit model op echte gegevens.