← Artigos · · 5 min de leitura

A Aceleração do MoE, Medida: 50 Prompts, Dois Modelos Qwen Locais, Um Mac Studio

Um modelo denso de 27B em 8 bits roda meu trabalho local de chat a 15 tokens por segundo. Seu irmão Mixture-of-Experts de 35B roda os mesmos prompts a 70. Passei 50 prompts pelos dois para descobrir o que essa velocidade extra realmente custa.

  • local-first
  • llm
  • benchmarks

Meu modelo local de chat é um denso de 27B em 8 bits. Ele é preciso, é multilíngue e gera cerca de 15 tokens por segundo num Mac Studio de 48GB. Isso é mais rápido do que eu leio, então para rascunhar e reescrever ele nunca foi o gargalo. Mas 15 tokens por segundo é o tipo de número que você só para de notar porque se acostumou com ele.

Aí a mesma família de modelos lançou um irmão Mixture-of-Experts: 35B de parâmetros no total, mas só cerca de 3B ativos por token. No papel, isso deveria gerar muito mais rápido, porque cada token toca uma fração dos pesos. A pergunta que de fato importa não é se ele é mais rápido. É se ele é mais rápido de graça, ou se a velocidade cobra um preço silencioso na qualidade.

Então passei 50 prompts pelos dois e olhei cada resposta.

A configuração

Os dois modelos rodam sob a mesma stack local, na mesma máquina, alternados por um pequeno roteador para que só um ocupe a memória de cada vez. Mesmo build do llama.cpp, offload total para a GPU, cache KV em 8 bits, contexto de 64k, amostragem idêntica, modo de raciocínio desligado. As únicas variáveis são o modelo e sua quantização.

  • Denso: Qwen3.6 27B, Q8_0, cerca de 27GB. A opção de alta fidelidade.
  • MoE: Qwen3.6 35B-A3B, Q6_K, cerca de 27GB. Ativação esparsa, mesmo footprint de memória que o modelo denso. (Testei primeiro em Q5 e depois subi para Q6, por um motivo que a seção de qualidade deixa claro.)

Os 50 prompts cobrem dez categorias: explicação técnica, raciocínio, código, formatação estrita, sumarização, escrita criativa, prosa em alemão, prosa em português, pegadinhas factuais e reescrita. O catálogo completo, prompt a prompt, com as duas saídas lado a lado, acompanha este post.

Uma nota de honestidade antes dos números: isto é uma rodada, não uma média de várias, o julgamento é qualitativo, e alguns prompts de raciocínio bateram no limite de tokens e foram cortados no meio da solução. Encare como um teste de campo cuidadoso, não como um ranking.

Velocidade: 4,5 vezes, parelho em todas as categorias

Categoria Denso 27B (Q8) MoE 35B (Q6) Aceleração
Todos os 50 (média) 15,6 tok/s 70,4 tok/s 4,5x
Técnico 14,8 69,4 4,7x
Raciocínio 14,9 68,7 4,6x
Código 15,1 69,6 4,6x
Formatação 16,2 74,8 4,6x
Alemão 15,2 70,3 4,6x
Português 15,2 70,0 4,6x

O mais interessante nesta tabela é o quanto ela é monótona. A aceleração não depende da tarefa. É a arquitetura e a quantização, não o tipo de trabalho. Um modelo esparso que lê 3B de pesos por token em vez de 27B simplesmente movimenta menos dados, e no Apple Silicon, onde a geração de tokens é limitada pela largura de banda da memória e não pelo poder de cálculo, movimentar menos dados é o jogo inteiro.

Qualidade: quase empate, com um padrão

Se o MoE fosse 4,5 vezes mais rápido e claramente pior, este seria um post fácil e sem graça. Não é. Ao longo dos 50 prompts, os dois modelos trocaram vitórias, com a maioria das respostas num empate genuíno. Algumas observações que se sustentaram no conjunto todo:

