|

Construir LLM desde cero en PyTorch (2026)

Si querés entender cómo construir un LLM desde cero, el repositorio LLMs-from-scratch de Sebastian Raschka es el punto de entrada más completo disponible hoy: cubre GPT-2, Llama 3 y DeepSeek en PyTorch, con código funcional y un libro complementario de Manning Publishing que acompaña cada capítulo paso a paso.

En 30 segundos

  • Sebastian Raschka publicó el repositorio LLMs-from-scratch en GitHub con implementaciones completas de GPT-2, Llama 3 y DeepSeek en PyTorch, acompañado de un libro en Manning Publishing.
  • El flujo cubre desde tokenización y embeddings hasta el training loop completo, con código ejecutable para cada arquitectura.
  • GPT-2 tiene 117M-1.5B parámetros; Llama 3 introduce RoPE y RMSNorm; DeepSeek usa Mixture-of-Experts con 256 expertos y 37B parámetros activos de 671B totales.
  • El pre-entrenamiento desde cero requiere cientos de miles de millones de tokens y hardware serio; el fine-tuning con LoRA/QLoRA es el camino práctico para la mayoría.
  • Hugging Face ofrece un curso de LLMs gratuito como complemento ideal para quien arranca desde cero.

Llama 3 es un modelo de lenguaje grande desarrollado y distribuido en código abierto por Meta, diseñado para generar texto, responder preguntas y procesar información en lenguaje natural. Fue lanzado en 2024.

Qué es un LLM y por qué construir uno desde cero

Un modelo de lenguaje grande (LLM) es una red neuronal entrenada sobre volúmenes masivos de texto para predecir y generar secuencias de tokens. GPT-2, Llama 3 y DeepSeek son ejemplos concretos de esta familia, con arquitecturas decoder-only que aprenden patrones estadísticos del lenguaje sin supervisión explícita.

Usarlo preentrenado es cómodo. Pero si alguna vez intentaste depurar por qué tu modelo genera texto incoherente y no entendías qué estaba pasando dentro, sabés que la caja negra tiene un costo real. Construirlo desde cero te da algo que ningún tutorial de fine-tuning te da: entender por qué el mecanismo de atención funciona así, por qué los gradientes explotan en ciertos puntos, o qué significa realmente “temperatura” cuando generás texto.

El recurso más completo para esto en 2026 es el repositorio de Raschka en GitHub, que tiene más de 30.000 estrellas y un libro de Manning que acompaña el código. No es teoría suelta: cada capítulo tiene notebooks ejecutables.

Arquitectura Transformer y mecanismo de atención

Ponele que tenés una oración: “El modelo predijo correctamente la etiqueta”. El mecanismo de atención decide cuánto peso ponerle a cada palabra al procesar “etiqueta”. La fórmula es:

Attention(Q, K, V) = softmax(QKT / √dk) · V

Q (queries), K (keys) y V (values) son proyecciones lineales de los embeddings de entrada. El factor √dk normaliza para evitar que los productos escalares crezcan tanto que el softmax se sature. Multi-head attention corre esto en paralelo varias veces con diferentes proyecciones, capturando relaciones semánticas desde múltiples ángulos. Para más detalles técnicos, mirá distribuir tu proyecto a nivel internacional.

¿Por qué reemplazó a las RNN y LSTM? Porque procesa toda la secuencia en paralelo en lugar de paso a paso. En una RNN, el estado del token en posición 100 depende de haber procesado los 99 anteriores en secuencia. En un Transformer, todos los tokens se atienden entre sí simultáneamente. Eso lo hace órdenes de magnitud más rápido de entrenar en hardware moderno.

Tokenización: el paso que más se ignora y más importa

Antes de que el modelo vea una sola letra, el texto pasa por un tokenizador que lo convierte en números. BPE (Byte Pair Encoding, el método de GPT-2) empieza con caracteres individuales y los fusiona iterativamente hasta armar un vocabulario de tamaño fijo. Llama 3 usa un vocabulario de 128.000 tokens, significativamente mayor que los 50.257 de GPT-2, lo que le da mejor cobertura de idiomas no ingleses.

