XYZNOT

Artigos · arXiv 2609.18063

A Outra Metade da Memory Wall: Servindo MoEs de 35B a Partir de SSD com Previsão de Roteamento Treinada

The Other Half of the Memory Wall: Serving 35B MoEs from SSD with Trained Routing Prediction

Publicado em cs.AI arXivPDF

Ler com tradução e IA

Resumo em três linhas

  1. 🎯 MoEs da classe 35B exigem ~19,5 GB mesmo em int4, excedendo a RAM de consumo, enquanto o offloading ingênuo para SSD engala na latência do disco porque o roteamento da camada depende da saída da camada anterior.
  2. 🔧 O Edge0 transmite especialistas de MoE a partir de SSD usando um prerouter por camada que prevê o roteamento um token à frente, adotando 'previsão como roteamento', combinado com um recovery LoRA paralelo não fundido destilado no caminho do aluno.
  3. 📈 Serve um MoE de 35B a ~20,4 tok/s com pico de memória de 2,9 GiB em um Mac mini M4 Pro de 24 GB, a 3,9 pontos médios de benchmark do professor fp16.

Resumo

A inferência de Mixture-of-Experts (MoE) em hardware de consumo é limitada pela memória de pesos: um modelo da classe 35B ocupa 19,5 GB em 4 bits, e a esparsidade reduz a computação por token, não os bytes que precisam ser mantidos. O offloading ingênuo para SSD não ajuda por si só, porque os especialistas da camada N+1 devem ser escolhidos antes que a saída da camada N exista, de modo que as leituras não podem começar cedo o suficiente para se ocultarem sob a computação. Apresentamos o Edge0, um mecanismo de inferência MoE por streaming que fecha essa lacuna com um prerouter: uma cabeça por camada prevê o roteamento da próxima camada um token à frente, e a previsão é consumida como o próprio roteamento, de forma que o conjunto de especialistas preparados equivale ao conjunto roteado e nada é descartado. Um recovery LoRA não fundido, treinado no caminho do aluno, compensa a qualidade perdida pela quantização int4 e pela substituição do roteamento. Em uma única máquina de 24 GB, o Edge0 serve um MoE de 35B a 20 tok/s dentro de 3 GiB de pico de memória ativa, a poucos pontos de seu professor fp16, em média, em cinco benchmarks públicos. Uma versão de 8B roda no mesmo framework, e o framework, os checkpoints e os adaptadores são de código aberto.

Resumo original (inglês)

Mixture-of-experts (MoE) inference on consumer hardware is bounded by weight memory: a 35B-class model is 19.5GB at 4-bit, and sparsity shrinks the compute per token, not the bytes that must be held. Naive offloading to SSD does not help on its own, because layer N+1's experts must be chosen before layer N's output exists, so the reads cannot start early enough to hide behind compute. We present Edge0, a streaming MoE inference engine that closes the gap with a prerouter: a per-layer head predicts the next layer's routing one token ahead, and the prediction is consumed as the routing itself, so the staged expert set equals the routed set and nothing is dropped. An unmerged recovery LoRA, trained on the student path, pays back the quality lost to int4 quantization and routing replacement. On a single 24GB machine, Edge0 serves a 35B MoE at 20tok/s inside 3GiB of peak active memory, within a few points of its fp16 teacher on average across five public benchmarks. An 8B tier runs on the same framework, and the framework, checkpoints, and adapters are open source.

Guia de leitura

Problema e motivação

Modelos Mixture-of-Experts (MoE) escalam o total de parâmetros mantendo os parâmetros ativos baixos por token (por exemplo, ativando ~3B de parâmetros por token em um modelo de 35B). No entanto, a inferência em hardware de consumo continua limitada pela memória estática de pesos: um MoE de 35B requer cerca de 19,5 GB mesmo quando quantizado para int4. Em uma máquina de 24 GB, isso sobrecarrega completamente o sistema operacional e a KV cache, levando a um severo paging de memória e degradação da taxa de transferência de decodificação (por exemplo, 3,9 tok/s para um modelo residente em um Mac mini M4 Pro).

O offloading de pesos de especialistas para o SSD reduz a pegada de memória, mas o carregamento sob demanda ingênuo introduz um gargalo rígido de serialização: a seleção de especialistas para a camada depende da saída da camada . As leituras do SSD não conseguem começar cedo o suficiente para se ocultarem sob a computação, paralisando a execução na latência do disco uma vez por camada a cada token.

