29 puntos por GN⁺ 2025-10-14 | 1 comentarios | Compartir por WhatsApp
  • nanochat de Andrej karpathy es un proyecto open source para construir tú mismo un LLM conversacional similar a ChatGPT con un presupuesto de $100
  • Todo el pipeline (tokenización, preentrenamiento, midtraining, ajuste fino, evaluación, inferencia y servicio web) está implementado de forma simple y hackeable
  • En un nodo con 8 GPU H100, el entrenamiento termina en menos de 4 horas con un solo script; el modelo d26, que apunta a un rendimiento de nivel GPT-2, tarda unas 12 horas por alrededor de 300 dólares, y el tier de 1000 dólares tarda 41.6 horas
  • Es una base de código extremadamente compacta, compuesta por 8,300 líneas y 44 archivos con un tamaño de 330 KB, y ofrece una línea base potente, fácil de leer y de hacer fork sin objetos de configuración complejos ni factorías de modelos
  • Se está desarrollando como proyecto final del curso LLM101n de Eureka Labs, y su meta es mejorar el estado del arte de los micromodelos accesibles con presupuestos menores a 1000 dólares

Resumen del proyecto nanochat

  • nanochat es un proyecto open source creado para desarrolladores que quieren implementar un LLM conversacional similar a ChatGPT por $100
  • Toda la base de código está escrita de forma unificada, legible, con pocas dependencias y concisa, lo que facilita modificarla y experimentar
  • Ofrece un entorno para gestionar de una sola vez todo el proceso, desde pretraining, finetuning, evaluación, inferencia y web UI
  • Con el script speedrun.sh, es posible ejecutar automáticamente todo el pipeline, así que incluso principiantes pueden empezar con facilidad
  • Está diseñado con dependencias mínimas y una estructura hackeable, optimizado para fines educativos y para que sea fácil de entender y modificar
  • El proyecto se usará como proyecto final del curso LLM101n que desarrolla Eureka Labs

Inicio rápido (Quick Start)

  • Si ejecutas speedrun.sh en un entorno con GPU, especialmente un nodo 8XH100, se configura un proceso de entrenamiento e inferencia de unas 4 horas
    • En un nodo 8XH100, con una tarifa de 24 dólares por hora, el tiempo total es de 4 horas
  • Se recomienda ejecutarlo dentro de una sesión de screen para poder monitorearlo de forma estable durante entrenamientos largos
    • Usa el comando screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh
    • Puedes separarte con Ctrl-a d y revisar el progreso con tail speedrun.log
  • Cuando termine el entrenamiento, puedes hacerle preguntas libremente al LLM desde una web UI sencilla y ver las respuestas en una ventana de chat
    • python -m scripts.chat_web
  • Un modelo del nivel de 4e19 FLOPs ofrece una capacidad conversacional comparable a la de un niño de kínder
    • Puede pedirle historias o poemas
    • Se puede observar el fenómeno de las alucinaciones
    • Puede responder preguntas básicas, como por qué el cielo es azul
  • Los resultados del entrenamiento y varias métricas de rendimiento se guardan en report.md

Reporte de resultados de entrenamiento

  • El archivo report.md incluye la "boleta" de la ejecución del entrenamiento
    • Proporciona varios indicadores y métricas de evaluación
    • La tabla resumen final muestra el rendimiento por etapas: BASE, MID, SFT y RL
  • Estadísticas de la base de código
    • Cantidad de caracteres: 333,989
    • Cantidad de líneas: 8,304
    • Cantidad de archivos: 44
    • Cantidad de tokens (aprox.): 83,497
    • Dependencias (líneas de uv.lock): 2,004
  • Ejemplos de rendimiento en benchmarks
    • CORE: 0.2219 (BASE)
    • ARC-Challenge: 0.2875 (MID), 0.2807 (SFT)
    • GSM8K: 0.0250 (MID), 0.0455 (SFT), 0.0758 (RL)
    • HumanEval: 0.0671 (MID), 0.0854 (SFT)
    • Tiempo total requerido: 3 horas 51 minutos
  • Aunque el rendimiento del modelo es inferior al de ChatGPT, se prioriza la experiencia de implementar un LLM con bajo presupuesto

Modelos más grandes (Bigger Models)

  • Con 100 dólares no es posible entrenar un clon de ChatGPT de alto rendimiento; los LLM reales son conocidos por requerir gastos de capital de millones de dólares
  • Hay dos escalas adicionales de interés
    • Tier de unos 300 dólares para el modelo d26 (depth=26): cerca de 12 horas de entrenamiento, superando ligeramente la puntuación CORE de GPT-2
    • Tier de 1000 dólares: cerca de 41.6 horas, una cifra redonda y limpia
  • Cambios necesarios en speedrun.sh para entrenar el modelo d26
    • Se necesita descargar más shards de datos
      • Calcula la cantidad de tokens multiplicando por 20 el número de parámetros
      • Calcula la cantidad de caracteres multiplicando por 4.8
      • Divide entre 250 millones para calcular la cantidad de shards (se necesitan unos 450)
    • Usa la opción --depth=26 y reduce a la mitad device_batch_size, de 32 a 16, para evitar OOM
    • También es necesario usar el mismo device_batch_size en la etapa de midtraining

