common.skipToContent
rtx5080~/christmasbr/projetos/freetoken-next — página inicial
← ~/projetos

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.

Capa do projeto FreeToken-next

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):

ModeloVelocidade (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