DeepSeek-V3 : cómo implementar el DeepSeek Trainer desde cero

PyImageSearch publica la última entrega de una serie dedicada a la construcción de DeepSeek-V3 « from scratch », centrada esta vez en el entrenamiento del modelo y la generación de texto. Redactado por Puneet Mangla, el tutorial detalla el ciclo de entrenamiento, los hiperparámetros y los datos usados para un modelo de pequeño tamaño.

Esta sexta parte cierra una serie que abordó, paso a paso, la configuración y los Rotary Position Embeddings (RoPE), la Multi-head Latent Attention (MLA), el Mixture of Experts (MoE), la Multi-Token Prediction (MTP), y luego el ensamblaje de la arquitectura en PyTorch. El tutorial presenta el « trainer », el componente que hace funcionar la arquitectura enfrentándola a datos.

Un entrenamiento basado en Hugging Face

Entrenar un modelo tipo transformador implica coordinar la carga de datos, la optimización, la gestión de puntos de guardado y la evaluación. El autor se apoya para ello en la API Trainer de Hugging Face, con las versiones transformers==4.57.3, datasets==4.8.5 y accelerate==1.15.0. El modelo devuelve un par (logits, loss), un método compute_loss personalizado adapta su salida al formato esperado por el Trainer.

Se implementan varias técnicas. La acumulación de gradientes simula lotes grandes cuando la memoria del GPU es limitada: con un lote de 4 ejemplos y 4 pasos de acumulación, el tamaño efectivo alcanza 16 en un solo dispositivo. La tasa de aprendizaje sigue una fase de subida progresiva (warmup), seguida de una caída lineal. Finalmente, el entrenamiento en precisión mixta (FP16) puede acelerar el cálculo, aunque la ganancia depende del hardware y la carga de trabajo.

Datos y configuración

El modelo se entrena sobre TinyStories, un conjunto de datos de historias simples para niños, diseñado para un vocabulario y gramática adecuados a pequeños modelos de lenguaje. El autor retiene solo los primeros 10 000 ejemplos, repartidos sin mezcla en 9 000 para entrenamiento y 1 000 para evaluación. Este segundo conjunto proviene por tanto del subconjunto elegido, y no de la validación oficial del conjunto de datos.

El texto se tokeniza con el tokenizer GPT-2, que usa codificación por pares de bytes (BPE). Las posiciones de relleno se excluyen del cálculo de la pérdida gracias al valor -100. La configuración fija una tasa de aprendizaje de 5e-4, 10 pasos de warmup, una regularización de 0,01 y 2 épocas de entrenamiento. Se crean puntos de guardado cada 50 pasos, se conservan tres, y el modelo final seleccionado es el que presenta la menor pérdida de validación.

Para probar la generación, el autor usa una temperatura de 0,8 y un muestreo top-k de 50, con 150 nuevos tokens. La historia presentada como ejemplo es explícitamente ilustrativa y no proviene de una ejecución registrada. El tutorial precisa que este pequeño modelo no rivalizará con los grandes modelos preentrenados y que sus producciones pueden repetirse, derivar o perder coherencia. El tutorial completo y su código fuente están disponibles en el sitio de PyImageSearch.