29 pontos por GN⁺ 2025-10-14 | 1 comentários | Compartilhar no WhatsApp
  • O nanochat de Andrej karpathy é um projeto open source para construir você mesmo um LLM conversacional parecido com o ChatGPT com um orçamento de US$ 100
  • Todo o pipeline (tokenização, pré-treinamento, midtraining, fine-tuning, avaliação, inferência e serviço web) foi implementado de forma concisa e hackeável
  • Em um único nó com 8 GPUs H100, o treinamento termina em menos de 4 horas com um único script; o modelo d26, que mira desempenho em nível de GPT-2, leva cerca de 12 horas por aproximadamente US$ 300, e o tier de US$ 1.000 leva 41,6 horas
  • Com um codebase extremamente enxuto de 8.300 linhas e 44 arquivos, totalizando 330 KB, ele oferece uma baseline poderosa, fácil de ler e fácil de dar fork, sem objetos de configuração complexos nem model factories
  • Está sendo desenvolvido como projeto capstone do curso LLM101n da Eureka Labs, com o objetivo de melhorar o estado da arte de micromodelos acessíveis com orçamento abaixo de US$ 1.000

Visão geral do projeto nanochat

  • O nanochat é um projeto open source criado para desenvolvedores que querem implementar um LLM conversacional semelhante ao ChatGPT por US$ 100
  • Todo o codebase foi escrito de forma única, legível, com poucas dependências e concisa, facilitando modificações e experimentos
  • Oferece um ambiente para gerenciar de uma vez só todo o processo, de pretraining, finetuning, avaliação, inferência até a web UI
  • Com o script speedrun.sh, é possível executar automaticamente todo o pipeline, permitindo que até iniciantes comecem com facilidade
  • Foi projetado com dependências mínimas e uma estrutura hackeável, ideal para fins educacionais por ser fácil de entender e modificar
  • O projeto será usado como capstone do curso LLM101n em desenvolvimento na Eureka Labs

Início rápido (Quick Start)

  • Em um ambiente com GPU, especialmente um nó 8XH100, executar o speedrun.sh configura o processo de treinamento e inferência em cerca de 4 horas
    • Considerando US$ 24 por hora em um nó 8XH100, o tempo total é de 4 horas
  • Recomenda-se executar dentro de uma sessão screen para monitoramento estável mesmo durante treinamentos longos
    • Use o comando screen -L -Logfile speedrun.log -S speedrun bash speedrun.sh
    • Depois, desanexe com Ctrl-a d e acompanhe o progresso com tail speedrun.log
  • Quando o treinamento termina, é possível fazer perguntas livremente ao LLM em uma web UI simples e ver os resultados na janela de conversa
    • python -m scripts.chat_web
  • Um modelo no nível de 4e19 FLOPs oferece capacidade de conversa equivalente à de uma criança pequena
    • Pode receber pedidos para criar histórias ou poemas
    • É possível observar fenômenos de alucinação
    • Consegue responder perguntas básicas, como por que o céu é azul
  • Os resultados do treinamento e vários indicadores de desempenho são salvos em report.md

Relatório de resultados de treinamento

  • O arquivo report.md inclui o "boletim" da execução de treinamento
    • Fornece vários indicadores e métricas de avaliação
    • A tabela de resumo final mostra o desempenho por etapa: BASE, MID, SFT e RL
  • Estatísticas do codebase
    • Número de caracteres: 333.989
    • Número de linhas: 8.304
    • Número de arquivos: 44
    • Número de tokens (aprox.): 83.497
    • Dependências (linhas de uv.lock): 2.004
  • Exemplos de desempenho em benchmarks
    • CORE: 0.2219 (BASE)
    • ARC-Challenge: 0.2875 (MID), 0.2807 (SFT)
    • GSM8K: 0.0250 (MID), 0.0455 (SFT), 0.0758 (RL)
    • HumanEval: 0.0671 (MID), 0.0854 (SFT)
    • Tempo total gasto: 3 horas e 51 minutos
  • O desempenho do modelo é inferior ao do ChatGPT, mas a ênfase está na experiência de implementar um LLM com baixo orçamento

Modelos maiores (Bigger Models)

  • Não é possível treinar um clone de ChatGPT de alto desempenho por US$ 100, e LLMs reais são conhecidos por exigir gastos de capital na casa dos milhões de dólares
  • Existem duas escalas adicionais de interesse
    • Tier de cerca de US$ 300 para o modelo d26 (depth=26): cerca de 12 horas de treinamento, superando ligeiramente a pontuação CORE do GPT-2
    • Tier de US$ 1.000: cerca de 41,6 horas, um número redondo e limpo
  • Ajustes no speedrun.sh para treinar o modelo d26
    • É necessário baixar mais shards de dados
      • Calcular o número de tokens multiplicando o número de parâmetros por 20
      • Calcular o número de caracteres multiplicando por 4,8
      • Calcular o número de shards dividindo por 250 milhões (são necessários cerca de 450)
    • Usar a opção --depth=26 e reduzir o device_batch_size pela metade, de 32 para 16, para evitar OOM
    • Na etapa de midtraining, também é preciso usar o mesmo device_batch_size