El error clásico acá es subestimar el impacto del tokenizador en la calidad del output. Subís el modelo, lo probás en local, funciona bárbaro, lo mandás a producción con un tokenizador diferente y de repente el modelo genera texto extraño en los bordes de las oraciones porque el vocabulario no matchea, los tokens especiales tienen IDs distintos y nadie documentó que el pipeline de inferencia usa tiktoken mientras el de entrenamiento usaba el tokenizador de Hugging Face.

Herramientas: tiktoken para los modelos OpenAI/GPT, transformers.AutoTokenizer de Hugging Face para Llama y derivados.

Pasos para construir un LLM desde cero en PyTorch

El flujo completo, sin adornos:

  • 1. Dataset y tokenización. Necesitás texto en volumen. Para replicar GPT-2 (117M parámetros) de forma educativa, un subset de OpenWebText o TinyStories alcanza. Tokenizá, convertí a tensores, armá DataLoader con ventana deslizante.
  • 2. Arquitectura. Definí embedding de tokens, embedding posicional (absoluto para GPT-2, RoPE para Llama 3), N capas Transformer con multi-head attention + feedforward, normalización (LayerNorm o RMSNorm), y un head de proyección final sobre el vocabulario.
  • 3. Training loop. Forward pass, cálculo de cross-entropy loss sobre los tokens siguientes, backward pass, optimizer step (AdamW es el estándar). Gradient clipping para evitar explosión.
  • 4. Validación. Evaluá perplexity sobre un set de validación cada N pasos. Si no cae, hay algo mal: learning rate, arquitectura o datos.

El repositorio de Raschka tiene el código de cada uno de estos pasos en notebooks separados, con comentarios que explican por qué cada decisión. Más útil que cualquier tutorial genérico. Sobre eso hablamos en dónde alojar el código de tu proyecto.

Pre-entrenamiento vs Fine-tuning

Acá viene lo bueno: pre-entrenar desde cero GPT-2 de 117M parámetros en texto razonablemente diverso lleva decenas de horas en una GPU moderna. Para Llama 3 de 8B, hablamos de semanas en clústeres de A100/H100. Para DeepSeek-V2 de 671B, es infraestructura de datacenter.

Para la mayoría de los casos reales, el camino es otro: tomás un modelo preentrenado y hacés fine-tuning. SFT (Supervised Fine-Tuning) entrena el modelo completo sobre tus datos, que requiere memoria proporcional al tamaño del modelo. LoRA y QLoRA (métodos PEFT) congelan la mayor parte de los pesos y solo entrenan matrices de rango bajo, reduciendo los requerimientos de VRAM en un 70-80% con pérdida mínima de calidad.

¿Cuándo pre-entrenar desde cero? Cuando tenés dominio muy específico con vocabulario propio (ej: código propietario, documentos legales en un idioma con pocos datos), o cuando hacés investigación en arquitecturas nuevas. En producción, el 95% de los casos se resuelven con fine-tuning.

Comparativa: GPT-2, Llama 3 y DeepSeek

CaracterísticaGPT-2 (117M)Llama 3 (8B)DeepSeek-V2 (671B)
Parámetros117M – 1.5B8B – 70B671B total / 37B activos
Vocabulario50.257 tokens128.000 tokens102.400 tokens
Embeddings posicionalesAbsolutos (aprendidos)RoPE (rotatorios)RoPE
NormalizaciónLayerNorm postRMSNorm preRMSNorm pre
Arquitectura especialDecoder-only estándarGQA (Grouped Query Attention)Mixture-of-Experts (256 expertos)
Contexto máximo1.024 tokens8.192 tokens128.000 tokens
Año de release201920242024
construir llm desde cero diagrama explicativo

