Como Construir e Treinar Seu Próprio GPT em um Laptop Comum
A maioria dos tutoriais de redes neurais hoje se resumem a dois cenários. Ou você é solicitado a chamar a API da OpenAI com algumas linhas de Python, ou a baixar um modelo pronto do Hugging Face e chamar o método .generate(). Em ambos os casos, todos os detalhes internos ficam por trás das cortinas. Você obtém um resultado, mas mal entende como multiplicações de matrizes transformam texto bruto em frases significativas.
Recentemente encontrei o repositório llm-from-scratch do desenvolvedor angelos-p. É um workshop interativo onde você escreve cada componente de um modelo de linguagem do zero. Sem abstrações pesadas: apenas PyTorch puro, matemática clara e treinamento de um modelo de 10 milhões de parâmetros no seu laptop em menos de uma hora.
Входной текст
│
▼
┌─────────────────┐
│ Tokenizer │ "hello" → [20, 43, 50, 50, 53]
└────────┬────────┘
▼
┌─────────────────┐
│ Token Embed + │ Векторы токенов + позиция
│ Position Embed │ (размерность n_embd)
└────────┬────────┘
▼
┌─────────────────┐
│ Transformer │ × n_layer слоев
│ Block: │
│ ┌────────────┐ │
│ │ LayerNorm │ │
│ │ Self-Attn │ │ n_head параллельных голов внимания
│ │ + Residual │ │
│ ├────────────┤ │
│ │ LayerNorm │ │
│ │ MLP (FFN) │ │ расширение 4x, GELU, проекция назад
│ │ + Residual │ │
│ └────────────┘ │
└────────┬────────┘
▼
┌─────────────────┐
│ LayerNorm │
│ Linear → logits│ вероятности следующего символа
└─────────────────┘
Onde Tudo Começou
Muitos já ouviram falar do projeto nanoGPT de Andrej Karpathy. Karpathy mostrou que uma arquitetura GPT-2 completa com 124 milhões de parâmetros pode caber em apenas algumas centenas de linhas de código. No entanto, reproduzir o GPT-2 original ainda requer uma quantidade considerável de computação e tempo.
O autor do llm-from-scratch foi além. Ele removeu todas as otimizações desnecessárias de cluster e adaptou o código para que possa ser escrito à mão em uma única noite. O modelo final treina em Apple Silicon (MPS), GPUs Nvidia via CUDA, ou até mesmo em uma CPU comum. Se você não tem hardware local, tudo roda no Google Colab gratuito.
O Que o Workshop Contém
O material é dividido em módulos passo a passo na pasta docs/. Você cria sequencialmente três arquivos funcionais: model.py, train.py e generate.py.
1. Tokenização a Nível de Caractere
Ao trabalhar com grandes corpora de texto, a solução padrão é o algoritmo BPE (Byte Pair Encoding) com um vocabulário de 50.000 tokens. Mas se você está treinando uma rede pequena em um conjunto de dados de 1 megabyte, o BPE vai quebrar seu treinamento. A maioria dos pares de tokens aparecerá apenas algumas vezes em todo o texto, e os pesos simplesmente não vão convergir para eles.
É por isso que o autor usa um tokenizador a nível de caractere para treinar nas peças de Shakespeare. O alfabeto consiste em apenas 65 caracteres únicos. Esse vocabulário é compacto, codifica rapidamente e dá a um modelo pequeno a chance de capturar gramática e estrutura de diálogo.
2. Construindo o Transformer
Aqui você monta manualmente a arquitetura do decodificador GPT:
- Tabelas de embedding para caracteres e posições no texto.
- Bloco de Auto-Atenção Multi-Head, onde o vetor de cada caractere interage com o contexto através de queries, keys e values (Q, K, V).
- Mecanismo de máscara causal que impede o modelo de espiar tokens futuros durante a geração.
- Camadas totalmente conectadas (MLP) com ativação GELU e normalização LayerNorm.
A arquitetura é montada sem mágica de frameworks de terceiros. Você pode ver claramente para onde cada tensor flui e em que estágio as conexões residuais são adicionadas.
3. Ciclo de Treinamento
Na terceira etapa, você escreve o pipeline de treinamento. Ele inclui:
- Cálculo da perda de Entropia Cruzada entre os logits previstos e os próximos caracteres reais.
- Otimizador AdamW com ajuste de weight decay.
- Clipping de gradiente para evitar explosão de pesos durante o treinamento.
- Agendador de taxa de aprendizado com warmup e decaimento cossenoidal.
4. Geração de Texto e Amostragem
O modelo finalizado precisa ser feito para falar. Você implementa um loop autorregressivo: pega uma seed de texto, passa pelo transformer, extrai a distribuição de probabilidade para o próximo token e seleciona usando temperatura com busca gulosa ou amostragem top-k.
Configurações para Experimentos
O repositório oferece três perfis de modelo. Você pode escolher com base em quanto tempo livre tem.
| Perfil | Parâmetros | Camadas (n_layer) | Cabeças (n_head) | Dimensão (n_embd) | Tempo de Treinamento (M3 Pro) | |---|---|---|---|---|---| | Tiny | ~0,5M | 2 | 2 | 128 | ~5 minutos | | Small | ~4M | 4 | 4 | 256 | ~20 minutos | | Medium | ~10M | 6 | 6 | 384 | ~45 minutos |
Todos os perfis funcionam com um comprimento de contexto de 256 caracteres. O perfil Tiny é ótimo para debug rápido quando você precisa verificar se o código roda sem erros shape mismatch. O perfil Medium já produz prosa shakespeariana bastante legível com divisões de diálogo de personagens.
Como Executar o Projeto
Para gerenciamento de ambiente, o autor recomenda o gerenciador de pacotes rápido uv.
Instalando dependências e criando uma pasta de trabalho:
# Установка uv (если еще не установлен)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Клонируем репозиторий и синхронизируем окружение
git clone https://github.com/angelos-p/llm-from-scratch
cd llm-from-scratch
uv sync
mkdir scratchpad && cd scratchpad
Se preferir o Google Colab, instalar um conjunto mínimo de bibliotecas é suficiente:
!pip install torch numpy tqdm tiktoken
Então você pega o arquivo data/shakespeare.txt, abre o primeiro guia docs/01-tokenization.md e começa a escrever código passo a passo.
Para Quem Este Workshop É
O projeto vai agradar quem está cansado de artigos abstratos com gráficos de atenção e quer ver código real. Não é necessário conhecimento profundo de aprendizado de máquina para concluí-lo. É suficiente estar confortável lendo sintaxe Python e entendendo operações básicas com arrays.
Após completar todos os seis guias, você vai se livrar da sensação de mágica em torno dos LLMs. Você vai entender na prática por que modelos precisam de warmup de taxa de aprendizado, como a temperatura afeta a aleatoriedade das respostas e por que modelos pequenos são tão sensíveis ao tamanho do vocabulário. É uma ótima maneira de passar um fim de semana produtivamente para seu conhecimento de engenharia.
Projetos relacionados