o problema
Em modelo denso, todo parâmetro é pago em todo token. Um Llama 2 70B faz 70 bilhões de parâmetros trabalharem para prever cada pedacinho de texto, mesmo quando o token é um espaço de indentação. Como qualidade continuava subindo com tamanho, a conta de inferência subia junto, na mesma proporção. Quem quisesse um modelo aberto no nível do GPT-3.5 tinha que aceitar o custo de servir 70B por token — e a maior parte da comunidade simplesmente não tinha o hardware.
Mixture of Experts era uma saída conhecida desde a camada esparsamente roteada de Shazeer e do GShard: se você só ativa parte da rede por token, dá para inflar a capacidade sem inflar o compute. O que não existia era um modelo MoE de pesos abertos no estado da arte, com licença permissiva e stack de inferência que funcionasse fora de um datacenter do dono. Mixtral 8x7B é isso.
a ideia
A arquitetura é a do Mistral 7B, com uma troca: o bloco feedforward de cada camada vira oito blocos feedforward. Um router — uma camada linear pequena — olha o estado do token e escolhe dois dos oito. A saída da camada é a soma ponderada das saídas desses dois.
O ponto que importa é que a escolha é por token e por camada, não por sequência nem por prompt. O mesmo token pode ir para experts diferentes na camada 3 e na camada 27, e o token seguinte pode ir para outro par. Isso dá 47B de parâmetro no disco e 13B de parâmetro em uso a cada passo. Não são “oito modelos de 7B”: as camadas de attention são compartilhadas, e só o FFN é replicado — por isso 8 × 7 não dá 56.
como funciona
O gating é direto: logits do router, top-2, softmax sobre esses dois logits (os outros seis viram menos infinito antes do softmax, então saem zerados). Cada expert é um SwiGLU idêntico ao FFN de um transformer normal.
# uma camada MoE, por token
logits = x @ W_g # 8 logits
i, j = top2(logits)
w = softmax([logits[i], logits[j]])
y = w[0] * SwiGLU_i(x) + w[1] * SwiGLU_j(x)
A configuração: 32 camadas, dim 4096, hidden_dim 14336, 32 heads com 8 kv_heads, vocab de 32.000, contexto denso de 32.768 tokens, 8 experts, top_k igual a 2. A diferença para o GShard é que aqui todos os blocos FFN viram MoE (o GShard alterna) e o gating do segundo expert é mais simples.
Na execução, kernels como os do Megablocks tratam o FFN esparso como multiplicação de matriz esparsa grande, o que lida naturalmente com experts recebendo quantidades diferentes de token. Distribuído, entra expert parallelism: o token viaja até a GPU que tem o expert dele e a saída volta para o lugar de origem.
A análise de roteamento é a parte mais interessante e a mais contraintuitiva. Os autores foram procurar experts especializados em matemática, biologia, filosofia — e não acharam. A distribuição de escolha é praticamente a mesma entre subconjuntos do Pile; só DM Mathematics destoa um pouco, e provavelmente por ser sintético. O que aparece é estrutura sintática: self em Python e tokens de indentação caem repetidamente no mesmo expert. E há localidade temporal forte — na camada 15, o primeiro expert se repete entre tokens consecutivos em torno de 25% a 28% das vezes, contra 12,5% do acaso.
o que isso custou
A economia é de compute, não de memória. Servir Mixtral exige os 47B residentes, e a análise de custo do próprio paper admite que ela olha só o parâmetro ativo, ignorando memória e utilização de device. A camada MoE ainda adiciona overhead de roteamento e mais leitura de memória quando você roda vários experts por device; os autores dizem sem rodeios que MoE serve melhor a workload batchado, onde dá para atingir intensidade aritmética decente.
A localidade temporal do roteamento tem lado ruim: ela aumenta a chance de sobrecarregar um expert específico sob expert parallelism, e balanceamento de carga vira problema operacional real. Nos benchmarks, o ganho sobre o Llama 2 70B não é uniforme: compreensão de leitura é a categoria onde Mixtral não passa à frente, e o protocolo de avaliação difere do relatado no paper do Llama em MBPP e TriviaQA. E a promessa de interpretabilidade que MoE costuma sugerir não se cumpriu: ninguém aqui pode apontar “o expert de código”.
onde isso aparece hoje
Os pesos saíram sob Apache 2.0, base e instruct, uso comercial incluído. Para viabilizar isso, a equipe mandou mudanças para o vLLM integrando os kernels CUDA do Megablocks, e trabalhou com a NVIDIA no suporte a MoE esparso no TensorRT-LLM. O Mixtral 8x7B – Instruct, treinado com SFT seguido de DPO, marcou 8,30 no MT-Bench e Elo 1121 na arena do LMSys na foto de 22 de dezembro de 2023, acima de Claude-2.1, GPT-3.5-Turbo, Gemini Pro e Llama-2-70b-chat.
O legado prático é o vocabulário: model card de modelo grande hoje declara parâmetro total e parâmetro ativo como números separados, e a arquitetura esparsa deixou de ser exótica para virar escolha padrão em modelos abertos de grande porte.