Clona ChatGPT por $100: Implementación LLM full-stack de un solo archivo

MITPythonnanochatkarpathy 33.3k Last Updated: October 25, 2025

Descripción detallada del proyecto nanochat

Resumen del proyecto

nanochat es un proyecto de implementación de un modelo de lenguaje grande (LLM) de pila completa, desarrollado por el reconocido investigador de IA Andrej Karpathy. Su filosofía central es demostrar cómo construir un chatbot similar a ChatGPT desde cero, utilizando la menor cantidad de código y el costo más bajo posible.

Lema del proyecto: "The best ChatGPT that $100 can buy." (El mejor ChatGPT que se puede comprar por 100 dólares.)

Características principales

1. Filosofía de diseño minimalista

  • Base de código única, clara, minimalista y modificable
  • Diseño de baja dependencia
  • Aproximadamente 8,300 líneas de código, 44 archivos
  • Un total de aproximadamente 83,497 tokens (aproximadamente 334KB)

2. Proceso completo de extremo a extremo

nanochat cubre todas las etapas de la construcción de un LLM:

  • Tokenization (Tokenización)
  • Pretraining (Preentrenamiento)
  • Finetuning (Ajuste fino)
  • Evaluation (Evaluación)
  • Inference (Inferencia)
  • Web Serving (Servicio web)

3. Entrenamiento de bajo costo

  • Versión básica (nivel $100): Completada en aproximadamente 4 horas en un nodo de 8×H100
  • Versión intermedia (nivel $300): Aproximadamente 12 horas, rendimiento ligeramente superior a GPT-2
  • Versión avanzada (nivel $1000): Aproximadamente 41.6 horas

4. Orientación educativa

  • Diseñado como proyecto final para el curso LLM101n de Eureka Labs
  • Código altamente legible, fácil de aprender y comprender
  • Ideal para desarrolladores que desean comprender a fondo el proceso completo de entrenamiento de un LLM

Inicio rápido

Ejecutar script de entrenamiento rápido

En un nodo GPU de 8×H100, ejecute:

bash speedrun.sh

O ejecute en una sesión de screen (recomendado):

screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh

Después de aproximadamente 4 horas, tendrá un modelo LLM utilizable.

Iniciar interfaz web

Una vez finalizado el entrenamiento, active el entorno virtual e inicie el servicio:

source .venv/bin/activate
python -m scripts.chat_web

Luego, acceda a la URL mostrada (por ejemplo, http://209.20.xxx.xxx:8000/) para conversar con su propio LLM como si usara ChatGPT.

Ejemplo de resultados de entrenamiento

Una vez finalizado el entrenamiento, se generará el archivo report.md, que contiene las métricas de evaluación del modelo:

Metric         | BASE   | MID    | SFT    | RL
---------------|--------|--------|--------|-------
CORE           | 0.2219 | -      | -      | -
ARC-Challenge  | -      | 0.2875 | 0.2807 | -
ARC-Easy       | -      | 0.3561 | 0.3876 | -
GSM8K          | -      | 0.0250 | 0.0455 | 0.0758
HumanEval      | -      | 0.0671 | 0.0854 | -
MMLU           | -      | 0.3111 | 0.3151 | -
ChatCORE       | -      | 0.0730 | 0.0884 | -

Total wall clock time: 3h51m

Nota: El rendimiento del modelo entrenado con $100 es limitado (aproximadamente 4e19 FLOPs), equivalente a una capacidad lingüística de "nivel de jardín de infancia", pero suficiente para demostrar el proceso de entrenamiento completo.

Extensión a modelos más grandes

Para entrenar modelos más grandes (como el modelo d26 de nivel GPT-2), solo necesita realizar pequeñas modificaciones en speedrun.sh:

# 1. Descargar más fragmentos de datos
python -m nanochat.dataset -n 450 &

# 2. Aumentar la profundidad del modelo, reducir el tamaño del lote para adaptarse a la memoria
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=26 --device_batch_size=16

# 3. Mantener la misma configuración durante el entrenamiento intermedio
torchrun --standalone --nproc_per_node=8 -m scripts.mid_train -- --device_batch_size=16

Requisitos del entorno de ejecución

Configuración recomendada

  • Nodo GPU de 8×H100 80GB (aproximadamente $24/hora)
  • Proveedor sugerido: Lambda GPU Cloud

Compatibilidad

  • GPU 8×A100: Puede ejecutarse, pero más lento
  • GPU única: Puede ejecutarse, pero el tiempo de entrenamiento se multiplica por 8
  • GPU con poca memoria (<80GB): Necesita ajustar el parámetro --device_batch_size (de 32 a 16, 8, 4, 2 o 1)
  • Otras plataformas: Basado en PyTorch, teóricamente compatible con xpu, mps, etc., pero requiere configuración adicional

Pila tecnológica

  • Framework de aprendizaje profundo: PyTorch
  • Entrenamiento distribuido: torchrun
  • Gestión de paquetes: uv
  • Conjuntos de datos: HuggingFace Fineweb, Smoltalk
  • Tokenizador: Implementación personalizada en Rust (rustbpe)

Explorar código con IA

Dado que la base de código es concisa (~330KB), se puede empaquetar todo el proyecto y proporcionarlo a un LLM para su análisis:

files-to-prompt . -e py -e md -e rs -e html -e toml -e sh --ignore "*target*" --cxml > packaged.txt

O use DeepWiki para explorar directamente la base de código en línea.

Pruebas

El proyecto incluye pruebas unitarias, especialmente para el tokenizador:

python -m pytest tests/test_rustbpe.py -v -s

Posicionamiento y objetivos del proyecto

nanochat NO es:

  • Un framework LLM con todas las funciones
  • Una fábrica de modelos altamente configurable
  • Una solución de nivel de producción

nanochat ES:

  • Una implementación de referencia de naturaleza educativa
  • Una base sólida, modificable y bifurcable
  • Orientado a la investigación de micromodelos con un presupuesto inferior a $1000
  • Una forma de reducir la complejidad cognitiva del desarrollo de LLM

Historia del proyecto y agradecimientos

  • Fuentes de inspiración:

    • nanoGPT - Proyecto de preentrenamiento temprano de Karpathy
    • modded-nanoGPT - Variante gamificada de nanoGPT
  • Agradecimientos:

    • HuggingFace - Por proporcionar los conjuntos de datos fineweb y smoltalk
    • Lambda - Por proporcionar la capacidad de cómputo necesaria para el desarrollo
    • Alec Radford - Asesor principal de LLM

Licencia de código abierto

Licencia MIT

Formato de citación

@misc{nanochat,
  author = {Andrej Karpathy},
  title = {nanochat: The best ChatGPT that $100 can buy},
  year = {2025},
  publisher = {GitHub},
  url = {https://github.com/karpathy/nanochat}
}

Estado del proyecto

El proyecto se encuentra en desarrollo activo, con el objetivo de mejorar continuamente el estado del arte de los micromodelos, permitiendo que más personas experimenten el proceso completo de entrenamiento de un LLM a un costo asequible.


Dirección de GitHub: https://github.com/karpathy/nanochat

Star History Chart