- rasbt/LLMs-from-scratch es un repositorio con código para desarrollar, preentrenar y hacer fine-tuning de un LLM similar a GPT, y es el repositorio oficial de código del libro de Manning Build a Large Language Model (From Scratch).
- El enfoque de aprendizaje consiste en crear desde cero un modelo pequeño pero funcional con fines educativos, siguiendo un flujo similar al enfoque usado para construir los grandes modelos base detrás de ChatGPT.
- El contenido ofrece código y notebooks por capítulo, desde el procesamiento de datos de texto, mecanismos de atención, implementación de GPT, preentrenamiento con datos sin etiquetas y fine-tuning para clasificación de texto, hasta fine-tuning para seguir instrucciones.
- El código de los capítulos principales está diseñado para ejecutarse en un tiempo razonable en una laptop común, aprovecha automáticamente la GPU cuando está disponible y está implementado en PyTorch sin bibliotecas externas de LLM.
- Los apéndices y materiales extra se expanden a LoRA, KV Cache, MoE, implementaciones de familias Llama/Qwen/Gemma, evaluación, DPO y ejemplos de UI, lo que permite ampliar el proceso de aprendizaje de LLM con un enfoque práctico.
Objetivo del repositorio y relación con el libro
- rasbt/LLMs-from-scratch es un repositorio de código para implementar desde cero un LLM similar a GPT.
- Se ofrece como el repositorio oficial de código del libro de Manning Build a Large Language Model (From Scratch).
- El libro está estructurado para entender cómo funciona internamente un LLM mediante programación paso a paso.
- Las explicaciones incluyen texto, diagramas y ejemplos.
- Se desarrolla y entrena directamente un modelo pequeño pero funcional con fines educativos.
- El repositorio también incluye código para cargar pesos de modelos preentrenados más grandes y hacer fine-tuning.
- Información del libro:
Instalación y uso del código
- El repositorio se puede obtener descargando el ZIP o con
git clone.
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
- Si se descargó el paquete de código desde el sitio web de Manning, se indica revisar el repositorio oficial en GitHub para las actualizaciones más recientes.
- La instalación de Python y paquetes, y la configuración del entorno de código, se cubren en setup/README.md.
- La documentación para resolver problemas se ofrece como Troubleshooting Guide.
Flujo de aprendizaje por capítulo
- El libro y el repositorio dividen la implementación de LLM en un currículum paso a paso.
- Estructura de los capítulos principales:
- Cap. 1: Entender los LLM, sin código
- Cap. 2: Trabajar con datos de texto
- Cap. 3: Implementar mecanismos de atención
- Cap. 4: Implementar un modelo GPT desde cero
- Cap. 5: Preentrenamiento con datos sin etiquetas
- Cap. 6: Fine-tuning para clasificación de texto
- Cap. 7: Fine-tuning para seguir instrucciones
- Los apéndices incluyen una introducción a PyTorch, referencias, soluciones a los ejercicios, mejoras del loop de entrenamiento y fine-tuning eficiente en parámetros basado en LoRA.
Conocimientos previos y entorno de ejecución
- El conocimiento previo más importante es una base de programación en Python.
- Tener experiencia con redes neuronales de deep learning puede hacer que algunos conceptos resulten más familiares.
- El código se implementa desde cero con PyTorch, sin bibliotecas externas de LLM.
- No es obligatorio dominar PyTorch.
- Tener conocimientos básicos de PyTorch ayuda.
- El Apéndice A ofrece una breve introducción a PyTorch.
- El código de los capítulos principales está diseñado para ejecutarse en un tiempo razonable en una laptop común.
- No se requiere hardware especial; si hay una GPU, se usa automáticamente.
Videoclases y libro posterior
- Manning cuenta con un curso en video complementario de 17 horas y 15 minutos que sigue la estructura del libro.
- Refleja la estructura de cada capítulo y sección del libro.
- Puede usarse como alternativa independiente o como material complementario para seguir la programación.
- También se presenta el libro de continuidad Build A Reasoning Model (From Scratch).
- Es un libro independiente, pero puede verse como una continuación de Build A Large Language Model (From Scratch).
- Parte de un modelo preentrenado e implementa enfoques para mejorar la capacidad de razonamiento.
- Enfoques incluidos: inference-time scaling, aprendizaje por refuerzo, distillation
- Repositorio relacionado: rasbt/reasoning-from-scratch
Ejercicios y materiales extra
- Cada capítulo incluye varios ejercicios.
- Las soluciones están resumidas en el Apéndice C, y los notebooks de código correspondientes están en la carpeta de cada capítulo.
- En el sitio web de Manning se puede obtener gratis el PDF de 170 páginas Test Yourself On Build a Large Language Model (From Scratch).
- Incluye cerca de 30 quizzes por capítulo y sus soluciones.
-
Principales temas extra
- Setup:
- Consejos de configuración de Python
- Instalación de paquetes y bibliotecas
- Configuración de entorno Docker
- Cap. 2:
- Implementar un tokenizador BPE desde cero
- Comparar varias implementaciones de BPE
- Diferencia entre capas de embedding y capas lineales
- Intuición del dataloader con números simples
- Cap. 3:
- Comparación de implementaciones eficientes de multi-head attention
- Entender los buffers de PyTorch
- Cap. 4:
- Análisis de FLOPs
- KV Cache
- Grouped-Query Attention, Multi-Head Latent Attention, Sliding Window Attention
- Gated DeltaNet, DeepSeek Sparse Attention, Cross-Layer KV Sharing
- Mixture-of-Experts
- Cap. 5:
- Métodos alternativos de carga de pesos
- Preentrenamiento con el dataset Project Gutenberg
- Mejoras del loop de entrenamiento
- Optimización de hiperparámetros
- UI para interactuar con un LLM preentrenado
- Convertir GPT a Llama
- Carga de pesos del modelo eficiente en memoria
- Ampliar el tokenizador BPE de Tiktoken
- Consejos de rendimiento de PyTorch para entrenar LLM más rápido
- Implementaciones de Llama 3.2, Qwen3, Gemma 3, Olmo 3, Tiny Aya, Qwen3.5, Gemma 4
- Cap. 6:
- Experimentos adicionales de fine-tuning con otras capas y modelos más grandes
- Fine-tuning para clasificación con el dataset de 50k reseñas de películas de IMDb
- UI de clasificador de spam basado en GPT
- Cap. 7:
- Utilidades de dataset para detección de casi duplicados y generación de ítems en voz pasiva
- Evaluación de respuestas a instrucciones usando la API de OpenAI y Ollama
- Creación y mejora de datasets de fine-tuning de instrucciones
- Creación de preference dataset con Llama 3.1 70B y Ollama
- Implementación de alineación de LLM con DPO
- UI para un modelo GPT ajustado con instrucciones
Contribuciones y citas
- Se reciben comentarios y preguntas en el Manning Forum o en GitHub Discussions.
- Como es un repositorio de código correspondiente al libro impreso, actualmente no se pueden aceptar contribuciones que amplíen el contenido del main chapter code.
- Es una restricción para evitar diferencias entre el libro físico y el código.
- Si el libro o el código resultan útiles para una investigación, se recomienda citarlos.
- Se proporcionan una cita en estilo Chicago y una entrada BibTeX.
1 comentarios
Opiniones en Hacker News
Hasta ahora, la guía de fine-tuning parece ser el mejor recurso.
https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
Los LLM son un tema importante, pero hay muchos videos y artículos que lo tratan por encima. Creo que programar un LLM desde cero aclara muchos conceptos.
Como objetivo secundario, también se busca ayudar a quienes lo necesiten a crear su propio LLM. En el libro se programa todo el pipeline, incluyendo preentrenamiento y fine-tuning, pero como considero que preentrenar un LLM no es realista desde el punto de vista financiero, también se mostrará cómo cargar pesos preentrenados.
Se implementa todo desde cero usando un LLM similar a GPT-2, y se permite cargar pesos desde un modelo de 124M que corre en una notebook hasta un modelo de 1558M que corre en una GPU pequeña. En la práctica, se usarían frameworks como HF transformers o axolotl, pero espero que este enfoque de implementación directa haga que el proceso se vea menos como una caja negra.
import torch, entonces no parece una implementación completamente desde cero :-)Nadie que trabaje en este campo calcula a mano las derivadas de estos modelos. Pensar desde la perspectiva de la programación diferenciable es un supuesto básico y, en este caso, se puede considerar suficientemente “desde cero”.
Cada vez que veo comentarios así, sospecho que no se entiende bien qué pasa internamente ni cómo funciona el machine learning moderno.
[1] https://karpathy.ai/zero-to-hero.html
Es mucho más accesible para desarrolladores en general y no asume una base matemática. Es un buen punto de partida, y después otros materiales similares empiezan a entenderse mejor.
Crear material educativo requiere una cantidad absurda de trabajo, y aunque este libro tenga mucho éxito, si rasbt calcula sus ingresos por hora invertida, el resultado no tendrá sentido como tarifa horaria.
Hay mucha gente que entiende este tema, pero ¿qué hizo con ese conocimiento? Se lo guardó, se fue a OpenAI y mantuvo ese conocimiento privado para ganar mucho más dinero.
Si queremos vivir en un mundo donde este conocimiento sea abierto, creo que al menos deberíamos abstenernos de quejarnos públicamente por un libro que cuesta lo mismo que una buena cena.
El objetivo es hacer que algo aprenda a aterrizar, como un módulo lunar. Algo simple: empezar a 100 pies de altura, aplicar empuje en una dirección y seguir intentando hasta que haga cráteres más pequeños.
Luego quisiera ampliarlo agregando variables como movimiento horizontal, incorporando propulsores horizontales, y más adelante quitarlos para permitir que el módulo pueda rotar.
No tengo ni idea de por dónde empezar, pero este libro parece tratar de machine learning “convencional”, así que me pregunto si ayudaría.
La biblioteca gymnasium[1] de Python tiene un entorno de módulo lunar, así que puede servirte como referencia. Fue el entorno en el que más me enfoqué cuando estaba aprendiendo, y lo resolví de varias maneras.
También puedes ver mi notebook2, que usé hace poco al implementar Soft Actor Critic en PyTorch. No es un material ideal para enseñar, pero quizá puedas sacar algo de ahí.
[0]: https://www.manning.com/books/grokking-deep-reinforcement-le...
[1]: https://gymnasium.farama.org/environments/box2d/
Incluso algo como AlphaGo, al final, puede verse más bien como un trabajo que usa redes neuronales profundas como entrada para técnicas clásicas de aprendizaje por refuerzo
Reinforcement Learning: An Introduction, de Sutton y Barto, es ampliamente considerado el libro introductorio definitivo sobre este tema
Hay otros libros generales de aprendizaje automático/deep learning que incluyen capítulos introductorios bastante extensos sobre aprendizaje por refuerzo (https://github.com/rasbt/machine-learning-book/tree/main/ch1...). Aun así, en este caso, como dijeron otras personas, encaja mejor un libro dedicado de aprendizaje por refuerzo
https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
[0] https://www.youtube.com/watch?v=kCc8FmEb1nY
En lugar de implementar un LLM a nivel de caracteres, implementa un LLM real a nivel de palabras, muestra cómo cargar pesos preentrenados después del preentrenamiento y hace fine-tuning de instrucciones de ese LLM
También programa el proceso de alineación del LLM ajustado con instrucciones y muestra fine-tuning para una tarea de clasificación. Hay muchas figuras a lo largo del libro; solo el capítulo 3 tiene 26 figuras :)
El video también parece excelente. Como dura 2 horas, parece un buen material complementario de introducción sólida. Leer el libro probablemente tomaría unas 10 veces más tiempo
Yo también lo vi varias veces para entender bien la mayor parte
Por supuesto, también hay que conocer muy bien PyTorch, y también multiplicación de matrices, backpropagation, etc. Además, habla muy rápido
Por ejemplo, sé que attention se usa en diversos modelos, y que Transformer también se usa fuera de los modelos de lenguaje
Me pregunto si con este libro se puede entender attention y Transformer lo suficientemente bien como para usarlos también fuera de los modelos de lenguaje
La diferencia es que, en los LLM, el texto se convierte en tokens, y esos tokens se transforman en embeddings vectoriales que entran al LLM. En Vision Transformer, en lugar de ver la imagen como tokens, se usan parches de la imagen como tokens, y se convierten en embeddings vectoriales
Ya sea texto o visión, es el mismo mecanismo de attention, y en ambos casos recibe embeddings vectoriales como entrada
(*El capítulo 3 ya lo envié la semana pasada y pronto estará disponible en MEAP. Mientras tanto, el código se puede ver aquí junto con las notas: https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01...)