FreeToken-next
Motor de IA que roda modelos grandes de linguagem numa única placa de vídeo doméstica, chegando a quase 290 tokens por segundo sem mudar uma vírgula da resposta.
01 Problema
Modelos de IA bons são grandes. Um modelo de 35 bilhões de parâmetros não cabe nos 16 GB de uma RTX 5080, e os motores comuns ou ficam lentos ou exigem placas de servidor que custam o preço de um carro.
Eu queria o contrário: rodar esses modelos aqui em casa, numa placa de vídeo comum, na maior velocidade possível. E com uma regra que não se negocia: a resposta tem que sair exatamente igual à de um motor sem atalhos, token por token.
02 Meu papel
Projeto meu. Peguei o FreeToken, um motor de inferência open source feito em Python e CUDA pela equipe da FlashML, e fiz um fork focado em extrair o máximo da minha máquina. Eu defino os objetivos, as regras de medição e o que é aceitável; os agentes de IA (Claude Code e Codex) escrevem e testam o código dentro dessas regras.
03 Processo
Três ideias fazem a diferença:
- Especialistas na memória RAM. Esses modelos são do tipo Mixture of Experts: para cada palavra, só uma pequena parte do modelo trabalha. A parte que não cabe na placa fica nos 96 GB de RAM do servidor e sobe para a GPU só quando é usada, com um cache na placa para os especialistas mais pedidos.
- Adivinhar e conferir (MTP). Uma pequena cabeça do modelo chuta várias palavras à frente de uma vez, e o modelo grande confere todas numa passada só. Quando o chute acerta, ganha-se tempo; quando erra, descarta-se o chute e a resposta continua idêntica.
- Pesos em NVFP4. Um formato numérico de 4 bits que a geração Blackwell da NVIDIA (a da RTX 5080) acelera em hardware.
Tudo isso só entra se passar nos testes. Cada medição é feita do mesmo jeito (1 aquecimento e 3 repetições, sempre com 16 mil tokens de contexto), a saída é comparada byte a byte com a versão sem atalhos, e uma mudança só é aceita se não deixar nada mais lento que 97% do recorde anterior. O veredito é PASSOU ou FALHOU, sem "quase passou". Foram mais de 600 commits em dois meses, organizados em campanhas com essas regras.
04 Resultado
Números medidos e registrados no projeto (RTX 5080 de 16 GB, contexto de 16 mil tokens):
| Modelo | Velocidade (1 usuário) | Leitura do texto de entrada |
|---|---|---|
| Ornith 35B (NVFP4) | ~290 tokens/s | ~7.600 tokens/s |
| Qwen3.6 35B (NVFP4) | ~288 tokens/s | ~7.000 tokens/s |
| Qwen3.8 Flash Next (especialistas na RAM) | ~96 a 108 tokens/s | ~15.000 a 17.000 tokens/s |
Com 4 pessoas usando ao mesmo tempo, o Ornith passa de 440 tokens/s somados. Para ter uma ideia, 290 tokens por segundo é mais rápido do que qualquer pessoa consegue ler.
E ainda tem espaço: pelas medições do próprio projeto, os modelos de 35B estão entre 40% e 66% do limite físico da placa. O trabalho continua.
Commits recentes
08- 537634efix(ftdev): re-measure rows measured on a recalibrating planner bootcommon.relative.minutes
- c5841ccfix(moe): window only plain prefill tails, never batched verify rowscommon.relative.minutes
- f6af96fchore(errors): learn profile reset wiping n4 states and cold arm pollutioncommon.relative.hours
- 4d93890chore(issues): record the sticky stale warm profilecommon.relative.hours
- 07085fdfeat(bench): add --no-cold so a converging serve leaves a clean depth profilecommon.relative.hours
- f8e484cchore(errors): learn the small prefill lru jit stallcommon.relative.hours
- 9ef60ebchore(issues): close the warm prefix ttft and small prefill stall issuescommon.relative.hours
- 0105f77perf(moe): serve prefix-hit tails as verify-sized windows of routed expertscommon.relative.hours