Ideias centrais

  • SSD como Nível de Pesos: Os pesos dos especialistas de MoE permanecem no SSD no formato int4 e são mapeados em memória (mmap) em um pool de streaming compacto. O pico de memória é determinado pelo conjunto de trabalho ativo, e não pelo tamanho total dos parâmetros do modelo.
  • Previsão como Roteamento: Em vez de esperar que a camada termine, um prerouter por camada prevê o roteamento da camada com um token inteiro de antecedência. Fundamentalmente, o modelo trata a previsão como o próprio roteamento no momento da decodificação. Isso elimina tokens descartados ou carregamentos de fallback por construção, porque o conjunto preparado é identicamente igual ao conjunto roteado.
  • LoRA de Recuperação Não Fundido: A quantização de 4 bits e o roteamento aproximado causam perda de qualidade. O Edge0 treina um adaptador de baixo posto (low-rank adapter) no caminho de roteamento do aluno via destilação. Como a fusão do LoRA na base int4 e a consequente requantização apagam a maior parte do delta (apenas 18% de retenção no nível de logits sobrevive), o Edge0 serve o adaptador como um delta paralelo não fundido com sobrecarga insignificante.

Método

Arquitetura da Cabeça do Prerouter

Cada cabeça de prerouter pertencente à camada é executada no token sobre a saída da normalização de camada pós-atenção e prevê o roteamento para a camada no token . As características de entrada concatenam o estado oculto com dois vetores one-hot de roteamento top- (token atual e anterior):

Para a classe 35B, isso resulta em . A cabeça computa:

onde é um caminho residual linear inicializado a partir dos pesos do roteador da próxima camada.

Execução do Adaptador Não Fundido

A camada MoE servida preserva os bytes base quantizados e executa o delta LoRA paralelo:

Treinamento em Três Fases

  1. Destilação da Cabeça: As cabeças do prerouter são treinadas para imitar as decisões reais do roteador da próxima camada do professor, mantendo o restante da rede congelado.
  2. SFT no Caminho do Aluno: Adaptadores de recovery LoRA (anexados às projeções de atenção, atenção linear e especialistas compartilhados, mas não aos especialistas em streaming) são treinados usando texto gerado pelo professor enquanto o roteamento é forçado através do prerouter.
  3. Destilação On-Policy: O aluno gera texto sob execução pré-roteada, o professor base fp16 pontua as gerações e os parâmetros do LoRA são otimizados via divergência reversa de Kullback–Leibler com um objetivo de probabilidade top- sensível à cauda.

Resultados

  • Taxa de Transferência e Memória (Mac mini M4 Pro, 24 GB):
    • edge0-35b (): Atinge 20,4 tok/s de decodificação usando apenas 2,9 GiB de pico de memória ativa a partir de um checkpoint int4 de 19,5 GB (em comparação com 3,9 tok/s e 18,2 GiB quando totalmente residente).
    • edge0-8b (): Atinge 28,0 tok/s de decodificação dentro de 1,5 GiB de pico de memória.
  • Ganho de Velocidade com Prefetching (MacBook M2, 16 GB):
    • Em comparação com o streaming sob demanda puramente reativo, o prefetch do prerouter de 1 token aumenta a velocidade de decodificação em +80% a +84% em diferentes larguras de roteamento (: 4,8 para 8,6 tok/s; : 3,5 para 6,4 tok/s; : 1,8 para 3,3 tok/s).
    • O tempo de carregamento bloqueado na thread principal cai drasticamente (por exemplo, de 244,0 ms para 101,9 ms por passo com ).
  • Qualidade do Modelo (OpenCompass):
    • Em cinco benchmarks (AIME 2026, HumanEval, GPQA-Diamond, MMLU-Pro, IFBench), o edge0-35b pontua uma média de 79,2 contra 83,2 da base Qwen3.6 fp16 (uma diferença de 3,9 pontos).
    • O edge0-8b atinge 69,9 contra 72,7 da base Ling 3.0 tiny fp16 (uma diferença de 2,8 pontos).

