El sitio PyImageSearch publica un tutorial dedicado a la construcción de la arquitectura de DeepSeek-V3 con PyTorch, una biblioteca de deep learning. Quinto episodio de una serie de seis, este tutorial, firmado por Puneet Mangla, ensambla los bloques presentados en las lecciones anteriores para formar un modelo de lenguaje completo, que transforma tokens, las unidades de texto procesadas por el modelo, en logits, las puntuaciones asignadas a cada token posible.
Las lecciones anteriores cubrieron la configuración del modelo, los Rotary Position Embeddings (RoPE), que codifican la posición de los tokens, la Multihead Latent Attention (MLA), un mecanismo de atención, y la Mixture of Experts (MoE), o mezcla de expertos, que reparte el cálculo entre varios sub‑redes especializadas. La Multi-Token Prediction (MTP), por último, permite predecir varios tokens a la vez. Según el tutorial, mejora la eficiencia del entrenamiento y puede acelerar la inferencia gracias a la decodificación especulativa.
Cada bloque del transformador combina la MLA y la MoE según un esquema llamado « pre‑norm », en el que la normalización se aplica antes de cada subcapa. Conexiones residuales hacen que las señales pasen directamente de una capa a otra, lo que, según el autor, ayuda a resolver el problema de desaparición de gradientes en redes profundas. El modelo completo sigue con los embeddings de tokens y de posiciones, una capa de dropout, los bloques, una normalización final, una cabeza de predicción del vocabulario y, opcionalmente, cabezas de MTP.
Compartir pesos y predicción de varios tokens
El tutorial también presenta el compartir pesos entre la matriz de embedding de los tokens y la cabeza de predicción. Para un vocabulario de 50 259 tokens y una dimensión de embedding de 256, esta técnica permite ahorrar aproximadamente 12,9 millones de parámetros. Según el autor, suele mejorar el rendimiento, ya que los espacios de entrada y salida permanecen alineados.
Durante el entrenamiento, las salidas de las cabezas de MTP se calculan para varios horizontes futuros, y luego sus pérdidas se combinan con la pérdida principal y con una pérdida auxiliar de la MoE, destinada a equilibrar la carga entre los expertos. En el código presentado, la pérdida media de la MTP se pondera con 0,3 respecto a la pérdida principal. Las cabezas de MTP no se utilizan durante la inferencia, es decir, la generación de texto.
Tamaño del modelo e huella de memoria
Según el autor, el modelo cuenta con aproximadamente 30 a 35 millones de parámetros distribuidos en seis capas, es decir, 2 a 3 millones por capa, a los que se añaden 2 a 3 millones de parámetros por cabeza de MTP. Con precisión FP32, de 32 bits, solo los parámetros ocupan entre 120 y 140 megabytes. El entrenamiento, con los gradientes y los estados del optimizador AdamW, requiere alrededor de 500 a 600 MB, a lo que se suman las activaciones. Para un lote de 4 ejemplos de 1 024 tokens, estas pesan entre 200 y 300 MB, es decir, cerca de 800 MB en total, una cantidad que el tutorial considera compatible con las tarjetas gráficas (GPU) actuales.
En inferencia, la precisión FP16 reduce la memoria a la mitad aproximadamente. La implementación no recurre a una caché clave‑valor y por lo tanto recalcula el contexto en cada paso de generación. La próxima lección de la serie tratará sobre el entrenamiento de este modelo con datos reales.
