rasbt/LLMs-from-scratch é um repositório com código para desenvolver, pré-treinar e fazer fine-tuning de um LLM semelhante ao GPT, e é o repositório oficial de código do livro da Manning Build a Large Language Model (From Scratch)
- A forma de aprendizado é estruturada como o processo de criar do zero um modelo pequeno, mas funcional, com foco educacional, seguindo um fluxo semelhante à abordagem usada para construir os grandes modelos de base por trás do ChatGPT
- O conteúdo oferece código e notebooks por capítulo, cobrindo processamento de dados de texto, mecanismos de attention, implementação de GPT, pré-treinamento com dados sem rótulo, fine-tuning para classificação de texto e fine-tuning para seguir instruções
- O código dos capítulos principais foi projetado para rodar em um notebook comum em tempo razoável, usa GPU automaticamente quando disponível e é implementado em PyTorch sem bibliotecas externas de LLM
- Os apêndices e materiais extras expandem o conteúdo com LoRA, KV Cache, MoE, implementações da família Llama/Qwen/Gemma, avaliação, DPO e exemplos de UI, ampliando o aprendizado de LLM com foco prático
Objetivo do repositório e relação com o livro
- rasbt/LLMs-from-scratch é um repositório de código para implementar do zero um LLM semelhante ao GPT
- Ele é fornecido como o repositório oficial de código do livro da Manning Build a Large Language Model (From Scratch)
- O livro foi estruturado para entender passo a passo, por meio de código, como os LLMs funcionam internamente
- As explicações incluem texto, diagramas e exemplos
- Você desenvolve e treina diretamente um modelo pequeno, mas funcional, com foco educacional
- O repositório também inclui código para carregar pesos de modelos pré-treinados maiores e fazer fine-tuning
- Informações do livro:
Instalação e uso do código
- O repositório pode ser obtido via download em ZIP ou com
git clone
git clone --depth 1 https://github.com/rasbt/LLMs-from-scratch.git
- Se você recebeu o pacote de código pelo site da Manning, a orientação é verificar as atualizações mais recentes no repositório oficial no GitHub
- A instalação do Python e dos pacotes, além da configuração do ambiente de código, é tratada em setup/README.md
- A documentação de solução de problemas é fornecida em Troubleshooting Guide
Fluxo de aprendizado por capítulo
- O livro e o repositório dividem a implementação de LLM em um currículo por etapas
- Estrutura dos principais capítulos:
- Ch 1: Entendendo LLMs, sem código
- Ch 2: Trabalhando com dados de texto
- Ch 3: Implementação de mecanismos de attention
- Ch 4: Implementando um modelo GPT do zero
- Ch 5: Pré-treinamento com dados sem rótulo
- Ch 6: Fine-tuning para classificação de texto
- Ch 7: Fine-tuning para seguir instruções
- Os apêndices incluem introdução ao PyTorch, referências, respostas dos exercícios, melhorias no loop de treino e fine-tuning com eficiência de parâmetros baseado em LoRA
Conhecimentos prévios e ambiente de execução
- O conhecimento prévio mais importante é o básico de programação em Python
- Ter experiência com redes neurais de deep learning pode tornar alguns conceitos mais familiares
- O código é implementado do zero em PyTorch, sem bibliotecas externas de LLM
- Não é obrigatório ter domínio de PyTorch
- Conhecimentos básicos de PyTorch ajudam
- O Appendix A oferece uma breve introdução ao PyTorch
- O código dos capítulos principais foi projetado para rodar em um notebook comum em tempo razoável
- Não é necessário hardware especial, e uma GPU será usada automaticamente se estiver disponível
Curso em vídeo e livro complementar
- A Manning oferece um curso em vídeo complementar de 17 horas e 15 minutos que acompanha a estrutura do livro
- Ele reflete a organização de capítulos e seções do livro
- Pode ser usado como alternativa independente ou como material complementar para acompanhar a programação
- Também é apresentado o livro complementar Build A Reasoning Model (From Scratch)
- É um livro independente, mas pode ser visto como continuação de Build A Large Language Model (From Scratch)
- Implementa abordagens para melhorar a capacidade de raciocínio a partir de um modelo pré-treinado
- Abordagens incluídas: inference-time scaling, aprendizado por reforço, distillation
- Repositório relacionado: rasbt/reasoning-from-scratch
Exercícios e materiais extras
- Cada capítulo inclui vários exercícios
- As respostas são resumidas no Appendix C, e os notebooks de código correspondentes ficam na pasta de cada capítulo
- No site da Manning, é possível baixar gratuitamente o PDF de 170 páginas Test Yourself On Build a Large Language Model (From Scratch)
- Ele inclui cerca de 30 quizzes por capítulo, com respostas
-
Principais tópicos extras
- Setup:
- Dicas de configuração do Python
- Instalação de pacotes e bibliotecas
- Configuração de ambiente com Docker
- Ch 2:
- Implementação do tokenizador BPE do zero
- Comparação entre várias implementações de BPE
- Diferença entre embedding layer e linear layer
- Intuição sobre dataloader com números simples
- Ch 3:
- Comparação de implementações eficientes de multi-head attention
- Entendendo buffers no PyTorch
- Ch 4:
- Análise 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
- Ch 5:
- Formas alternativas de carregar pesos
- Pré-treinamento com o dataset Project Gutenberg
- Melhorias no loop de treino
- Otimização de hiperparâmetros
- UI para interagir com LLM pré-treinado
- Conversão de GPT para Llama
- Carregamento de pesos de modelo com eficiência de memória
- Extensão do tokenizador BPE do Tiktoken
- Dicas de performance em PyTorch para treinamento rápido de LLM
- Implementações de Llama 3.2, Qwen3, Gemma 3, Olmo 3, Tiny Aya, Qwen3.5 e Gemma 4
- Ch 6:
- Experimentos adicionais de fine-tuning em outras camadas e modelos maiores
- Fine-tuning para classificação no dataset de 50k reviews de filmes do IMDb
- UI de classificador de spam baseado em GPT
- Ch 7:
- Utilitários de dataset para detecção de duplicatas próximas e geração de itens em voz passiva
- Avaliação de respostas a instruções com OpenAI API e Ollama
- Geração e melhoria de datasets para fine-tuning de instruções
- Geração de preference dataset com Llama 3.1 70B e Ollama
- Implementação de alinhamento de LLM com DPO
- UI de modelo GPT ajustado para seguir instruções
Contribuições e citação
- Feedback e perguntas são recebidos no Manning Forum ou no GitHub Discussions
- Como este é o repositório de código correspondente ao livro impresso, no momento não são aceitas contribuições que expandam o conteúdo do código principal dos capítulos
- Essa restrição existe para evitar diferenças entre o livro físico e o código
- Se o livro ou o código forem úteis para pesquisa, a citação é recomendada
- São fornecidos uma citação no estilo Chicago e uma entrada BibTeX
1 comentários
Opiniões no Hacker News
Até agora, o guia de fine-tuning parece ser o melhor material.
https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
LLMs são um tema importante, mas há muitos vídeos e textos que passam por cima do assunto. Acredito que programar um LLM desde a base esclarece muitos conceitos.
Como objetivo secundário, também há a intenção de ajudar quem precisa a criar seu próprio LLM. No livro, codificamos o pipeline completo, incluindo pré-treinamento e fine-tuning, mas como não considero financeiramente realista fazer o pré-treinamento de um LLM, também pretendo mostrar como carregar pesos pré-treinados.
Usaremos um LLM parecido com o GPT-2 para implementar tudo do zero, permitindo carregar pesos desde um modelo de 124M que roda em um notebook até um modelo de 1558M que roda em uma GPU pequena. Na prática, as pessoas usariam frameworks como HF transformers ou axolotl, mas espero que essa abordagem de implementação direta faça o processo parecer menos uma caixa-preta.
import torch, então não parece ser uma implementação totalmente do zero :-)Ninguém que trabalha nessa área calcula à mão as derivadas desses modelos. Pensar em termos de programação diferenciável é um pressuposto básico e, neste caso, isso pode ser considerado suficientemente “do zero”.
Sempre que vejo comentários assim, fico com a suspeita de que a pessoa não entende muito bem o que acontece por dentro ou como o machine learning moderno funciona.
[1] https://karpathy.ai/zero-to-hero.html
É muito mais acessível para desenvolvedores em geral e não pressupõe formação em matemática. É um bom ponto de partida, e depois disso outros materiais semelhantes começam a fazer mais sentido.
Produzir material educacional dá uma quantidade absurda de trabalho e, por mais bem-sucedido que este livro seja, se rasbt calcular a renda por hora investida, ela provavelmente não fará sentido.
Muita gente entende esse assunto, mas o que fez com esse conhecimento? Guardou para si, foi para a OpenAI e manteve o conhecimento fechado, ganhando muito mais dinheiro.
Se queremos viver em um mundo onde esse conhecimento seja aberto, acho correto ao menos evitar reclamar publicamente de um livro que custa o preço de um bom jantar.
O objetivo é fazer algo aprender a pousar, como um módulo lunar. Algo simples: começar a 100 pés de altura, aplicar empuxo em uma direção e continuar tentando até fazer crateras menores.
Depois eu gostaria de expandir adicionando variáveis como deslocamento horizontal, incluindo propulsores horizontais e, mais adiante, removendo esses propulsores horizontais e permitindo que o módulo de pouso gire.
Não faço a menor ideia de por onde começar, e como este livro parece ser sobre machine learning “convencional”, fico curioso se ele ajudaria.
A biblioteca gymnasium[1] de Python tem um ambiente de módulo lunar, então vale conferir. Foi o ambiente em que mais me concentrei enquanto aprendia, e eu o resolvi de algumas maneiras.
Você também pode ver meu notebook2 que usei há algum tempo para implementar Soft Actor Critic em PyTorch. Não é um material muito bom para ensinar, mas talvez dê para tirar algo dele.
[0]: https://www.manning.com/books/grokking-deep-reinforcement-le...
[1]: https://gymnasium.farama.org/environments/box2d/
Mesmo algo como AlphaGo pode ser visto, no fim das contas, mais como um trabalho que usa redes neurais profundas como entrada para técnicas clássicas de aprendizado por reforço
Reinforcement Learning: An Introduction, de Sutton e Barto, é amplamente considerado o livro introdutório definitivo sobre o tema
Há capítulos introdutórios bem longos sobre aprendizado por reforço em outros livros gerais de machine learning/deep learning (https://github.com/rasbt/machine-learning-book/tree/main/ch1...). Ainda assim, nesse caso, como outras pessoas disseram, um livro dedicado a aprendizado por reforço faz mais sentido
https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
[0] https://www.youtube.com/watch?v=kCc8FmEb1nY
Em vez de um LLM em nível de caracteres, ele implementa um LLM em nível de palavras real, mostra como carregar pesos de pré-treinamento depois do pré-treinamento e faz instruction fine-tuning desse LLM
Também codifica o processo de alinhamento do LLM após o instruction fine-tuning e mostra fine-tuning para tarefas de classificação. O livro inteiro tem muitas figuras; só o capítulo 3 tem 26 :)
O vídeo também parece excelente. Como tem 2 horas, deve ser um bom material complementar para uma introdução sólida. Ler o livro provavelmente levaria umas 10 vezes mais tempo
Eu também assisti várias vezes para entender bem a maior parte
Naturalmente, é preciso conhecer muito bem PyTorch, além de multiplicação de matrizes, backpropagation etc. Ele também fala muito rápido
Por exemplo, sei que atenção é usada em vários modelos e que Transformers também são usados fora de modelos de linguagem
Fico curioso se, lendo este livro, dá para entender atenção e Transformers bem o suficiente para usá-los também fora de modelos de linguagem
A diferença é que, em LLMs, o texto é transformado em tokens, e esses tokens são convertidos em embeddings vetoriais que entram no LLM. Em Vision Transformers, em vez de tratar a imagem como tokens, usam-se patches da imagem como tokens, que então são convertidos em embeddings vetoriais
Seja para texto ou visão, é o mesmo mecanismo de atenção, e em ambos os casos ele recebe embeddings vetoriais como entrada
(*Já enviei o capítulo 3 na semana passada e ele deve entrar em breve no MEAP. Enquanto isso, o código pode ser visto aqui junto com as notas: https://github.com/rasbt/LLMs-from-scratch/blob/main/ch03/01...)