Sobre el proyecto

## Entrenar LLM Desde Cero Este repositorio proporciona un método directo y de extremo a extremo para entrenar tu propio modelo de lenguaje grande (LLM), desde la descarga de datos crudos hasta la generación de texto. Fue creado por Fareed Khan y se basa en la arquitectura Transformer del artículo "Attention is All You Need". El proyecto está diseñado para ser accesible a estudiantes, desarrolladores e investigadores, con cada algoritmo implementado desde cero en PyTorch puro (sin usar bibliotecas como `trl`, `peft` o `transformers`). ### Pipeline Principal El repositorio te guía a través de un viaje completo de entrenamiento de LLM: ``` texto crudo -> tokens -> un Transformer -> pérdida de siguiente token -> un modelo base modelo base -> SFT -> Modelo de Recompensa -> {PPO, DPO} -> GRPO -> evaluación y chat ``` ### Características Clave - **Implementación Desde Cero**: Todos los modelos y algoritmos están escritos a mano en PyTorch, proporcionando una comprensión profunda de los mecanismos subyacentes. - **Guía Paso a Paso**: El README y el código están estructurados para seguir una ruta lógica, con explicaciones claras y bloques de código. - **Múltiples Etapas de Entrenamiento**: Cubre preentrenamiento, ajuste fino supervisado (SFT), entrenamiento de modelos de recompensa y métodos avanzados de aprendizaje por refuerzo como DPO, PPO y GRPO. - **Práctico y Flexible**: Incluye características opcionales de ahorro de memoria (AMP, checkpointing de gradientes, acumulación de gradientes) para entrenar modelos más grandes en hardware limitado. - **Herramientas Integrales**: Incluye scripts para preparación de datos, entrenamiento, evaluación y un panel de control Streamlit para monitoreo. ### Estructura del Código El repositorio está organizado en módulos claros: - `src/models/`: Contiene el modelo Transformer construido a partir de componentes pequeños y reutilizables (MLP, atención, bloques). - `src/post_training/`: Implementa SFT, modelos de recompensa, PPO, DPO, GRPO, evaluación e inferencia. - `scripts/`: Contiene todos los scripts ejecutables para cada etapa del pipeline. - `config/` y `configs/`: Archivos de configuración (Python y JSON) para hiperparámetros del modelo y ajustes de entrenamiento. - `data_loader/`: Iteradores de lotes para diferentes tipos de datos. - `ui/`: Un panel de control Streamlit para interactuar y monitorear el modelo. - `docs/`: Un sitio de documentación con teoría y diagramas. ### Cómo Empezar 1. **Clonar e Instalar**: Clona el repositorio e instálalo en modo editable usando `pip install -e .`. Hay extras opcionales disponibles para características específicas (entrenamiento, UI, docs). 2. **Preparar Datos**: Usa los scripts proporcionados para tokenizar conjuntos de datos como The Pile (para preentrenamiento), Alpaca, Dolly y GSM8K (para ajuste de instrucciones), y Anthropic HH-RLHF (para aprendizaje de preferencias). 3. **Construir y Entrenar el Modelo**: Comienza con un modelo pequeño de 13M parámetros usando `scripts/train_transformer.py` o usa el más avanzado `scripts/pretrain_base.py` para modelos más grandes con características como entrenamiento distribuido y acumulación de gradientes. 4. **Post-Entrenar y Usar el Modelo**: Ajusta el modelo base con SFT, entrena un modelo de recompensa y aplica técnicas RLHF como DPO o PPO para alinear el modelo con preferencias humanas. Finalmente, usa los scripts de evaluación y chat para evaluar e interactuar con tu modelo. ### Ejemplo de Salida Aquí hay un ejemplo de texto generado por un modelo entrenado de 13M parámetros: ``` En ***1978, El parque fue devuelto a la placa de fábrica que el público comparte con la parte inferior de la valla electrónica que sigue desde las ciudades de la Estación. El Canal de las antiguas naciones occidentales se limitaba al lugar de la ciudad. Las aldeas estaban directamente vinculadas a ciudades en China que se rebelan contra el presupuesto de EE.UU. y en Odambinais es incierto y la fortuna establecida en áreas rurales. ``` ### Documentación El repositorio incluye un sitio de documentación con teoría más detallada, diagramas y explicaciones, disponible en el enlace proporcionado en el README.