22 pontos por GN⁺ 2025-12-30 | 2 comentários | Compartilhar no WhatsApp
  • Z80-μLM é um modelo ultracompacto de inteligência artificial conversacional que roda em um processador Z80 de 1976 (4 MHz, 64 KB de RAM)
  • Aplica treinamento com reconhecimento de quantização (QAT) para realizar geração de texto em nível de caractere usando apenas pesos de 2 bits e operações inteiras de 16 bits
  • Cerca de 40 KB em um executável .COM incluem motor de inferência, pesos e UI de chat
  • Com codificação hash de trigramas, converte a entrada em 128 buckets para gerar respostas robustas a erros de digitação e à ordem das palavras
  • Não consegue entender contextos complexos, mas chama atenção como um modelo experimental de IA que funciona mesmo em um ambiente limitado de 8 bits

Visão geral do projeto

  • O Z80-μLM é um modelo de linguagem ultracompacto capaz de rodar em ambientes de retrocomputação
    • Funciona em uma CPU Z80 com 64 KB de RAM e gera respostas conversacionais em nível de caractere
    • O tamanho total, incluindo modelo, código de inferência e UI, é de cerca de 40 KB
  • A pergunta central do projeto era: “até que ponto dá para reduzir mantendo personalidade?”, e ele também pode ser distribuído em self-hosting
  • Não chega ao nível de um teste de Turing, mas oferece conversas simples que podem divertir o usuário

Inclui dois exemplos

  • tinychat

    • Um chatbot simples treinado com dados cotidianos de perguntas e respostas
      • Fornece respostas curtas e com personalidade para saudações, apresentação pessoal e conversas gerais
      • Ex.: “hello” → “HI”, “are you a robot” → “YES”, “do you dream” → “MAYBE”
  • guess

    • Um modelo no formato do jogo 20 Questions
      • Ele conhece um tema secreto e responde com YES/NO/MAYBE
      • Quando o usuário acerta a resposta, exibe “WIN”
  • Os dados de treinamento podem ser gerados com Ollama ou a API do Claude, e inclui uma ferramenta de balanceamento da distribuição de classes

Principais recursos

  • Codificação hash de trigramas: aplica hash ao texto de entrada em 128 buckets, tolerando erros de digitação e sendo independente da ordem das palavras
  • Quantização de pesos em 2 bits: cada peso assume {-2, -1, 0, +1}, com 4 pesos armazenados por byte
  • Inferência inteira de 16 bits: usa as operações aritméticas de 16 bits do Z80
  • Arquivo .COM de ~40 KB: adequado para a Transient Program Area (TPA) do CP/M
  • Geração autorregressiva: gera a saída caractere por caractere
  • Sem operações de ponto flutuante, usando escalonamento de ponto fixo
  • Suporte a modo interativo: execução com o comando CHAT

Como funciona a interação

  • O modelo não “entende” a entrada, mas reage com base na forma (shape) da entrada
    • A frase de entrada é convertida em 128 buckets de trigramas, preservando similaridade semântica
    • Ex.: “hello there” e “there hello” são processados com a mesma estrutura de buckets
  • Frases longas ou dependentes de ordem são difíceis de distinguir
  • O significado de respostas curtas

    • Mesmo respostas de 1 ou 2 palavras podem expressar nuances inesperadas
      • OK: aceitação neutra
      • WHY?: contestação da pergunta
      • R U?: dúvida sobre existência
      • MAYBE: incerteza
      • AM I?: pergunta reflexiva
    • Essas respostas curtas induzem o usuário a inferir o contexto

Pontos fortes e limitações

  • Pontos fortes
    • Respostas consistentes do tipo classificação para entradas curtas
    • Robusto a erros de digitação, reformulação e mudanças na ordem das palavras
    • Expressa personalidade por meio da escolha de vocabulário
    • Pode rodar até em hardware limitado de 8 bits
  • Limitações
    • Não consegue gerar frases novas
    • Não consegue rastrear contexto em múltiplos turnos
    • Não entende gramática
    • Não atinge o nível de inteligência geral

Arquitetura

  • Camada de entrada: 128 buckets de consulta + 128 buckets de contexto
  • Camada oculta: exemplo de configuração 256 → 192 → 128
  • Camada de saída: 1 neurônio para cada caractere do conjunto de caracteres
  • Função de ativação: ReLU
  • Restrições de quantização

    • O Z80 é uma CPU de 8 bits, mas realiza acumulação e ativação usando pares de registradores de 16 bits (HL, DE, BC)
    • Os pesos são armazenados 4 por byte (em unidades de 2 bits)
    • O acumulador de 16 bits evita overflow ao somar 256 entradas
    • Como os pesos têm 2 bits, a capacidade de expressão é limitada, e sem QAT o treinamento pode gerar resultados instáveis
  • Loop interno do Z80

    • O núcleo da inferência é o loop MAC (multiply-accumulate)
      • Ele desempacota os pesos e soma ou subtrai do acumulador (ACC) conforme os valores -2, -1, 0, +1
      • Após o cálculo de cada camada, aplica um deslocamento de 2 bits à direita para evitar overflow
    • Todo o processo de inferência repete cerca de 100 mil operações por caractere

Licença

  • É possível escolher entre MIT ou Apache-2.0