La diferencia entre GPT-2 y Llama 3 no es solo de escala. RoPE (Rotary Position Embedding) maneja contextos largos mucho mejor que los embeddings posicionales absolutos, porque la noción de “distancia relativa” entre tokens se preserva aunque el contexto crezca. RMSNorm es más rápida de computar que LayerNorm sin perder estabilidad.

DeepSeek merece párrafo aparte. Su arquitectura MoE (Mixture-of-Experts) tiene 256 expertos especializados, pero para cada token activa solo un subconjunto, resultando en 37B parámetros activos de los 671B totales. Eso le permite la capacidad de un modelo enorme con el costo computacional de uno más chico. El paper original (disponible en arXiv) detalla el mecanismo de routing entre expertos.

Qué significa esto para equipos en Latinoamérica

Construir desde cero tiene valor pedagógico real, pero también aplicación práctica concreta. Si trabajás en una empresa con datos propios en español rioplatense, documentación técnica muy específica, o jerga de industria, entender la arquitectura te da ventaja para decidir qué modelo base usar, cómo preparar los datos de fine-tuning, y qué esperar del resultado. Lo explicamos a fondo en aplicaciones de LLMs en fintech.

El costo de infraestructura para fine-tuning con LoRA ya es accesible: podés correr fine-tuning de Llama 3 8B en una GPU con 16GB de VRAM usando QLoRA, en plataformas de cloud que cobran por hora. Si necesitás alojar el modelo resultante, tenés opciones de VPS con GPU en donweb.com o proveedores de cloud con instancias GPU.

Qué está confirmado / Qué no

Confirmado

  • El repositorio LLMs-from-scratch de Raschka está activo en GitHub con código funcional para GPT-2, Llama 3 y DeepSeek.
  • El libro de Manning Publishing existe y acompaña el código capítulo a capítulo.
  • Los parámetros técnicos de las tres arquitecturas (vocabulario, normalización, embeddings) están documentados en los papers originales y en el repositorio.
  • DeepSeek-V2 usa MoE con 256 expertos y 37B activos según el paper oficial.

Lo que no queda claro

  • No hay benchmarks independientes de 2026 que comparen las implementaciones del repositorio de Raschka contra las implementaciones oficiales en calidad de output.
  • El soporte a largo plazo del repositorio depende de la actividad de la comunidad; no hay garantías de actualización con arquitecturas futuras.

Errores comunes al construir un LLM desde cero

No clipear gradientes durante el entrenamiento

Si los gradientes explotan, la loss se va a NaN en las primeras iteraciones y el training loop se rompe. La corrección es simple: torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=1.0) antes de cada optimizer step. Es estándar en todos los LLMs modernos y a veces se omite en implementaciones educativas.

Usar el mismo tokenizador para entrenar e inferir

Ya lo mencioné arriba pero lo repito porque es el error más frecuente en proyectos que pasan de prototipo a producción. El tokenizador tiene que ser exactamente el mismo objeto, serializado y deserializado de la misma fuente. No “el mismo tipo de tokenizador”, el mismo archivo. Cualquier diferencia en el vocabulario o en los tokens especiales rompe el output sin mensajes de error claros.

Ignorar el load-balancing en arquitecturas MoE

En modelos con Mixture-of-Experts, si el router siempre manda los tokens a los mismos 2-3 expertos, el resto queda sin entrenar y la ventaja del MoE desaparece. DeepSeek implementa una función de pérdida auxiliar de balance (detallada en este análisis técnico) que penaliza la concentración en pocos expertos. Si implementás MoE propio, necesitás esa pérdida auxiliar desde el inicio.

Confundir temperatura alta con creatividad

Temperatura > 1.0 no hace al modelo más “creativo”, lo hace más aleatorio. La creatividad en un LLM viene del entrenamiento y el prompting, no de escalar la temperatura. Con temperatura 2.0 vas a obtener texto incoherente, no interesante.

Herramientas y recursos para empezar

