Salesforce se compromete a investir US$ 15 bilhões em cinco anos para ajudar São Francisco a se tornar um centro global de inovação em IA
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