Sobre o projeto

## Treinar LLM do Zero Este repositório fornece um método direto e de ponta a ponta para treinar seu próprio modelo de linguagem de grande escala (LLM), desde o download de dados brutos até a geração de texto. Foi criado por Fareed Khan e é baseado na arquitetura Transformer do artigo "Attention is All You Need". O projeto é projetado para ser acessível a estudantes, desenvolvedores e pesquisadores, com cada algoritmo implementado do zero em PyTorch puro (sem usar bibliotecas como `trl`, `peft` ou `transformers`). ### Pipeline Principal O repositório guia você por uma jornada completa de treinamento de LLM: ``` texto bruto -> tokens -> um Transformer -> perda de próximo token -> um modelo base modelo base -> SFT -> Modelo de Recompensa -> {PPO, DPO} -> GRPO -> avaliação e chat ``` ### Principais Recursos - **Implementação do Zero**: Todos os modelos e algoritmos são escritos à mão em PyTorch, proporcionando uma compreensão profunda dos mecanismos subjacentes. - **Guia Passo a Passo**: O README e o código são estruturados para seguir um caminho lógico, com explicações claras e blocos de código. - **Múltiplas Etapas de Treinamento**: Cobre pré-treinamento, ajuste fino supervisionado (SFT), treinamento de modelo de recompensa e métodos avançados de aprendizado por reforço como DPO, PPO e GRPO. - **Prático e Flexível**: Inclui recursos opcionais de economia de memória (AMP, checkpointing de gradiente, acumulação de gradiente) para treinar modelos maiores em hardware limitado. - **Ferramentas Abrangentes**: Inclui scripts para preparação de dados, treinamento, avaliação e um painel de controle Streamlit para monitoramento. ### Estrutura do Código O repositório é organizado em módulos claros: - `src/models/`: Contém o modelo Transformer construído a partir de componentes pequenos e reutilizáveis (MLP, atenção, blocos). - `src/post_training/`: Implementa SFT, modelos de recompensa, PPO, DPO, GRPO, avaliação e inferência. - `scripts/`: Contém todos os scripts executáveis para cada etapa do pipeline. - `config/` e `configs/`: Arquivos de configuração (Python e JSON) para hiperparâmetros do modelo e configurações de treinamento. - `data_loader/`: Iteradores de lote para diferentes tipos de dados. - `ui/`: Um painel de controle Streamlit para interagir e monitorar o modelo. - `docs/`: Um site de documentação com teoria e diagramas. ### Começando 1. **Clone e Instale**: Clone o repositório e instale-o em modo editável usando `pip install -e .`. Extras opcionais estão disponíveis para recursos específicos (treinamento, UI, docs). 2. **Prepare os Dados**: Use os scripts fornecidos para tokenizar conjuntos de dados como The Pile (para pré-treinamento), Alpaca, Dolly e GSM8K (para ajuste de instruções) e Anthropic HH-RLHF (para aprendizado de preferências). 3. **Construa e Treine o Modelo**: Comece com um pequeno modelo de 13M de parâmetros usando `scripts/train_transformer.py` ou use o mais avançado `scripts/pretrain_base.py` para modelos maiores com recursos como treinamento distribuído e acumulação de gradiente. 4. **Pós-Treine e Use o Modelo**: Ajuste o modelo base com SFT, treine um modelo de recompensa e aplique técnicas de RLHF como DPO ou PPO para alinhar o modelo com preferências humanas. Finalmente, use os scripts de avaliação e chat para avaliar e interagir com seu modelo. ### Exemplo de Saída Aqui está um exemplo de texto gerado por um modelo treinado de 13M de parâmetros: ``` Em ***1978, o parque foi devolvido à placa de fábrica que o público compartilha com a parte inferior da cerca eletrônica que segue das cidades da Estação. O Canal das nações ocidentais antigas foi confinado ao ponto da cidade. As vilas foram diretamente ligadas a cidades na China que se revoltam contra o orçamento dos EUA e em Odambinais é incerto e a fortuna estabelecida em áreas rurais. ``` ### Documentação O repositório inclui um site de documentação com teoria mais detalhada, diagramas e explicações, disponível no link fornecido no README.