Requisitos do ambiente de computação

  • Também pode rodar em um nó 8XA100 GPU, embora seja um pouco mais lento
  • Também pode rodar em uma única GPU
    • Ao omitir o torchrun, os resultados ficam praticamente iguais
    • Troca automaticamente para gradient accumulation
    • Leva 8 vezes mais tempo
  • Para GPUs com menos de 80 GB de VRAM, é preciso ajustar os hiperparâmetros
    • Reduzir --device_batch_size de 32 (padrão) para 16, 8, 4, 2 ou 1 para liberar memória
    • Para definir abaixo de 1, será preciso uma abordagem mais criativa
  • Por ser baseado em PyTorch puro, pode suportar vários ambientes, como xpu e mps
    • Isso não vem pronto por padrão, então são necessárias pequenas modificações

Utilidade e acessibilidade

  • A maior vantagem do nanochat é que é fácil empacotar todos os arquivos de uma vez e fazer perguntas sobre eles em outros LLMs, serviços de busca documental etc.
  • Exemplo de uso do utilitário files-to-prompt
    • Inclui arquivos py, md, rs, html, toml e sh
    • Exclui a pasta rustbpe/target
    • Seleciona o formato de saída cxml
    • Empacota cerca de 330 KB (aprox. menos de 100 mil tokens), 45 arquivos e 8 mil linhas de código
  • Recomenda-se usar o DeepWiki
    • Basta trocar github.com por deepwiki.com na URL do GitHub para fazer perguntas sobre o repositório
    • Fornecido pela Devin/Cognition

Contribuição e direção do projeto

  • O nanochat é um projeto ainda inacabado
  • O objetivo é melhorar o estado da arte de micromodelos que podem ser construídos de ponta a ponta com orçamento abaixo de US$ 1.000
  • A acessibilidade não envolve só custo, mas também complexidade cognitiva
    • Não há objetos gigantes de configuração, model factories nem código-monstro de if-then-else
    • Não é um "framework" de LLM totalmente configurável
  • Um codebase único, consistente, mínimo, legível, hackeável e o mais fácil possível de dar fork, servindo como uma baseline poderosa
    • Projetado para rodar do início ao fim e gerar um clone concreto de ChatGPT com seu respectivo boletim

