Clone do ChatGPT por US$ 100 - Implementação full-stack de LLM em um único arquivo

MITPythonnanochatkarpathy 33.3k Last Updated: October 25, 2025

Detalhes do Projeto nanochat

Visão Geral do Projeto

nanochat é um projeto de implementação de um Modelo de Linguagem Grande (LLM) full-stack desenvolvido pelo renomado pesquisador de IA Andrej Karpathy. Sua filosofia central é demonstrar como construir um chatbot semelhante ao ChatGPT do zero, utilizando o mínimo de código e o menor custo possível.

Slogan do Projeto: "O melhor ChatGPT que $100 podem comprar."

Características Principais

1. Filosofia de Design Minimalista

  • Base de código única, clara, minimizada e modificável
  • Design de baixa dependência
  • Aproximadamente 8.300 linhas de código, 44 arquivos
  • Total de aproximadamente 83.497 tokens (cerca de 334KB)

2. Fluxo Completo de Ponta a Ponta

nanochat abrange todas as etapas da construção de um LLM:

  • Tokenization (Tokenização)
  • Pretraining (Pré-treinamento)
  • Finetuning (Ajuste Fino)
  • Evaluation (Avaliação)
  • Inference (Inferência)
  • Web Serving (Serviço Web)

3. Treinamento de Baixo Custo

  • Versão Básica (nível $100): Concluída em cerca de 4 horas em um nó 8×H100
  • Versão Intermediária (nível $300): Cerca de 12 horas, desempenho ligeiramente superior ao GPT-2
  • Versão Avançada (nível $1000): Cerca de 41,6 horas

4. Orientação Educacional

  • Projetado como o projeto final do curso LLM101n da Eureka Labs
  • Código altamente legível, facilitando o aprendizado e a compreensão
  • Adequado para desenvolvedores que desejam entender profundamente o processo completo de treinamento de LLMs

Início Rápido

Executando o Script de Treinamento Rápido

Em um nó de GPU 8×H100, execute:

bash speedrun.sh

Ou execute em uma sessão screen (recomendado):

screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh

Após cerca de 4 horas, você terá um modelo LLM utilizável.

Iniciando a Interface Web

Após o treinamento, ative o ambiente virtual e inicie o serviço:

source .venv/bin/activate
python -m scripts.chat_web

Em seguida, acesse o URL exibido (por exemplo, http://209.20.xxx.xxx:8000/) para conversar com seu próprio LLM, como faria com o ChatGPT.

Exemplo de Resultados de Treinamento

Após o treinamento, um arquivo report.md será gerado, contendo as métricas de avaliação do modelo:

Métrica        | BASE   | MID    | SFT    | RL
---------------|--------|--------|--------|-------
CORE           | 0.2219 | -      | -      | -
ARC-Challenge  | -      | 0.2875 | 0.2807 | -
ARC-Easy       | -      | 0.3561 | 0.3876 | -
GSM8K          | -      | 0.0250 | 0.0455 | 0.0758
HumanEval      | -      | 0.0671 | 0.0854 | -
MMLU           | -      | 0.3111 | 0.3151 | -
ChatCORE       | -      | 0.0730 | 0.0884 | -

Tempo total de execução: 3h51m

Nota: O desempenho do modelo treinado com $100 é limitado (cerca de 4e19 FLOPs), equivalente a uma capacidade de linguagem de "nível de jardim de infância", mas suficiente para demonstrar o processo completo de treinamento.

Expandindo para Modelos Maiores

Para treinar modelos maiores (como o modelo d26 de nível GPT-2), basta fazer pequenas modificações em speedrun.sh:

# 1. Baixe mais fragmentos de dados
python -m nanochat.dataset -n 450 &

# 2. Aumente a profundidade do modelo, diminua o tamanho do lote para se adequar à memória
torchrun --standalone --nproc_per_node=8 -m scripts.base_train -- --depth=26 --device_batch_size=16

# 3. Mantenha a mesma configuração durante o treinamento intermediário
torchrun --standalone --nproc_per_node=8 -m scripts.mid_train -- --device_batch_size=16

Requisitos do Ambiente de Execução

Configuração Recomendada

  • Nó de GPU 8×H100 80GB (cerca de $24/hora)
  • Provedor sugerido: Lambda GPU Cloud

Compatibilidade

  • GPU 8×A100: Pode ser executado, mas mais lentamente
  • GPU Única: Pode ser executado, mas o tempo de treinamento é 8 vezes maior
  • GPU com pouca VRAM (<80GB): É necessário ajustar o parâmetro --device_batch_size (de 32 para 16, 8, 4, 2 ou 1)
  • Outras plataformas: Baseado em PyTorch, teoricamente suporta xpu, mps, etc., mas requer configuração adicional

Pilha Tecnológica

  • Framework de Deep Learning: PyTorch
  • Treinamento Distribuído: torchrun
  • Gerenciamento de Pacotes: uv
  • Conjuntos de Dados: HuggingFace Fineweb, Smoltalk
  • Tokenizador: Implementação personalizada em Rust (rustbpe)

Explorando o Código com Diálogo de IA

Devido à simplicidade da base de código (~330KB), é possível empacotar o projeto inteiro e fornecê-lo a um LLM para análise:

files-to-prompt . -e py -e md -e rs -e html -e toml -e sh --ignore "*target*" --cxml > packaged.txt

Ou use DeepWiki para explorar a base de código online diretamente.

Testes

O projeto inclui testes unitários, especialmente para o tokenizador:

python -m pytest tests/test_rustbpe.py -v -s

Posicionamento e Objetivos do Projeto

nanochat não é:

  • Um framework LLM completo
  • Uma fábrica de modelos altamente configurável
  • Uma solução de nível de produção

nanochat é:

  • Uma implementação de referência de natureza educacional
  • Uma base sólida, modificável e passível de fork
  • Voltado para pesquisa de modelos em miniatura com orçamento <$1000
  • Uma forma de reduzir a complexidade cognitiva do desenvolvimento de LLMs

Histórico e Agradecimentos do Projeto

  • Fontes de Inspiração:

    • nanoGPT - Projeto de pré-treinamento inicial de Karpathy
    • modded-nanoGPT - Uma variante gamificada do nanoGPT
  • Agradecimentos:

    • HuggingFace - Por fornecer os conjuntos de dados fineweb e smoltalk
    • Lambda - Por fornecer a capacidade de computação necessária para o desenvolvimento
    • Alec Radford - Consultor principal de LLM

Licença de Código Aberto

Licença MIT

Formato de Citação

@misc{nanochat,
  author = {Andrej Karpathy},
  title = {nanochat: The best ChatGPT that $100 can buy},
  year = {2025},
  publisher = {GitHub},
  url = {https://github.com/karpathy/nanochat}
}

Status do Projeto

O projeto ainda está em desenvolvimento ativo, com o objetivo de melhorar continuamente o estado da arte dos modelos em miniatura, permitindo que mais pessoas experimentem o processo completo de treinamento de LLMs a um custo acessível.


Endereço GitHub: https://github.com/karpathy/nanochat

Star History Chart