2 comentários

 
GN⁺ 2025-12-30
Comentários do Hacker News
  • Timing perfeito. Coloquei um terminal VT100 (para rodar um agente de programação), um emulador de Z80 e uma ponte serial capaz de programar uma máquina CP/M dentro de um jogo feito na Unreal Engine
    captura de tela
    Não imaginava que alguém fosse postar algo que encaixasse tão perfeitamente nisso. É uma coincidência realmente estranha, mas incrível
    • Parece que nós dois tivemos telepatia
      Eu fiz um emulador de CP/M e uma IDE baseados no navegador: lockboot.github.io/desktop
      Eu ia postar isso, mas acabei caindo numa toca de coelho enquanto procurava uma “demo legal”
    • O livro Connections: Alternative History of Technology, de James Burke, trata muito bem dessas conexões fortuitas
    • Interessante, mas é uma pena que eu não consiga ver o imgur
  • Gostei muito. Já dei star no GitHub
    Eu tinha escrito um MLP em Fortran IV para uma máquina de cartões perfurados dos anos 60 (projeto Xortran)
    Mesmo sem mecanismo de atenção e com o contexto limitado ao trigrama da última frase, a interação era bem razoável
    Se algo assim fosse possível em hardware dos anos 60, a ficção científica e a ciência daquela época teriam sido completamente diferentes
    • Projetos assim são realmente fascinantes. Dá a sensação de ver um caminho que não foi seguido
      Falando em tom meio conspiratório, parece que um dos motivos de as empresas de IA comprarem RAM em massa é impedir que as pessoas percebam que o momento atual se parece com a revolução dos computadores domésticos
      Eu uso uma máquina com 1 TB de RAM, e com agentes personalizados o desempenho é melhor do que o de modelos comerciais. É pessoal, seguro e não é monetizado
  • Eu também penso nisso com frequência. O que seria um “LLM minimamente funcional”? Um modelo capaz de sustentar uma conversa simples
    E a pergunta seguinte é se seria possível criar um modelo pequeno que aprendesse consultando dados externos
    Se der para fazer um modelo minúsculo que aprenda em tempo real, isso na prática seria um assistente pessoal totalmente local
    • Isso é quase igual ao conceito de “cognitive core” de Karpathy
      Um modelo muito pequeno, com quase nenhum conhecimento enciclopédico, mas com capacidade básica de raciocínio e uso de ferramentas
      tweet de referência
    • Se essa tecnologia existisse nos anos 90, talvez um LLM básico já tivesse existido
      Acho que o mundo de hoje seria completamente diferente
    • O RWKV é interessante de ver: rwkv.com
      É um estudo de caso experimental sobre “e se RNNs fossem adequadas para LLMs?”
      É absurdamente rápido em CPU
    • Há um LLM que alguém fez dentro do Minecraft, usando 5 milhões de pesos de 8 bits para lidar com conversas simples
      Mas talvez seja difícil aproveitar bem uma janela de contexto grande
  • Brincadeira dizendo que as empresas de IA vão comprar todos os chips Z80 e fazer o preço disparar
    • Já é tarde. O estoque acabou todo no ano passado
  • Se você ensinasse uma frase secreta a algum modelo, e o usuário tivesse que adivinhá-la fazendo perguntas
    fico curioso se, tendo acesso aos pesos do modelo, seria possível inferir esse segredo ao contrário, ou se ele só seria acessível por meio de perguntas
    • Essa pergunta me lembrou este artigo: Planting Undetectable Backdoors in Machine Learning Models
      Ele trata de como inserir backdoors indetectáveis que, na superfície, parecem funcionar normalmente
    • Quanto menor o modelo, mais fácil tende a ser extrair esse segredo analisando os pesos
      Em geral, isso entra no problema de interpretabilidade
  • Com o código e a infraestrutura de treinamento certos, o ELIZA poderia ter sido muito mais poderoso
    • O ELIZA originalmente rodava em um mainframe IBM 7094 nos anos 60
      Tinha uma arquitetura de palavras de 32K×36 bits e não suportava operações de byte
      Levar um executável de Z80 de 40 KB diretamente para lá teria sido bem apertado
      Mas, se a maior parte fossem pesos de 2 bits, talvez fosse possível
      Em hardware posterior, especialmente no Z80 de 1976, isso teria sido bem mais tranquilo
  • Eu também projetei e construí meu próprio computador Z80. No momento ele tem 32 KB de ROM e 32 KB de RAM
    Pretendo expandir na próxima versão, então com certeza quero testar isso
    • Hoje em dia o preço da RAM está alto demais
  • Se toda a entrada for processada de uma vez só como embedding, isso parece ser uma arquitetura MLP, não Transformer nem RNN
  • Eu gostaria que RPGs antigos de entrada livre de texto tivessem um fuzzy matcher assim
    Na época, eles só funcionavam com correspondência exata de palavras-chave, o que era estranho
    Acho que o último jogo desse tipo foi Wizardry 8, em 2001
  • Belo trabalho. Qual é a previsão do cronograma até a AGI?
    • Provavelmente no começo de abril
    • Deve estar logo ali, virando a esquina
 
crawler 2025-12-30

Acho realmente impressionante conseguir rodar tecnologia de ponta em hardware do passado.

Quando a AGI surgir no futuro, será que daria para rodá-la se juntássemos todo o poder computacional existente na Terra hoje?