FareedKhan-dev roda Kimi K3 de 2.78 trilhões em uma CPU
Motor em C99 faz inferência local com 8.24 GB de RAM, sem GPU, BLAS ou framework.
Motor em C99 faz inferência local com 8.24 GB de RAM, sem GPU, BLAS ou framework.
O kimi-k3-in-c é um motor de inferência em C99 para rodar o Kimi K3 localmente em uma CPU. FareedKhan-dev criou o projeto em 2026-08-01. O código executa um modelo de 2.78 trilhões de parâmetros com pico de 8.24 GB de RAM, embora precise de um checkpoint de 1.56 TB. A ferramenta serve para quem aceita uma execução lenta e quer evitar GPU, Python e serviços externos.
O motor lê o checkpoint em shards .safetensors e transmite os dados durante a inferência. O usuário precisa apontar --trunk para o diretório do trunk empacotado; esse parâmetro ativa o streaming. Sem ele, o programa carrega cerca de 113.5 GB do trunk na memória, mesmo quando os limites configurados são menores.
O projeto separa o orçamento entre camadas fixadas, anel de streaming e cache LRU dos routed experts. --trunk-gb define o orçamento do trunk, enquanto --cache-gb define o espaço para a cache. Os presets laptop, desktop, workstation, server e max ajustam os dois valores de uma vez.
O código implementa atenção linear e mantém o estado recorrente KDA entre os tokens. Com --incremental, ele reaproveita a KV cache e esse estado, em vez de recalcular todo o prefixo a cada token. A compilação usa OpenMP, e os tópicos do projeto também citam AVX2.
O motor inteiro mede 176 KB. Ele não usa BLAS, framework de aprendizado profundo nem GPU. A inferência acontece na CPU local, e o checkpoint permanece como o único arquivo grande indispensável para gerar texto.
A instalação começa com o clone do repositório e o comando make -j. O projeto reúne sete arquivos C, um compilador e OpenMP. O usuário não precisa instalar Python nem baixar dados para compilar e testar o motor.
A suíte de testes roda sem checkpoint e sem rede. Ela valida teacher forcing, decodificação gulosa e execução incremental; o README registra 32 de 32 posições no primeiro teste e 20 de 20 tokens nos dois seguintes. O resultado esperado é “ENGINE MATCHES THE REFERENCE EXACTLY”.
Para gerar texto, o programa aceita --prompt, --prompt-file ou --ids. --prompt e --prompt-file exigem --tok, que aponta para o diretório com os arquivos do tokenizer. --prompt-file preserva os bytes do arquivo e evita a recodificação que o shell pode aplicar aos argumentos.
--ids recebe os IDs diretamente e dispensa o tokenizer. O modo também forma o canal reproduzível usado pelos testes. O programa exige exatamente uma dessas três opções; passar nenhuma ou mais de uma encerra a execução com erro 2.
O modelo é base, não um assistente com template de conversa. Depois de um texto como “ Paris.”, o motor continua a sequência em vez de produzir uma resposta formatada. A geração aceita até 4096 tokens, e o prompt pode chegar a 32768 tokens.
O README diz que mais memória não muda a resposta, apenas o tempo de execução. A ferramenta, portanto, não serve para quem precisa de baixa latência ou não consegue armazenar um checkpoint de 1.56 TB. Ela atende melhor a quem quer testar a implementação localmente e aceita esperar.
O repositório tinha 2.071 estrelas, 336 forks e 7 issues abertas. Ele tinha 3 dias de idade, recebeu o último commit em 2026-08-01 e chegou à versão v0.1.0 em 2026-08-02. A licença Apache-2.0 permite usar, alterar e redistribuir o código sob seus termos, mas a pouca idade ainda limita o histórico disponível para avaliar manutenção.