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

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)
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
👀 See Also

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.

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.

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.

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.