Requisitos del entorno de cómputo

  • También puede ejecutarse en un nodo 8XA100 GPU, aunque es un poco más lento
  • También puede ejecutarse en una sola GPU
    • Si se omite torchrun, produce casi los mismos resultados
    • Cambia automáticamente a gradient accumulation
    • Toma 8 veces más tiempo
  • Para GPUs con menos de 80 GB de VRAM, hace falta ajustar los hiperparámetros
    • Reduce --device_batch_size del valor predeterminado de 32 a 16, 8, 4, 2 o 1 para liberar memoria
    • Si necesitas configurarlo por debajo de 1, hará falta un enfoque más creativo
  • Como está basado en PyTorch vanilla, puede adaptarse a varios entornos como xpu, mps, etc.
    • No viene listo de fábrica, así que requiere algunos cambios

Utilidad y accesibilidad

  • La mayor ventaja de nanochat es que se pueden empaquetar todos los archivos de una sola vez para hacer preguntas fácilmente a otros LLM, servicios de búsqueda documental, etc.
  • Ejemplo de uso de la utilidad files-to-prompt
    • Incluye archivos py, md, rs, html, toml y sh
    • Excluye la carpeta rustbpe/target
    • Selecciona el formato de salida cxml
    • Empaqueta unos 330 KB (menos de ~100 mil tokens), 45 archivos y 8 mil líneas de código
  • Se recomienda usar DeepWiki
    • Puedes hacer preguntas sobre el repositorio cambiando github.com por deepwiki.com en la URL de GitHub
    • Ofrecido por Devin/Cognition

Contribuciones y dirección del proyecto

  • nanochat es un proyecto que todavía no está terminado
  • Su objetivo es mejorar el estado del arte de los micromodelos que pueden construirse de punta a punta con presupuestos menores a 1000 dólares
  • La accesibilidad no solo incluye el costo, sino también la complejidad cognitiva
    • No hay objetos de configuración gigantes, ni factorías de modelos, ni código monstruoso de if-then-else
    • No es un "framework" de LLM completamente configurable
  • Es una base de código única, consistente, mínima, legible, hackeable y lo más fácil posible de hacer fork, una "línea base potente"
    • Está diseñada para ejecutarse de principio a fin y producir un clon concreto de ChatGPT junto con su boleta de resultados