El ecosistema en 2026 está más maduro que nunca para quien quiere aprender esto:

  • LLMs-from-scratch (GitHub): repositorio principal de Raschka, con notebooks por capítulo. Punto de entrada obligatorio.
  • Build a Large Language Model From Scratch (Manning): libro que acompaña el repositorio, con explicaciones de cada decisión de diseño.
  • Hugging Face LLM Course: curso gratuito que cubre fine-tuning, deployment y evaluación. Complemento ideal para la parte post-preentrenamiento.
  • PyTorch: el framework. Para LLMs desde cero, no hay razón para usar otro en 2026.
  • LlamaFactory: para fine-tuning con LoRA/QLoRA sobre Llama 3 y otros modelos populares, sin código de training loop propio.

¿Necesitás modelos preentrenados para fine-tuning? Hugging Face Hub tiene Llama 3, Mistral, Qwen y docenas de modelos en español con licencias permisivas. No hay necesidad de pre-entrenar desde cero para la mayoría de los casos de uso.

Preguntas Frecuentes

¿Cómo construyo un modelo de lenguaje desde cero?

El camino es: tokenizá tus datos, definí la arquitectura Transformer en PyTorch (embeddings, capas de atención, feedforward, normalización), armá el training loop con cross-entropy loss y AdamW, y entrenás sobre texto. El repositorio LLMs-from-scratch de Sebastian Raschka en GitHub tiene el código completo y ejecutable para GPT-2, Llama 3 y DeepSeek. Cubrimos ese tema en detalle en conceptos básicos de arquitecturas de LLMs.

¿Cuánta GPU necesito para entrenar un LLM desde cero?

Para GPT-2 de 117M parámetros con fines educativos, una GPU con 8GB de VRAM alcanza. Para Llama 3 8B desde cero, necesitás clúster de varias A100 y semanas de cómputo. El fine-tuning con QLoRA sobre Llama 3 8B corre en una sola GPU de 16GB en horas.

¿Cuál es la diferencia entre GPT-2 y Llama 3?

Llama 3 mejora GPT-2 en tres ejes clave: usa RoPE en vez de embeddings posicionales absolutos (mejor manejo de contextos largos), RMSNorm pre-capa en vez de LayerNorm post-capa (más estable y rápido), y un vocabulario de 128.000 tokens vs 50.257. El resultado es mejor calidad de generación, especialmente en idiomas no ingleses y en contextos de más de 1.000 tokens.

¿Qué es Mixture-of-Experts en DeepSeek?

MoE es una arquitectura donde en vez de tener una red feedforward única, tenés N “expertos” (redes separadas) y un router que decide cuáles activar para cada token. DeepSeek-V2 tiene 256 expertos pero activa solo un subconjunto que suma 37B parámetros por token de los 671B totales. Esto permite capacidad de modelo muy grande con costo computacional menor por forward pass.

¿Cuándo conviene fine-tuning vs pre-entrenar desde cero?

Pre-entrenar desde cero tiene sentido si tenés dominio con vocabulario muy específico sin datos públicos disponibles, o si hacés investigación en arquitecturas nuevas. En todos los demás casos, el fine-tuning sobre un modelo preentrenado (con LoRA/QLoRA para reducir requerimientos de hardware) da mejor resultado con mucho menos tiempo y costo.

Conclusión

Construir un LLM desde cero en PyTorch dejó de ser un ejercicio exclusivo de grandes laboratorios. El repositorio de Raschka y el libro de Manning bajan esa barrera a cualquiera con Python, PyTorch y ganas de entender qué hay debajo del capó. No para reemplazar modelos como Llama 3 o DeepSeek en producción, sino para entenderlos lo suficiente como para usarlos mejor, debuguearlos cuando fallan, y tomar decisiones de arquitectura con criterio propio.

Si trabajás con LLMs en cualquier capacidad y todavía no entendés cómo funciona el mecanismo de atención o por qué importa el tokenizador, este es el año para cerrarlo. El material existe, está documentado, y es más accesible que nunca.

Fuentes

Similar Posts