8 pontos por GN⁺ 2024-01-28 | 1 comentários | Compartilhar no WhatsApp
  • 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

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

 
GN⁺ 2024-01-28
Opiniões no Hacker News
  • Estou escrevendo um guia como material complementar, mas ele ainda está sendo concluído em várias etapas.
    Até agora, o guia de fine-tuning parece ser o melhor material.
    https://ravinkumar.com/GenAiGuidebook/language_models/finetu...
  • Parece realmente incrível. Fico curioso se o objetivo principal é aumentar a compreensão e desfazer a aura de mistério, ou se é fazer com que as pessoas criem, elas mesmas, modelos pequenos adaptados às suas necessidades.
    • A principal motivação é mais educacional: ajudar as pessoas a entenderem como os LLMs funcionam construindo-os por conta própria.
      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.
  • Escrever um livro técnico publicamente deve ser algo inimaginavelmente angustiante; meus aplausos ao autor.
    • Até certo ponto, sim, mas ao mesmo tempo também é bem motivador :)
    • Talvez o risco seja até menor. Dá para obter os benefícios de escrever um livro sem necessariamente terminá-lo de fato. Idealmente, talvez nem fosse preciso escrever muito mais do que o capítulo 1.
  • Se o primeiro exemplo de código é import torch, então não parece ser uma implementação totalmente do zero :-)
    • É verdade, mas, de outro modo, teria ficado prolixo e difícil de ler. Ainda assim, o livro mostra como implementar LayerNorm, Softmax, camadas Linear, GeLU etc., sem usar as versões já empacotadas do torch.
    • Graças à diferenciação automática, conseguimos criar modelos complexos como Transformers. Além de enormes quantidades de dados e recursos computacionais massivos, isso pode ser visto como um dos principais motivos que tornaram possível a atual revolução da IA.
      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.
    • Para aprender como Transformers funcionam, acho que implementar autograd é pouco relevante e está fora do escopo. Nem consigo imaginar escrever à mão os gradientes de um Transformer.
  • Achei que seria material gratuito e fui direto para o GitHub. Respeito o trabalho do autor, mas fico curioso sobre quais materiais gratuitos no estilo implementação do zero vocês recomendariam.
    • Neural Networks: Zero to Hero, de Andrej Karpathy[1]
      [1] https://karpathy.ai/zero-to-hero.html
    • Para um motor de inferência do GPT-2 feito em NumPy, há https://jaykmody.com/blog/gpt-from-scratch/; depois, para adicionar a implementação de KV cache, veja https://www.dipkumar.dev/becoming-the-unbeatable/posts/gpt-k...
    • Eu recomendaria https://course.fast.ai/
      É 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.
    • Sinceramente, acho difícil entender por que alguém que trabalha com IA consideraria US$ 50 demais para obter uma compreensão mais profunda do assunto.
      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.
    • Acrescentei notas explicativas aos notebooks Jupyter, então espero que o repositório por si só também possa ser lido de forma independente.
  • Fico curioso se dá para aprender aprendizado por reforço com o conteúdo deste livro.
    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.
    • Gostei de "Grokking Deep Reinforcement Learning"[0]. Não há conteúdo sobre Transformers.
      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/
  • Aprendizado por reforço é uma área de pesquisa completamente separada de LLMs. Embora apareça com frequência como parte de machine learning, e o clássico Machine Learning, de Tom Mitchell, tenha uma excelente seção sobre Q-learning, ele tem pouca relação com o trabalho moderno de machine learning
    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
  • Nesse caso, eu recomendaria um livro dedicado a aprendizado por reforço. A parte de aprendizado por reforço em LLMs é muito específica de LLMs, e o conhecimento de base também vai cobrir apenas o que for estritamente relevante
    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
  • Vale a pena experimentar o Spinning Up da OpenAI: https://spinningup.openai.com/en/latest/
  • O laboratório de Q-learning deste curso cobre exatamente isso
    https://www.ida.liu.se/~TDDC17/info/labs/rl.en.shtml
  • Fico curioso para saber como ele se compara ao vídeo do Karpathy[0]. Estou tentando entrar em LLMs e procurando qual é o melhor material para obter esse nível de entendimento
    [0] https://www.youtube.com/watch?v=kCc8FmEb1nY
    • Não assisti ao vídeo até o fim, mas, pelo que dei uma olhada, o livro tem algumas diferenças
      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
    • É difícil de entender se você ainda não souber a maior parte do conteúdo
      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
  • Não tenho interesse em modelos de linguagem em si, mas há técnicas usadas em modelos de linguagem que eu gostaria de usar em outros lugares
    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
    • O mecanismo de atenção implementado neste livro é específico de LLMs no sentido de lidar com entrada de texto, mas, fundamentalmente, é o mesmo mecanismo de atenção usado em Vision Transformers
      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...)
  • A arquitetura do modelo em si não é tão complicada, especialmente usando torch. O processo inteiro também é bem direto, então parece um projeto viável que dá para encarar