Flash-MoE: Executando o Modelo Qwen de 397B Parâmetros no MacBook Pro com C/Metal Puro

✍️ OpenClawRadar📅 Publicado: March 22, 2026🔗 Source
Flash-MoE: Executando o Modelo Qwen de 397B Parâmetros no MacBook Pro com C/Metal Puro
Ad

Implementação Técnica

O Flash-MoE executa o Qwen3.5-397B-A17B, um modelo Mixture-of-Experts com 397 bilhões de parâmetros e 60 camadas de transformer: 45 GatedDeltaNet (atenção linear) + 15 atenção padrão completa. Cada camada possui 512 especialistas, com K=4 ativados por token mais um especialista compartilhado. A dimensão oculta é 4096.

Benchmarks de Desempenho

  • Especialistas de 4 bits, kernel FMA: 4,36 tokens/segundo, qualidade excelente, chamada de ferramentas completa, 209GB em disco (melhor atual)
  • Especialistas de 4 bits, linha de base: 3,90 tokens/segundo, qualidade excelente
  • Especialistas de 2 bits, confiar no SO: 5,74 tokens/segundo, boa qualidade, 120GB em disco (quebra JSON/chamada de ferramentas)
  • Pico de token único de 2 bits: 7,05 tokens/segundo, boa qualidade (não adequado para uso de ferramentas)

Observação: a quantização de 2 bits produz \nome\ em vez de "nome" na saída JSON, tornando a chamada de ferramentas não confiável. A configuração de 4 bits é a de produção.

Requisitos de Hardware

  • Máquina: MacBook Pro com Apple M3 Max
  • Chip: CPU de 16 núcleos (12P + 4E), GPU de 40 núcleos, ANE de 16 núcleos
  • Memória: 48 GB unificada (~400 GB/s de largura de banda)
  • SSD: 1TB Apple Fabric, leitura sequencial de 17,5 GB/s (medida)
  • macOS: 26.2 (Darwin 25.2.0)
Ad

Técnicas Principais

Streaming de Especialistas do SSD

Os pesos dos especialistas (209GB em 4 bits) são lidos do SSD NVMe sob demanda via pread() paralelo com grupos de despacho GCD. Apenas os K=4 especialistas ativos por camada são carregados (~6,75MB cada). O cache de página do SO gerencia o cache sem necessidade de cache personalizado (princípio "Confiar no SO"), alcançando ~71% de taxa de acerto naturalmente.

Kernel de Desquantização Otimizado com FMA

O loop interno da multiplicação matriz-vetor desquantizada de 4 bits reorganiza a matemática de (nibble * escala + viés) * x para fma(nibble, escala*x, viés*x). Pré-calcular escala*x e viés*x permite que a unidade de multiplicação-soma fundida da GPU execute desquantização+multiplicação em uma instrução, resultando em desempenho 12% mais rápido que a formulação ingênua.

Shaders de Computação Metal

Os kernels Metal escritos à mão incluem:

  • Multiplicação matriz-vetor desquantizada de 4 e 2 bits (em blocos, redução SIMD, cache de entrada compartilhada, otimizada com FMA)
  • Ativação SwiGLU fundida
  • Normalização RMS (duas passagens: redução de soma de quadrados + aplicação)
  • Atenção GPU em lote (Q@K^T, softmax, scores@V) para camadas de atenção completa
  • RoPE na GPU (fundida com desintercalação de Q e normalização de K)
  • Combinação MoE + residual + porta sigmoide (kernel fundido)

Computação de Especialista na GPU Adiada

O CMD3 (passagem direta do especialista) é enviado sem espera. A GPU o executa enquanto a CPU prepara a próxima camada. A combinação + residual + normalização também estão na GPU, alimentando diretamente as projeções de atenção da próxima camada.

BLAS Acelerado para Atenção Linear

A recorrência do GatedDeltaNet usa cblas_sscal, cblas_sgemv e cblas_sger para a atualização da matriz de estado 64-head × 128×128, alcançando desempenho 64% mais rápido que o código escalar.

Desempenho do Pipeline

Média por camada em 4 bits: 4,28ms

  • CMD3(anterior) → CMD1: projeções de atenção + delta-net [1,22ms GPU]
  • CPU: liberar resultados [0,01ms CPU]
  • CMD2: o_proj + norm + roteamento + compartilhado [0,55ms GPU]
  • CPU: softmax + roteamento topK [0,003ms]
  • E/S: pread paralelo K=4 especialistas [2,41ms SSD]
  • CMD3: passagem direta do especialista + combinação + norm [0,04ms codificar, ADIADO]

Restrições de Arquitetura

No Apple Silicon, o DMA do SSD e a computação da GPU compartilham o mesmo controlador de memória e não podem ser sobrepostos de forma lucrativa. Os kernels de desquantização da GPU estão saturados de largura de banda em ~418 GiB/s. Mesmo pequenos DMAs de SSD em segundo plano causam picos de latência desproporcionais na GPU por meio da arbitragem do controlador de memória, exigindo um pipeline serial.

📖 Leia a fonte completa: HN AI Agents

Ad

👀 See Also

Nit: Um Substituo para Git em Zig Otimizado para Eficiência de Tokens para Agentes de IA
Tools

Nit: Um Substituo para Git em Zig Otimizado para Eficiência de Tokens para Agentes de IA

Nit é um substituto nativo do Git escrito em Zig que reduz o uso de tokens em 35-87% em comandos comuns como status, diff, log e show. Isso é alcançado através de padrões de saída compactos e integração direta com libgit2, eliminando a sobrecarga de subprocessos.

OpenClawRadar
HomeButler: Servidor MCP para Gerenciar Servidores Homelab pelo Claude Sem Chaves de API
Tools

HomeButler: Servidor MCP para Gerenciar Servidores Homelab pelo Claude Sem Chaves de API

HomeButler é um servidor MCP que permite ao Claude instalar, monitorar e gerenciar aplicativos auto-hospedados em servidores homelab sem exigir chaves de API. Ele é executado localmente, mantém tudo na sua rede e foi construído com Claude Code.

OpenClawRadar
Qwen2-0.5B Ajustado para Automação de Tarefas Locais com llama.cpp
Tools

Qwen2-0.5B Ajustado para Automação de Tarefas Locais com llama.cpp

Um desenvolvedor ajustou o Qwen2-0.5B para automação de tarefas usando LoRA em aproximadamente 1000 exemplos personalizados, criando um modelo GGUF de 300MB que roda localmente na CPU via llama.cpp. O modelo recebe tarefas em linguagem natural, detecta os tipos de tarefa e gera planos de execução com comandos CLI e atalhos de teclado.

OpenClawRadar
ClamBot: Agente de IA Executa Código Gerado por LLM em Sandbox WASM para Segurança
Tools

ClamBot: Agente de IA Executa Código Gerado por LLM em Sandbox WASM para Segurança

ClamBot é um framework de agente de IA que executa todo o código gerado por LLM em uma sandbox WebAssembly usando QuickJS no Wasmtime, eliminando a necessidade de chamadas exec() ou subprocess. Ele inclui um portão de aprovação para chamadas de ferramentas, cache persistente de scripts como 'clams' e suporta múltiplos provedores de LLM.

OpenClawRadar