1 pontos por GN⁺ 1 시간 전 | 1 comentários | Compartilhar no WhatsApp
  • Train Your Own LLM From Scratch é um workshop prático em que você escreve manualmente todas as partes do pipeline de treinamento de um GPT para entender o que cada componente faz e por que ele é necessário
  • O objetivo é gerar texto no estilo de Shakespeare com um modelo GPT treinado do zero em um notebook, e ele foi reduzido para cerca de 10M de parâmetros para caber em uma única sessão do workshop
  • Enquanto o nanoGPT busca reproduzir o GPT-2 de 124M de parâmetros, este projeto foi projetado para manter apenas o essencial e permitir treinamento em menos de 1 hora em um notebook
  • Os componentes implementados manualmente são o Tokenizer, a arquitetura de modelo baseada em Transformer, o loop de treinamento e a geração de texto; no fim, você completa diretamente model.py, train.py e generate.py
  • Como conhecimento prévio, basta estar confortável em ler código Python; não é necessário ter experiência em machine learning, e é preciso Python 3.12+
  • O ambiente de execução oferece suporte a notebooks ou desktops Mac, Linux e Windows, e o treinamento usa automaticamente MPS em GPUs Apple Silicon, CUDA em GPUs NVIDIA ou CPU
  • Para instalação local, recomenda-se o fluxo com uv executando uv sync; se você não tiver ambiente local, também é possível enviar os arquivos para o Google Colab e executar com !python train.py
  • O workshop cobre em sequência tokenizer em nível de caractere, embeddings, self-attention, LayerNorm, blocos MLP, função de perda, AdamW, gradient clipping, agendamento de taxa de aprendizado, além de amostragem com temperature e top-k
  • A arquitetura básica converte o texto de entrada em IDs de token em nível de caractere, passa por embeddings de token e de posição, atravessa vários blocos Transformer e então produz os logits para a probabilidade do próximo token
  • As configurações de modelo oferecidas são Tiny com cerca de 0.5M de parâmetros e aproximadamente 5 minutos em um M3 Pro, Small com cerca de 4M e cerca de 20 minutos, e Medium como padrão com cerca de 10M e aproximadamente 45 minutos de treinamento
  • Todas as configurações usam tokenização em nível de caractere com vocab_size=65 e block_size=256, ajustadas para datasets pequenos de cerca de 1MB, como Shakespeare
  • A tokenização BPE tem vocabulário grande, como os 50.257 tokens do GPT-2, então em datasets pequenos a maioria dos bigramas de tokens é rara demais para aprender padrões; o material também aborda a migração para BPE em datasets maiores
  • Como principais referências, são apresentados nanoGPT, build-nanogpt video lecture, Karpathy's microgpt, nanochat, Attention Is All You Need (2017), GPT-2 paper (2019) e TinyStories paper