1 comentarios

 
GN⁺ 2025-10-14
Opiniones de Hacker News
  • Es una experiencia interesante usando herramientas de IA para programar.
    En algún momento le pregunté a Karpathy cuánto código había escrito él mismo.
    Karpathy: gracias por la pregunta, pero en esencia escribí la mayor parte del código a mano (usando autocompletado con tab).
    Probé unas cuantas veces los agentes de claude/codex, pero como la precisión era baja, no ayudaron mucho.
    Supongo que puede ser porque el repo que hice está demasiado alejado de la distribución de datos.
    Enlace a la conversación original

    • Eso de que "el repo está demasiado alejado de la distribución de datos" explica por qué a mí casi siempre no me ayuda cuando uso modelos de IA.
      Todo lo que hago es demasiado único y está lejos de la distribución.

    • Me da gusto que alguien confiable como Karpathy lo diga así.
      Creo que quienes piensan que AGI está por llegar deberían bajar un poco sus expectativas.
      A mí también me gusta Claude Code.
      A veces tengo que escribir código web periódicamente, y como en la parte web la cobertura de datos de entrenamiento es tan buena, Claude es mucho mejor desarrollador web que yo.
      Pero cuando necesito meterme a la parte algorítmica central de mis herramientas de automatización, Claude tiene menos de dónde apoyarse y comete más errores.
      Aun así, en general sigue siendo una ganancia, así que con gusto pago por usarlo.
      Incluso si solo se quedara como asistente para desarrollo web, ya sería de gran ayuda.

    • Creo que esto más bien es un fenómeno natural.
      Se trata de una situación en la que se escribe código nuevo y original.
      Mucha gente está criticando la respuesta de Karpathy, pero el simple hecho de que haya intentado usar claude/codex sugiere que en el pasado esas herramientas sí le sirvieron de verdad.

    • Otro enlace espejo del tuit de Karpathy aquí

  • Me parece impresionante que nanochat esté inspirado en modded-nanoGPT.
    La genealogía es nano-GPT de Karpathy → modded-nanoGPT de Keller Jordan (una versión para entrenar modelos más rápido) → NanoChat.
    Lo notable de modded-nanoGPT es que entrena modelos GPT pequeños a una velocidad increíble.
    En particular, usa el optimizador Muon (desarrollado por el propio autor) en las capas lineales en lugar de AdamW.
    modded-nanoGPT, introducción al optimizador Muon

    • Muon es un optimizador que Keller Jordan creó para esta competencia de entrenamiento rápido, con mejoras aportadas también por otras personas.
      En menos de un año ya se usa ampliamente como SOTA para entrenamiento de modelos.

    • Es bastante impactante que estén corriendo un solo nodo de inferencia con 8xH100.
      Me pregunto si los frontier LLM de producción real se ejecutan más o menos así, o si consumen todavía más VRAM/cómputo.
      Si cuesta alrededor de $8 por hora, y asumimos 5 segundos por solicitud, entonces podría atender unas 700 solicitudes.
      O sea, alrededor de 1 centavo por solicitud.
      Me pregunto si mis cuentas están mal.

  • Ahora mismo todavía se está entrenando de verdad (empezó hace 20 minutos).
    Logs del experimento públicos
    En 4 horas, cuando el modelo esté listo, planean compartirlo para que cualquiera pueda probar la inferencia.

    • Ya subieron el modelo terminado a Hugging Face.
      No logré resultados tan buenos como Karpathy (¿mala suerte con la seed?).
      Aun así, es divertido experimentar.
      Por ejemplo, le pregunté: "¿Cuántas patas tiene un perro?"
      Asistente: "Esa es una pregunta realmente interesante, y ha sido discutida entre amantes de los perros durante siglos. No hay una 'respuesta correcta' (...)"

    • En el comentario junto a la primera gráfica,
      "La métrica principal de progreso. Bits per byte es, como dice Karpathy, 'una métrica mucho mejor que el cross-entropy loss típico. Normaliza la loss por el número de bytes de cada token, lo que permite comparar sin depender del tokenizador'"
      La explicación es tan clara que hasta me da pena no haber pensado en eso cuando hice mis experimentos de tokenizador con tinystories.
      Quiero volver a analizar qué tan bueno era realmente mi tokenizador.

    • Estaría bien tener un pequeño 'howto' sobre cómo correr este repositorio entrenando con W&B.
      Me pregunto si podrían compartir un paso a paso para programadores que nunca han pasado por el flujo de entrenamiento de un modelo.

  • ¡Está divertido!
    El generador de Shakespeare de Karpathy fue el primer proyecto con el que experimenté después de ollama.
    Quería entender cómo funcionan los LLM.
    Desde la semana pasada estoy totalmente metido en los LLM y construyendo, desde cero, un sistema de entrenamiento/inferencia con dos backends.

    • CPU (basado en JAX)
    • GPU (basado en wgpu-py)
      rocm/pytorch me resultan tan engorrosos que me generan rechazo.
      Vulkan está bien. llama-cpp también lo usa así.
      La semana pasada logré que tanto el backend de CPU como el de GPU funcionaran, y me concentré en arreglar bugs del backend de GPU.
      Refactoricé el código WGSL y mejoré la eficiencia.
      Usé mucho los LLM en este proceso, y fue un punto de inflexión sorprendentemente grande.
      Con prompts de refactorización puedes ir corrigiendo errores paso a paso y al final obtener código que incluso pasa type checking con astral ty.
    • ¿Te genera rechazo pytorch?
      Siento que ya no podría haber una elección menos eficiente que esa.
  • Este fin de semana probé nanoGPT(enlace).
    Es un proyecto ya algo viejo, pero es una práctica genial para construir y entrenar tú mismo un GPT pequeño de Shakespeare.
    Lo corrí en CPU con unos 0.8M parámetros.
    El resultado fue, más o menos, tan "malo" como se esperaba.
    Aun así, te deja una sensación casi mágica.
    Para alguien que no estudia deep learning y solo quiere experimentar y hackear cosas, es una introducción excelente.
    Todavía no termino de escribir en el blog mi experiencia de fin de semana con nanoGPT... si ya la hubiera terminado, la pondría aquí.

    • Es una práctica útil porque permite validar buena investigación de ML a pequeña escala.
      Este ejemplo nuevo va más allá e incluye instruction following, tool use SFT y hasta RLVR.
      Gracias a eso, produce un baseline más útil.

    • Si ajustas un poco el código de Shakespeare y lo entrenas con otros datos, funciona bastante bien para generar decks commander de Magic The Gathering.

  • "Recibió consejos de Alec Radford, chief LLM whisperer"
    Si algún día sale un podcast con Alec y Andrej, creo que sacudiría al mundo.
    Desde los días gloriosos de GPT1 hasta ahora, en que hacen un GPT3 en solo 4 horas.

    • Por favor, ojalá sí salga ese podcast, sería perfecto.
  • Eureka Labs: enlace a Github
    Andrej es de verdad una persona increíblemente prolífica.
    Seguir su trabajo en sí mismo ya es una experiencia impresionante.

  • Siempre he pensado que la mejor manera de contribuir a la humanidad
    es el producto de a cuántas personas ayudas y qué tan profundamente las ayudas.
    El trabajo open source que hace Karpathy, en ese sentido, es un enfoque con un apalancamiento enorme.
    El mundo actual también está construido sobre proyectos open source.
    Gracias a la libertad de que cualquiera en el mundo pueda aprender a programar gratis y crear software.
    Ojalá el campo de la IA/LLM siga esta dirección positiva.

    • Me encanta esa tradición de gratuidad y compartir en el software,
      pero con los LLM parece difícil mantenerla por los costos tan altos de entrenamiento y el hardware potente que requieren.
      Da la impresión de que en adelante incluso el desarrollo de software tendrá que seguir pagando una especie de "renta" a los hosts de LLM.
      Puede que aparezca una forma de hacer que los entornos de inferencia on-prem/local vuelvan a estar al alcance de cualquiera,
      pero por ahora se ve incierto por los altos costos de entrenamiento.
      Y mientras más dependamos de los LLM,
      me preocupa que se reduzca cada vez más la producción de contenido "hecho a mano", como tutoriales para principiantes en programación.

    • (Es un poco largo, pero todo sale de un deseo genuino de un mundo mejor).
      Esta perspectiva es algo distinta del sentimiento principal "anti-IA".
      El concepto de propiedad intelectual, en vez de tratarse de una contribución directa a la humanidad, crea una estructura en la que cierta gente acumula propiedad sobre la información y se la arrienda al resto de la humanidad.
      Pero también es indispensable que exista un entorno donde los creadores individuales puedan ganarse la vida.
      No solo lo que hace Karpathy: también creo que miles de creadores de YouTube aportan muchísimo a la sociedad en sus respectivos campos.
      Aun así, es un poco amargo que tanta gente tenga que depender de patrocinios.
      También está Patreon, pero no es ideal.
      Estoy de acuerdo en que todo este esfuerzo es una forma de gran contribución social.
      Hace poco, en Daily Show, Jon Stewart dijo que entrenar IA es strip mining del conocimiento humano.
      A veces se reduce unilateralmente el entrenamiento de IA a algo parecido al robo, pero en realidad hay posturas muy diversas.
      Esta tendencia podría terminar reforzando una estructura hipercapitalista de propiedad del conocimiento,
      donde la propiedad de las ideas se concentre cada vez más en unas pocas manos.
      Ese fenómeno no ayuda mucho al mundo en general y solo beneficia a ciertos grupos.
      Incluso el comercio de propiedad intelectual, con el tiempo, termina concentrándose en menos manos.
      Creo que hacen falta debates y nuevas interpretaciones acordes con la sociedad moderna.
      Da pena que siempre haya un derrotismo de "los de arriba lo van a bloquear, así que no sirve discutirlo", que termina frenando la conversación.
      Es importante debatir libremente cómo podrían surgir alternativas mejores.

    • Recomiendo seguido su serie de videos ANN/LLM from scratch.
      Las clases son muy claras, y su estilo de código también es pythonic, conciso y fácil de leer,
      (la parte de vectorización en pytorch sí es compleja, pero eso solo significa que es un tema difícil)
      así que también ayuda mucho a todos poder aprender ese estilo mientras ven los videos.

  • Me pregunto si podría entrenar un modelo con todos los libros de psicología, materiales, reportes y papers que realmente tengo,
    y luego hacer inferencia sobre preguntas especializadas cuando lo necesite en un nodo 1xH100(enlace).

    • Sí se puede hacer,
      pero el rendimiento sería extremadamente malo.
      En un caso así, sería mucho mejor tomar un modelo pequeño preentrenado y hacer fine-tuning con mis datos,
      o usar un flujo RAG (Retrieval Augmented Generation), o una combinación de ambos.

    • Sí se puede.
      Pero usar un modelo generalista y meter tus documentos en el contexto de trabajo con distintas técnicas (por ejemplo: RAG, hierarchical memories de Apple y otros enfoques enlace al paper) podría dar resultados todavía mejores.

    • Se puede hacer,
      pero como mi dataset en sí es tan pequeño, el rendimiento sería mucho peor que usar un modelo preentrenado + fine-tuning, o un modelo pequeño + RAG.

    • No.

  • ¡Este proyecto de verdad motiva!
    Estaría bien conocer ejemplos reales del rendimiento de prompts o resultados de pruebas.

    • En Simon.incutio.com
      avisan que aquí hay capturas de pantalla de prompts reales.