8 puntos por GN⁺ 2024-01-28 | 1 comentarios | Compartir por WhatsApp
  • 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

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

 
GN⁺ 2024-01-28
Opiniones en Hacker News
  • Estoy escribiendo una guía como material adicional, pero todavía está en proceso de completarse en varias etapas.
    Hasta ahora, la guía de fine-tuning parece ser el mejor recurso.
    https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
  • Se ve realmente genial. Me pregunto si el objetivo principal es aumentar la comprensión y desmitificarlo, o hacer que la gente cree sus propios modelos pequeños adaptados a sus necesidades.
    • La motivación principal es más bien educativa: ayudar a que la gente entienda cómo funcionan los LLM construyéndolos por su cuenta.
      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.
  • Escribir un libro técnico en público debe generar una ansiedad difícil de imaginar; mis aplausos para el autor.
    • Hasta cierto punto sí, pero al mismo tiempo también motiva bastante :)
    • Incluso podría ser menos riesgoso. Puedes obtener los beneficios de escribir un libro sin llegar a terminarlo realmente. Idealmente, quizá ni siquiera haga falta escribir mucho más que el capítulo 1.
  • Si el primer ejemplo de código es import torch, entonces no parece una implementación completamente desde cero :-)
    • Es cierto, pero de lo contrario habría quedado demasiado extenso y difícil de leer. Aun así, en el libro se muestra cómo implementar LayerNorm, Softmax, capas Linear, GeLU, etc., sin usar las versiones ya empaquetadas de torch.
    • Gracias a la diferenciación automática podemos construir modelos complejos como los Transformers. Además de los enormes datos y los recursos de cómputo masivos, puede considerarse una de las razones clave que hicieron posible la revolución actual de la IA.
      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.
    • Creo que implementar autograd tiene poca relación con aprender cómo funciona un Transformer y queda fuera del alcance. Ni me imagino escribir a mano los gradientes de un Transformer.
  • Fui directo a GitHub pensando que sería material gratuito. Respeto el trabajo del autor, pero me pregunto qué recursos gratuitos recomendarían dentro del enfoque de implementar desde cero.
    • Neural Networks: Zero to Hero de Andrej Karpathy[1]
      [1] https://karpathy.ai/zero-to-hero.html
    • Hay un motor de inferencia de GPT-2 hecho en NumPy en https://jaykmody.com/blog/gpt-from-scratch/, y luego para agregar una implementación de KV cache se puede ver https://www.dipkumar.dev/becoming-the-unbeatable/posts/gpt-k...
    • Recomendaría https://course.fast.ai/
      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.
    • Sinceramente me cuesta entender por qué alguien que trabaja en IA siente que $50 es demasiado para obtener una comprensión más profunda del tema.
      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.
    • Agregué notas explicativas a los notebooks de Jupyter, así que espero que el repositorio por sí solo pueda leerse de forma independiente.
  • Me pregunto si con el contenido de este libro se puede aprender aprendizaje por refuerzo.
    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.
    • Me gustó "Grokking Deep Reinforcement Learning"[0]. No incluye contenido sobre Transformers.
      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/
  • El aprendizaje por refuerzo es un campo de investigación completamente separado de los LLM. Aunque suele aparecer como parte del aprendizaje automático, y el clásico Machine Learning de Tom Mitchell tiene una excelente sección sobre Q-learning, tiene poca relación con el trabajo moderno de aprendizaje automático
    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
  • En ese caso recomendaría un libro dedicado de aprendizaje por refuerzo. La parte de aprendizaje por refuerzo en los LLM es muy específica de los LLM, y el conocimiento de contexto solo cubrirá las partes estrictamente relacionadas
    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
  • Podrías probar Spinning Up de OpenAI: https://spinningup.openai.com/en/latest/
  • La práctica de Q-learning de este curso cubre exactamente eso
    https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
  • Me da curiosidad cómo se compara con el video de Karpathy[0]. Estoy intentando iniciarme en los LLM y estoy averiguando cuál es el mejor material para obtener ese nivel de comprensión
    [0] https://www.youtube.com/watch?v=kCc8FmEb1nY
    • No vi el video completo, pero por lo que revisé por encima, el libro tiene algunas diferencias
      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
    • Es difícil de entender si no conoces ya la mayor parte del contenido
      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
  • No me interesan los modelos de lenguaje en sí, pero hay técnicas usadas en los modelos de lenguaje que me gustaría usar en otros lugares
    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
    • El mecanismo de attention que se implementa en este libro está especializado para LLM en cuanto a que la entrada es texto, pero fundamentalmente es el mismo mecanismo de attention que se usa en Vision Transformer
      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...)
  • La arquitectura del modelo en sí no es tan complicada, especialmente si se usa torch. Todo el proceso también es bastante lineal, así que parece un proyecto viable que vale la pena intentar