1 comentários

 
GN⁺ 1 시간 전
Comentários do Hacker News
  • Se este material parece interessante, também recomendo fortemente a disciplina CS336 de Stanford. Ela cobre um currículo parecido com muito mais profundidade, e também apresenta intuições teóricas como leis de escala e perspectivas de sistemas como otimização de kernel e profiling
    Claro, você vai ter que fazer os exercícios: https://cs336.stanford.edu/

    • Não sei onde assistir às aulas. Não estou vendo nenhuma opção de aula
  • Fazendo um pouco de propaganda, existe uma série de notebooks Jupyter que explica desde o início como o machine learning funciona
    https://github.com/nickyreinert/DeepLearning-with-PyTorch-fr...
    E, claro, também aborda como construir um LLM do zero
    https://github.com/nickyreinert/basic-llm-with-pytorch/blob/...

  • Por coincidência, acabei de começar o repositório/livro/curso do Sebastian Raschka, Build a Large Language Model (From Scratch). Talvez seja um bom tipo de problema ter que escolher qual material de estudo usar
    [0] https://github.com/rasbt/LLMs-from-scratch
    [1] https://www.manning.com/books/build-a-large-language-model-f...
    [2] https://magazine.sebastianraschka.com/p/coding-llms-from-the...

    • Gostei muito desse livro. É ótimo para quem quer entender a estrutura interna real e ver exemplos práticos de todos os cálculos
  • Faço isso desde o dia em que nasci. O começo foi difícil, mas estou melhorando aos poucos

    • Na verdade, eu venho treinando principalmente modelos físicos, e o LLM é meio que um complemento em cima disso
  • Eu fiz algo parecido com ULMFiT quando o fast.ai ainda era relativamente novo. Acho que foi na época em que o BERT era o estado da arte mais recente, e a estrutura permitia treinar um modelo base e depois especializá-lo com uma head
    No modelo base, usei a Wikipedia inteira e acrescentei alguns GB de tweets coletados via firehose. Eu tinha acesso a um laboratório com 20 computadores para desenvolvimento de jogos, algo mais ou menos no nível de uma GTX 2080. Treinar uma passada na Wikipedia tokenizada levava cerca de meio dia, então eu rodava configurações diferentes em cada máquina para ajuste de hiperparâmetros e, no dia seguinte, usava o melhor resultado como ponto de partida. Sempre era divertido chegar de manhã no trabalho e conferir os resultados
    A engenharia foi horrível e totalmente improvisada, mas aprendi muito. O resultado foi mais ou menos, e fiz classificação de tweets, mas deu para ter noção de quanta potência de GPU e quantos desafios de engenharia seriam necessários para fazer isso a sério. Eu não tinha entendido completamente o potencial da geração, mas fiquei um bom tempo rindo dos tweets que criei por curiosidade

  • Isso parece quase uma transcrição em texto deste vídeo do Andrej Karpathy(https://youtu.be/kCc8FmEb1nY), ou estou vendo errado?

    • A página explica a relação com o nanoGPT
      Algo como: “o nanoGPT busca reproduzir o GPT-2 (124 milhões de parâmetros) e cobre muita coisa. Este projeto reduz isso ao essencial, com um modelo de cerca de 10 milhões de parâmetros que pode ser treinado em menos de 1 hora em um notebook…”
    • Sim, você está vendo errado
  • Para dar contexto, ele é um dos desenvolvedores do MLX e um pesquisador de machine learning competente

    • Queria saber a fonte disso. Não parece correto
  • Está escrito: “workshop prático em que você escreve cada peça do pipeline de treinamento de GPT com as próprias mãos para entender o que cada componente faz e por que ele é necessário”, mas vejo torch nas dependências, então parece que tensores e backpropagation não são implementados manualmente e são tratados como algo dado. Ainda assim, será que dá para chamar isso de “do zero”?
    Fiz algo parecido em Rust, também com ajuda de IA, mas me restringi a usar apenas a biblioteca padrão, sem dependências. Como resultado, tive que implementar muito mais coisas: design de tensores, conceito de kernel, um otimizador simples de descida de gradiente, um parser JSON feito à mão, abstrações de paralelismo de dados em CPU parecidas com rayon etc. Quando liguei tudo e funcionou, foi bem divertido. Era muito lento, mas funcionava

  • Não sei se usar PyTorch ainda pode ser considerado “do zero”. Não estou defendendo um extremo tipo evitar até a biblioteca padrão, mas no momento em que você traz uma biblioteca feita exatamente para esse propósito, já não parece mais “do zero” para mim

    • Faz sentido, mas para a maioria das pessoas de machine learning, PyTorch é de fato a biblioteca padrão
  • Talvez “Treinar um LM do zero” fosse mais correto. Não sei se haverá uma máquina capaz de criar algo grande o bastante para chamar de “Large”

    • Se você tiver um cartão de crédito com limite normal, pode alugar recursos suficientes em provedores de neocloud como HuggingFace ou Mistral Forge
      Não estou dizendo que vale a pena, mas não é preciso comprar GPUs para estudar treinamento
    • Dá para treinar um modelo de 1,6 bilhão de parâmetros do início ao fim até em uma única 3090. Isso é um modelo bem grande
    • Eu também tenho meio terabyte de RAM! É DDR4, mas ainda assim é RAM
      E ainda vem com 48 núcleos de processador! Não tem suporte a AVX512, mas dá para fazer contas
      Deve dar para treinar um LLM o suficiente. Ou pelo menos a minha família deve conseguir… talvez meu filho tenha que herdar o projeto e continuar
      Falando sério, acho que ou o ponto principal foi perdido, ou isso é implicância desnecessária, ou então está simplesmente errado. Isso é sobre aprender os conceitos, e o resto é em grande parte secundário
      E, pelo lado da implicância ou do erro, qual é exatamente a linha de base documentada para um “large” language model? O GPT-2 era chamado de modelo de linguagem “large” na época e ainda é hoje, com 1,5 bilhão de parâmetros. Hoje em dia dá para encontrar GPUs de consumidor capazes de treinar algo desse tamanho por algo em torno de 400 dólares