Os dois são sólidos em fatos. Toda pegadinha clássica caiu certo para ambos: 9.9 é maior que 9.11, a capital da Austrália é Camberra, a Muralha da China não é visível da Lua a olho nu, e Estrasburgo era uma Cidade Imperial Livre em 1518, não francesa. Nenhuma alucinação dos dois lados.

O MoE é mais enxuto e direto. Diante da instrução de “ser conciso”, o modelo denso ofereceu três reescritas; o MoE deu uma única frase certeira. Diante de um problema de taxa com pegadinha, o MoE começou pela resposta enquanto o denso ainda enumerava máquinas quando ficou sem espaço. Seus slogans foram mais espirituosos e seu one-liner em bash, mais limpo. Latência mais baixa somada à tendência de responder primeiro é um ganho ergonômico de verdade.

O modelo denso em 8 bits parecia mais preciso, até eu olhar a quantização. Em Q5, o MoE cometeu dois erros de ortografia em português que o modelo de 8 bits não cometeu, e deixou escapar um travessão perdido numa reescrita de mensagem de erro. Esses deslizes se concentraram, de forma suspeita, num lugar só: ortografia de idiomas com menos recursos, exatamente o canto que uma quantização mais leve arredonda. Então rodei a suíte inteira de novo em Q6. O português voltou limpo, o travessão sumiu, e a velocidade de geração ficou igual, porque o gargalo é a largura de banda e o Q6 ainda movimenta muito menos dados por token do que o modelo denso. O que o Q6 não corrigiu: o MoE continuou lendo “garbage collection” como caminhões de lixo municipais num haicai, onde o modelo denso enxergou o conceito de programação. Esse é o jeito literal do modelo, não a quantização, e nenhuma quantidade de bits vai resolver. Então o trade-off de verdade, depois que você para de economizar na quantização, encolhe para um único nicho de jogo de palavras literal.

Mais bits não é mais inteligência

Há uma ironia elegante no resultado, que vale a pena considerar. O modelo que coloquei em produção é uma quantização de 6 bits. O que ele substituiu era de 8 bits, em tese o arquivo de maior fidelidade e menos comprimido. Pela visão ingênua de que mais bits significa mais qualidade, o denso de 27B em Q8 deveria ter vencido com folga. Não venceu. Um MoE de 6 bits empatou ou superou um modelo denso de 8 bits, e até a versão de 5 bits que testei primeiro manteve a paridade. O que se perde com uma quantização mais grosseira acabou sendo menor do que o que se ganha com uma rede maior e mais esparsa, com mais parâmetros totais à disposição. A largura de bits é um botão de ajuste, não o placar: arquitetura e contagem de parâmetros definem o teto, e a quantização só decide o quão perto dele você chega. A lição prática para escolher um modelo local é comparar as saídas reais, não o rótulo de precisão no arquivo.

O que isso significa

Para a maior parte do que um modelo local faz no dia a dia, em inglês e alemão, rascunhar, sumarizar, reescrever, explicar, programar, o MoE de 35B é um upgrade direto: praticamente a mesma qualidade a 4,5 vezes a velocidade e com o mesmo footprint de memória. Isso não é um ganho marginal de ajuste fino. É a diferença entre esperar e não esperar.

A ressalva era específica o suficiente para agir, então agi. Meu trabalho depende muito do português, então parei de economizar na quantização, rodei de novo em Q6, e os deslizes de ortografia sumiram sem custo nenhum de velocidade. O Q6 é o que atende meu trabalho de chat agora, sob o mesmo nome que o modelo denso usava, então tudo que está embaixo simplesmente ficou mais rápido sem saber que algo mudou.

O ponto mais amplo é o que o local-first não cansa de mostrar. Nada disso custou um centavo nem saiu da máquina. Sem cobrança por token, sem limite de requisições, sem um provedor decidindo o que o modelo vai ou não dizer. O experimento foram 50 prompts, dois arquivos de modelo e uma chamada de roteador para alternar entre eles. O hardware que você já tem vai te dizer qual modelo é certo para o seu trabalho, se você se der ao trabalho de medir em vez de chutar.