Limitações e questões em aberto

  • Concorrência de Serviço: O Edge0 opera serializado em FIFO para requisições únicas; o processamento em lote (batching) altera o conjunto de trabalho dos especialistas e a dinâmica de cache de maneiras não contempladas pelos perfis de fluxo único.
  • Sobrecarga de Construção de Grafos na CPU: A velocidade de decodificação é limitada pela sobrecarga do framework no lado da CPU (~44 ms/passo na construção de grafos MLX em 40 camadas), o que as otimizações de SSD não conseguem aliviar.
  • Queda de Qualidade em Raciocínio: A degradação de desempenho concentra-se em benchmarks de raciocínio complexo (por exemplo, uma queda de 6,1 pontos no AIME para o modelo 35B e de 10,0 pontos para o de 8B).
  • Dependência de Hardware: Os ganhos relativos de taxa de transferência do prerouter dependem da latência do disco e diminuem quando os caches de pesos estão quentes ou ao rodar em camadas de armazenamento ultrarrápidas.

Termos-chave

Edge0
Um mecanismo de inferência MoE por streaming que serve modelos a partir de SSD sobrepondo leituras com computação por meio de previsão de roteamento e compensando perdas de qualidade com um recovery LoRA não fundido.
prerouter
Uma cabeça neural leve por camada que prevê as decisões de roteamento da camada N+1 com um token de antecedência usando o estado oculto da camada N e o histórico recente de roteamento.
prediction-as-routing (previsão como roteamento)
O princípio de design onde o conjunto de especialistas previsto pelo prerouter é executado diretamente como o roteamento real da camada no momento da decodificação, eliminando o descarte de tokens em tempo de execução ou penalidades por falhas de previsão.
recovery LoRA (LoRA de recuperação)
Um adaptador de baixo posto (low-rank adapter) treinado via destilação no caminho pré-roteado do aluno e executado como um ramo paralelo não fundido para compensar a quantização int4 e os erros de aproximação de roteamento.
staged decode (decodificação preparada)
Um modo de execução de especialistas usando double buffering de slots fixos, onde os índices dos especialistas são mapeados através de uma tabela de slots na GPU para evitar alocações por passo.
incremental sticky-slot stack (incr_stack)
Um mecanismo que atualiza tensores empilhados de especialistas persistentes in-place, reescrevendo apenas os slots de especialistas modificados por passo em vez de remontar todos os tensores de especialistas.
unmerged delta (delta não fundido)
A execução de um adaptador LoRA em paralelo com pesos base quantizados em vez de fundi-los nos pesos, prevenindo a perda de adaptação detalhada durante a requantização.
memory wall (barreira de memória)
A disparidade entre a taxa de transferência do processador e a largura de banda/capacidade da DRAM, que no atendimento local de LLMs é dividida entre o estado dinâmico da KV-cache e o armazenamento estático dos pesos do modelo.

Perguntas

Por que o Edge0 usa previsão como roteamento em vez de tratar as previsões como dicas (hints)?

Tratar previsões como dicas exige mecanismos de fallback em tempo de execução ou descarte de tokens quando as previsões falham. Consumir a previsão diretamente como o roteamento garante que o conjunto de especialistas preparado sempre corresponda ao conjunto roteado, transferindo o custo da aproximação para o treinamento offline, onde a destilação recupera a qualidade.

Por que o recovery LoRA é servido de forma não fundida em vez de ser fundido nos pesos de 4 bits?

Os deltas de peso do LoRA têm um RMS de cerca de 10^-3, o que é menor que o tamanho do passo da quantização de 4 bits. Fundir e requantizar apaga a maior parte do efeito do adaptador, deixando apenas 18% de retenção no nível de logits, enquanto um delta paralelo não fundido mantém 100% de fidelidade.

Por que o Edge0 prevê um token à frente em vez de prever dentro do mesmo token?

Prever dentro do mesmo token exige descargas no pipeline (flushes) da GPU por camada que levam de 30 a 100 ms por passo — tempo superior ao carregamento que se tenta ocultar. Antecipar por um token completo permite que todas as camadas preparadas sejam previstas em uma única descarga em lote, fornecendo um passo inteiro de decodificação de tempo de computação para ocultar as operações de I/O do SSD.

Como o Edge0 decodifica mais rápido do que uma linha de base totalmente em memória em uma máquina de 24 GB?

Um modelo de 19,5 GB totalmente residente consome 18,2 GiB de RAM, deixando quase nenhum espaço para o sistema operacional e a KV cache, o que causa um severo paging de memória pelo SO e derruba a decodificação para 3,9 tok/s. O Edge0 transmite especialistas a partir do SSD dentro de ~2,9 GiB de pico de memória ativa, evitando totalmente a pressão sobre a memória do sistema operacional e rodando a 20,4 tok/s.

A explicação desta página foi escrita por IA a partir do artigo e pode conter erros. Consulte o artigo para os detalhes.

Ler com tradução e IA