O Feito Impossível: Um LLM de 29M em um chip de $8
O desenvolvedor ucraniano Slava S. alcançou um feito extraordinário, executando com sucesso um modelo de linguagem de 28,9 milhões de parâmetros em um microcontrolador ESP32-S3 de $8. Este sistema inovador opera totalmente offline, gerando texto localmente sem qualquer conexão Wi-Fi ou servidor. Isso demonstra um salto notável nas capacidades de IA embarcada, tornando o processamento de linguagem poderoso acessível em hardware mínimo, longe da infraestrutura em nuvem.
Esta conquista redefine drasticamente o que é possível para microcontroladores. Anteriormente, os maiores modelos de linguagem implantados com sucesso em tais chips atingiam o limite de aproximadamente 260.000 parâmetros. A inovação de Slava S. escala isso em um aumento impressionante de 110x, remodelando fundamentalmente o cenário para IA no dispositivo e provando que limitações severas de tamanho nem sempre são intransponíveis.
As especificações brutas do ESP32-S3 tornam esta conquista ainda mais notável. O chip oferece apenas 512 kilobytes de SRAM — uma capacidade de memória menor do que a de um computador pessoal típico da década de 1990. Apesar dessa restrição profunda, o sistema gera texto a uma taxa respeitável de nove tokens por segundo, demonstrando como a engenharia meticulosa pode superar limitações severas de hardware para permitir inferência de IA sofisticada em ambientes de ultra-baixo consumo e desconectados.
O Truque de Memória: Flash, não RAM
O desenvolvedor ucraniano Slava S. aproveitou uma solução inteligente, inspirada nos modelos Gemma do Google. Esta técnica, chamada de embeddings por camada, repensa como os parâmetros de um modelo de linguagem grande funcionam. O insight central reconhece que a maioria dos parâmetros de um LLM reside em uma tabela de consulta estática — um vasto dicionário de representações de palavras — em vez de participar ativamente da computação em tempo real.
Essa distinção fundamental permite uma estratégia de memória radical. Em vez de tentar colocar todo o modelo nos minúsculos 512KB de SRAM rápida do ESP32-S3, a enorme tabela de embeddings de 25 milhões de linhas, pesando aproximadamente 15MB, é estrategicamente realocada. Ela encontra seu lugar nos 16MB de memória flash significativamente maior, porém mais lenta, do chip.
Durante a inferência, o sistema recupera dinamicamente apenas o punhado de linhas de embedding absolutamente necessárias para o token atual. Por exemplo, apenas seis linhas — totalizando cerca de 450 bytes — são puxadas da memória flash para a SRAM. Essa abordagem engenhosa deixa a SRAM limitada e de alta velocidade predominantemente livre para o trabalho computacional real do modelo: as cabeças de atenção e as camadas feed-forward que processam e geram o próximo token.
A Verificação de Realidade: Isso não é o ChatGPT
A conquista de Slava S., embora inovadora, não produz um modelo de linguagem grande de uso geral. Este modelo de 28,9 milhões de parâmetros é treinado exclusivamente no conjunto de dados TinyStories da Microsoft. Esta coleção curada apresenta narrativas simples e coerentes, projetadas especificamente para modelos pequenos — mesmo aqueles com apenas alguns milhões de parâmetros — para aprender a geração de texto coerente sem produzir o discurso sem sentido típico que se esperaria de um modelo desse tamanho em um conjunto de dados mais amplo.
Limitações significativas surgem durante a interação. O modelo recorre consistentemente a uma história específica sobre uma menina, independentemente do prompt inicial do usuário. Por exemplo, mesmo entradas como "uma história sobre um robô" ou uma frase de abertura com o tema "Star Wars" redirecionam rapidamente para essa narrativa padrão após algumas frases, demonstrando uma compreensão extremamente limitada e uma incapacidade de sustentar tópicos de conversação inéditos. Esse comportamento destaca os padrões aprendidos restritos do modelo.
Além disso, a interação dinâmica não é possível. Ajustar o prompt requer um reflash completo do microcontrolador ESP32-S3, um processo que sobrescreve a memória do dispositivo. O sistema só pode executar um prompt pré-definido por vez, tornando-o uma prova de conceito interessante, embora limitada, em vez de uma ferramenta versátil e dinâmica para geração de texto arbitrária. Para aqueles interessados em explorar o código e a metodologia subjacentes, consulte o repositório do projeto no GitHub: Running a 28.9M parameter LLM on an $8 microcontroller - GitHub.
Gostando do artigo? Receba um assim na sua caixa de entrada toda manhã.
um e-mail por dia · cancele em dois cliques · sem rastreadores de terceiros
O Blueprint de Karpathy: Como Construí-lo
Este projeto impressionante baseia-se diretamente no trabalho seminal 'llama2.c' de Andrej Karpathy. Karpathy demonstrou que a inferência eficiente de Large Language Models era alcançável em código C puro e portátil, evitando completamente Python ou dependências complexas. Seu blueprint provou que LLMs poderiam rodar em sistemas mínimos, um insight fundamental para esta implementação no ESP32-S3, viabilizando todo o conceito.
Replicar este LLM de baixo custo requer hardware específico, um componente inegociável para o sucesso. Uma variante ESP32-S3 N16R8 é obrigatória, selecionada por sua generosa configuração de memória. Este modelo específico possui 16MB de flash e 8MB de PSRAM. O arquivo de modelo treinado de 15MB exige crucialmente essa maior capacidade de flash; placas com menos de 16MB de flash, como as versões comuns de 4MB ou 8MB, simplesmente não conseguem armazenar o modelo inteiro.
O repositório original de Slava S. no GitHub hospeda todo o código necessário para aqueles interessados em explorar os detalhes da implementação e a mecânica subjacente. Para um caminho mais direto para a implementação, o criador do vídeo fornece um one-shot script simplificado, otimizando significativamente a configuração. Este script abrangente automatiza todo o processo de construção, lidando com a instalação da toolchain, preparação de dados, treinamento do modelo no dataset TinyStories e, finalmente, o flash do ESP32-S3 com o modelo compilado.
Perguntas Frequentes
Como um LLM de 28,9M de parâmetros cabe em um microcontrolador com apenas 512KB de SRAM?
O modelo usa um truque de memória onde a maior parte — uma tabela de embedding de 25M de parâmetros — é armazenada na memória flash de 16MB do chip, que é maior e mais lenta. Apenas a pequena porção de computação e as linhas de embedding específicas necessárias para o token atual são carregadas na SRAM rápida de 512KB.
Qual hardware específico é necessário para replicar este projeto?
Você precisa de uma variante de microcontrolador ESP32-S3 com pelo menos 16 megabytes de memória flash e 8 megabytes de PSRAM. Isso é comumente conhecido como a variante N16R8.
Quais são as limitações do LLM rodando no ESP32?
É um modelo muito simples treinado no dataset TinyStories, portanto, ele só pode gerar narrativas simples e não consegue realizar tarefas complexas. Ele também tende a voltar para uma história padrão e requer o reflash de todo o chip para alterar o prompt inicial.
Quais projetos de código aberto tornaram isso possível?
Este projeto, criado pelo desenvolvedor Slava S., baseia-se no projeto llama2.c de Andrej Karpathy, que demonstrou a execução de inferência de LLM em C puro. O modelo em si foi treinado no dataset TinyStories desenvolvido pela Microsoft Research.

