Nanochat: simplicidad, código abierto y pedagogía en el manifiesto técnico de Karpathy

Andrej Karpathy presentó nanochat, un proyecto que condensa todo el ciclo de entrenamiento e inferencia de un modelo tipo ChatGPT en menos de 8.000 líneas de código y con un costo de apenas 100 dólares.

Nanochat: simplicidad, código abierto y pedagogía en el manifiesto técnico de Karpathy

Karpathy, uno de los ingenieros más influyentes en el desarrollo de redes neuronales modernas y a quien admiro mucho, combina en nanochat dos ideas centrales de su trayectoria: la obsesión por la simplicidad y la pedagogía técnica. Tras el éxito de nanoGPT —un repositorio que explicaba desde cero cómo preentrenar un modelo tipo GPT—, el nuevo proyecto expande ese enfoque hacia todo el ciclo de vida de un chatbot.

El resultado es un sistema autocontenido de menos de 8.000 líneas de código, capaz de tokenizar, entrenar, evaluar e inferir respuestas en un entorno web estilo ChatGPT. “Quería un proyecto completo, minimalista, hackeable y legible, que cualquiera pueda estudiar y modificar”, explicó Karpathy en su publicación de X (Twitter).

El proyecto se apoya en herramientas de código abierto y en un flujo que puede ejecutarse de inicio a fin en un servidor con 8 GPUs H100 —como los ofrecidos por Lambda GPU Cloud—, sin dependencias externas ni configuraciones complejas.

De los tokens a la conversación

Tokenización en Rust

Uno de los primeros pasos del speedrun de nanochat consiste en entrenar un tokenizador personalizado, implementado en Rust. Karpathy descarta tanto su anterior minBPE (en Python, demasiado lento) como el tokenizador de Hugging Face, por considerarlo “sobrecargado”.

El nuevo componente —rustbpe— logra un vocabulario de 65.536 símbolos y supera al tokenizador de GPT-2 en eficiencia de compresión sobre texto inglés, con una ratio de 4,8 caracteres por token. Aunque GPT-4 sigue siendo más eficiente en contextos multilingües y de código, nanochat iguala o supera su rendimiento en el dataset FineWeb-EDU, sobre el que fue entrenado.

El tokenizador se entrena con el comando:

python -m scripts.tok_train --max_chars=2000000000
python -m scripts.tok_eval

El resultado es una herramienta compacta y reproducible, ideal para quienes desean entender cómo se construye el vocabulario simbólico que alimenta un LLM.

Preentrenamiento: el corazón del modelo

Con el tokenizador listo, el sistema descarga los datos de FineWeb-EDU y lanza el preentrenamiento del modelo base mediante:

torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=20

El modelo resultante tiene 20 capas, 1.280 dimensiones y cerca de 560 millones de parámetros. En tres horas y media de entrenamiento (alrededor de 4e19 FLOPs), alcanza una puntuación CORE de 0,22, comparable al rendimiento de GPT-2 Large de 2019.

Durante el proceso, la métrica bits per byte (bpb) desciende progresivamente, lo que indica que el modelo mejora su capacidad para predecir el siguiente token. El preentrenamiento se optimiza con Muon, un optimizador diseñado por Karpathy para matrices distribuidas, y con AdamW para embeddings.

Midtraining y conversación

El paso siguiente, llamado midtraining, ajusta el modelo sobre conversaciones reales tomadas del dataset SmolTalk de Hugging Face, junto con miles de preguntas de opción múltiple (MMLU) y problemas matemáticos (GSM8K).

Este entrenamiento enseña al modelo tres habilidades esenciales:

  • Reconocer el formato de diálogo con tokens especiales <|user_start|> y <|assistant_start|>;
  • Resolver preguntas de opción múltiple, algo que los modelos pequeños no aprenden sólo del texto web;
  • Usar herramientas externas, como un intérprete de Python integrado para resolver cálculos durante la conversación.

Tras unos minutos de ajuste, el modelo supera el azar en las métricas de ARC-Easy, ARC-Challenge y MMLU, con resultados del orden del 35%–40%, y alcanza un 2,5% de aciertos en GSM8K, notable para un sistema de tan poca capacidad.

SFT y RL: refinamiento final

La etapa de Supervised Fine-Tuning (SFT) refina las respuestas en formato conversacional real. Aquí el modelo mejora sus métricas globales —ChatCORE pasa de 0,073 a 0,088— y comienza a sostener diálogos breves con coherencia básica.

El siguiente paso opcional, Reinforcement Learning (RL), aplica un método simplificado de GRPO sobre GSM8K para aumentar la precisión matemática. Aunque Karpathy aclara que el bucle aún no está totalmente optimizado, el modelo logra una mejora tangible (de 4,5% a 7,5% en GSM8K).

Todo el proceso —hasta el fin del SFT— toma menos de cuatro horas de reloj y genera un informe automático en Markdown (report.md) con resultados, métricas y costo total estimado: 92 dólares.

Resultados y escalabilidad

El speedrun genera un modelo con 560 millones de parámetros, similar al GPT-2 Small, pero el repositorio permite escalar fácilmente hasta configuraciones mayores:

  • --depth=26 (12 horas, ~$300) → nivel GPT-2 completo.
  • --depth=32 (33 horas, ~$800) → modelo de 1.9B parámetros, puntuación MMLU ~45.

En este punto, el sistema ya puede escribir textos breves, resolver operaciones simples y mantener diálogos limitados, aunque aún con errores frecuentes y razonamiento corto.

El código está optimizado para funcionar también en GPU A100 o incluso en CPU/MPS para fines educativos, ajustando el tamaño de lote (device_batch_size) y el número de acumulaciones de gradiente.

Impacto técnico

Más que un modelo, nanochat es una plataforma pedagógica de ingeniería en IA. Permite experimentar con cada capa del stack moderno de entrenamiento de LLMs —tokenización, dataset streaming, optimización, inferencia y despliegue web— sin recurrir a librerías externas ni arquitecturas corporativas.

Su diseño limpio y lineal busca mantener el espíritu de los primeros papers de transformers: legibilidad sobre automatización. En tiempos en que los modelos comerciales se cierran sobre sí mismos, Karpathy propone una infraestructura radicalmente abierta, reproducible y económica.

Perspectiva

nanochat ejemplifica cómo el conocimiento técnico puede sustituir al poder de cómputo: la comprensión de los mecanismos internos vuelve a ser una forma de innovación.

El proyecto no pretende competir con los grandes modelos de OpenAI o Anthropic, sino educar a una nueva generación de ingenieros que entiendan de primera mano los fundamentos del lenguaje natural y la generación de texto.

En la práctica, nanochat convierte el aprendizaje de LLMs en un proceso tangible: abrir una terminal, ejecutar un script, observar la curva de pérdida y finalmente conversar con el modelo.

En un campo dominado por infraestructura cerrada, Karpathy vuelve a recordar que la curiosidad sigue siendo la fuerza más poderosa en la inteligencia artificial.

“Mi objetivo es ofrecer un stack base sólido, legible y hackeable. nanochat es solo el comienzo”, escribió Karpathy.