antonio leandro

ia generativa

Mixtral of Experts

paper · Albert Q. Jiang, Alexandre Sablayrolles, Antoine Roux, et al. ·

a tese

dá para ter 47 bilhões de parâmetros e pagar por 13: oito ffn por camada, um router que escolhe dois por token, e o modelo bate o llama 2 70b com cinco vezes menos parâmetro ativo

o que fica

  1. Parâmetro total e parâmetro ativo são duas contas diferentes: o total define quanta memória você precisa reservar, o ativo define quanto compute cada token custa.
  2. Aumentar o número de experts sem mexer no top-k faz o modelo crescer com custo de inferência praticamente constante — é esse o truque inteiro.
  3. O router do Mixtral não especializou experts por domínio: a distribuição de escolhas é quase idêntica para papers de ArXiv, abstracts de biologia e textos de filosofia.
  4. A escolha de expert tem forte localidade temporal: em camadas profundas, tokens consecutivos caem no mesmo expert muito acima do acaso, o que ajuda cache e atrapalha expert parallelism.
  5. MoE esparso reduz compute, não memória: servir Mixtral exige os 47B carregados, mesmo que só 13B rodem por token.
  6. A vantagem do MoE aparece em workload batchado; com carga baixa, o overhead de roteamento e de leitura de memória come parte do ganho.

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.

lido na íntegra por pipeline de llm, revisado por antonio leandro antes de publicar ·