1 comentários

 
GN⁺ 2025-10-14
Comentários do Hacker News
  • É um relato interessante de experiência usando ferramentas de IA para programação
    Em certo momento, alguém perguntou ao Karpathy quanto código ele realmente escreveu por conta própria
    Karpathy: obrigado pela pergunta; na prática, escrevi a maior parte do código à mão (usando autocompletar com tab)
    Testei agentes do claude/codex algumas vezes, mas não ajudaram muito porque a precisão deixava a desejar
    Talvez isso aconteça porque o repositório que criei está distante demais da distribuição dos dados
    Link para a conversa original

    • A frase “o repositório está muito distante da distribuição dos dados” explica por que usar modelos de IA quase nunca me ajudou
      Tudo o que faço é único demais e fica longe da distribuição

    • Fico feliz de ouvir isso de alguém confiável como o Karpathy
      Quem acha que a AGI está logo ali talvez devesse moderar um pouco as expectativas
      Eu também gosto do Claude Code
      De vez em quando preciso escrever código web, e nessa área a cobertura dos dados de treino é tão boa que o Claude é muito melhor desenvolvedor web do que eu
      Mas, quando vou mexer no núcleo algorítmico das minhas ferramentas de automação, o Claude tem muito menos com o que trabalhar e acaba cometendo mais erros
      Ainda assim, no geral o saldo é positivo, então pago com prazer para usar
      Mesmo que servisse só como assistente de desenvolvimento web, já seria uma grande ajuda

    • Acho que isso é, na verdade, algo natural
      Estamos falando de uma situação em que se escreve código novo e original
      Muita gente está criticando a resposta do Karpathy, mas o fato de ele ter tentado claude/codex sugere justamente que essas ferramentas já foram úteis para ele no passado

    • Outro link espelho do tweet do Karpathy aqui

  • É impressionante como o nanochat se inspirou no modded-nanoGPT
    A linhagem é nano-GPT do Karpathy → modded-nanoGPT do Keller Jordan (uma versão para treinar modelos rapidamente) → NanoChat
    O mais notável no modded-nanoGPT é treinar modelos GPT pequenos em velocidade extremamente alta
    Em especial, ele usa o otimizador Muon (criado pelo próprio autor) nas camadas lineares em vez de AdamW
    modded-nanoGPT, introdução ao Muon optimizer

    • O Muon é um otimizador criado pelo Keller Jordan para essa competição de treino rápido, com melhorias feitas por outras pessoas também
      Em menos de um ano, ele já está sendo amplamente usado como SOTA em treinamento de modelos

    • É bem chocante rodar um único nó de inferência com 8xH100
      Fico curioso se LLMs de fronteira usados em produção também rodam mais ou menos assim, ou se consomem ainda mais VRAM e computação
      Dá cerca de US$ 8 por hora e, assumindo 5 segundos por requisição, seria possível atender algo em torno de 700 requisições
      Ou seja, algo como 1 centavo por requisição
      Queria saber se errei nas contas

  • O treinamento está realmente acontecendo agora mesmo (começou há 20 minutos)
    Log público da execução
    Daqui a 4 horas, quando o modelo estiver pronto, ele será compartilhado para que qualquer pessoa possa testar a inferência

    • O modelo final foi enviado para o Hugging Face
      Não consegui resultados tão bons quanto os do Karpathy (azar no seed, talvez?)
      Ainda assim, é divertido de testar
      Por exemplo, perguntei: “quantas pernas um cachorro tem?”
      Assistente: “Essa é uma pergunta realmente interessante, debatida há séculos entre amantes de cães. Não existe uma ‘resposta correta’ (...)”

    • No comentário ao lado do primeiro gráfico,
      “A principal métrica de progresso. Bits per byte é, como o Karpathy disse, ‘uma métrica muito melhor do que a cross-entropy loss convencional. Ela normaliza a loss pelo número de bytes de cada token, o que permite comparações independentemente do tokenizer’”
      A explicação foi tão clara que fiquei até com vergonha de não ter pensado nisso quando fiz meus experimentos de tokenizer no tinystories
      Quero reanalisar o quão bom meu tokenizer realmente era

    • Seria ótimo ter um pequeno 'howto' explicando como rodar esse repositório treinando com W&B
      Queria saber se alguém poderia compartilhar um passo a passo para um programador que nunca passou por um fluxo de treinamento de modelos

  • Muito legal!
    O gerador de Shakespeare do Karpathy foi o primeiro projeto com que experimentei depois do ollama
    Eu queria entender os princípios por trás dos LLMs
    Desde a semana passada estou obcecado por LLMs e criando, do zero, um sistema de treinamento/inferência com dois backends

    • CPU (baseado em JAX)
    • GPU (baseado em wgpu-py)
      Tenho uma forte rejeição a rocm/pytorch por serem trabalhosos
      Vulkan é bom. O llama-cpp também usa dessa forma
      Na semana passada consegui fazer os backends de CPU/GPU funcionarem, e foquei em corrigir bugs no backend de GPU
      Refatorei o código WGSL e melhorei a eficiência
      Usei LLMs intensamente nesse processo, e foi uma virada surpreendentemente grande
      Com prompts de refatoração, consegui corrigir erros passo a passo e no fim chegar a um código que até passa na checagem de tipos com astral ty
    • Rejeição a pytorch?
      Acho difícil fazer uma escolha mais ineficiente do que essa
  • Testei o nanoGPT (link) neste fim de semana
    É um projeto já meio antigo, mas uma prática excelente para criar e treinar você mesmo um pequeno GPT de Shakespeare
    Rodei na CPU com cerca de 0,8M de parâmetros
    O resultado ficou, mais ou menos como esperado, “ruim”
    Ainda assim, deu para sentir um pouco de magia
    Para quem não é especialista em deep learning e só gosta de experimentar e hackear coisas, é uma introdução perfeita
    Ainda não consegui terminar de escrever no blog sobre minha experiência de fim de semana com nanoGPT... se tivesse terminado, teria postado aqui

    • É uma prática útil porque boas pesquisas de ML podem ser validadas em pequena escala
      Este novo exemplo é mais avançado e cobre instruction following, tool use SFT e até RLVR
      Isso acaba produzindo um baseline mais útil

    • Com um pequeno ajuste no código de Shakespeare e treinamento em outros dados, ele funciona surpreendentemente bem para gerar decks Commander de Magic The Gathering

  • “recebi conselhos do chief LLM whisperer Alec Radford”
    Se algum dia existir um podcast com Alec e Andrej, acho que isso abalaria o mundo
    Desde os tempos gloriosos do GPT1 até agora, em que se chega ao GPT3 em apenas 4 horas

    • Por favor, que esse podcast aconteça; seria perfeito
  • Eureka Labs: link do Github
    O Andrej é incrivelmente produtivo e impressionante
    Só acompanhar o trabalho dele já é uma experiência e tanto

  • Sempre achei que a melhor forma de contribuir com a humanidade
    é o produto de quantas pessoas eu consigo ajudar e o quão profundamente consigo ajudar cada uma delas
    O trabalho open source do Karpathy, nesse sentido, é uma abordagem de alavancagem máxima
    O mundo de hoje também foi construído sobre projetos open source
    Graças à liberdade de qualquer pessoa no mundo poder aprender a programar de graça e criar software
    Espero que a área de IA/LLMs siga essa direção positiva

    • Eu realmente gosto dessa tradição de gratuidade e compartilhamento no software
      Mas, no caso dos LLMs, parece difícil manter isso por causa do custo altíssimo de treinamento e do hardware de alto desempenho necessário
      Talvez, no futuro, o desenvolvimento de software também passe a pagar uma “renda” a hosts de LLM
      Pode ser que surjam formas de tornar a inferência on-prem/local novamente acessível a todos
      Mas, por enquanto, isso parece incerto por causa do alto custo de treinamento
      E, quanto mais dependência houver de LLMs,
      mais me preocupo que a produção de conteúdo “feito à mão”, como tutoriais para iniciantes em programação, acabe diminuindo aos poucos

    • (É um pouco longo, mas tudo vem de um desejo sincero por um mundo melhor)
      Essa visão é um pouco diferente do sentimento “anti-IA” mais comum
      A ideia de propriedade intelectual é, em certa medida, uma estrutura em que certas pessoas acumulam a posse da informação e a alugam para o restante da humanidade, em vez de contribuir diretamente com ela
      Mas também é indispensável que criadores individuais consigam sustentar sua subsistência
      Acho que não só o trabalho que o Karpathy faz, mas também o de milhares de criadores no YouTube, contribui enormemente para a sociedade em suas respectivas áreas
      Ainda assim, é um pouco triste que tanta gente precise depender de patrocínios
      Existe o Patreon, mas não é o ideal
      Concordo que tudo isso é uma forma de contribuir muito para a sociedade
      Recentemente, no Daily Show, Jon Stewart disse que o treinamento de IA é uma espécie de strip mining do conhecimento humano
      Às vezes o treinamento de IA é tratado de forma unilateral como se fosse roubo, mas na realidade existem opiniões muito diversas
      Essa tendência pode acabar consolidando uma estrutura hipercapitalista de propriedade do conhecimento,
      em que a posse das ideias fica cada vez mais concentrada em poucas mãos
      Esse fenômeno não ajuda muito o mundo como um todo e beneficia apenas alguns grupos
      Até a negociação de propriedade intelectual tende, com o tempo, a se concentrar cada vez mais em menos atores
      Acho que precisamos muito de debate e de novas interpretações adequadas à sociedade moderna
      É uma pena que o derrotismo do tipo “os de cima vão bloquear isso, então discutir não adianta” acabe impedindo o debate
      É importante discutir livremente como podemos chegar a soluções melhores

    • Costumo recomendar bastante a série de vídeos dele sobre ANN/LLM from scratch
      As aulas são muito claras, e o estilo de código também é pythonic, conciso e fácil de ler
      (a parte de vetorização em pytorch é complexa, mas isso é simplesmente um tema difícil)
      Só de assistir aos vídeos e absorver o estilo, já ajuda muito todo mundo

  • Fico me perguntando se seria possível treinar um modelo com todos os livros, materiais, relatórios e artigos de psicologia que eu realmente possuo
    e depois fazer inferência para perguntas especializadas quando necessário em um nó 1xH100 (link)

    • Na prática até dá para fazer, mas o desempenho seria extremamente ruim
      Nesse caso, faz muito mais sentido pegar um modelo pequeno pré-treinado e fazer fine-tuning com os meus dados,
      usar um fluxo de trabalho RAG (Retrieval Augmented Generation), ou combinar os dois

    • Dá para fazer
      Mas usar um modelo generalista e inserir meus documentos no contexto de trabalho por vários meios diferentes (por exemplo: RAG, hierarchical memories da Apple etc. link para o artigo) pode dar resultados ainda melhores

    • Pode fazer, mas seu dataset em si é tão pequeno que o desempenho ficaria muito abaixo de um modelo pré-treinado com fine-tuning, ou de um modelo pequeno com RAG

    • Não

  • Esse projeto é realmente inspirador!
    Seria bom conhecer exemplos reais de desempenho de prompts ou resultados de testes

    • No Simon.incutio.com,
      foi mencionado que aqui há capturas de tela de prompts reais