Pular para o conteúdo
← Voltar para o Skalablog

Artigo publicado

Como auditar o Lithos Metal no Mac M5 com DSpark

Engenharia de Software

O Lithos Metal no Mac M5 promete mais de 200 tokens por segundo, mas essa é uma projeção de pico. A única rodada medida no repositório registra 43,188 ms por rodada num M5 Max de 40 núcleos, o que dá cerca de 139 tok/s. O limite físico de banda fica em torno de 38 tok/s para decodificação simples.

O que é o Lithos Metal no Mac M5 e por que o teto de 38 tok/s existe

O Lithos Metal no Mac M5 é um motor de inferência experimental para Metal, a interface de programação de GPU da Apple. Ele se propõe a decodificar modelos grandes em Macs com Apple Silicon. O teto de aproximadamente 38 tokens por segundo vem da banda de memória, não do poder de cálculo da GPU.

Os pesos são os números que o modelo aprendeu. A versão de 4 bits do Qwen 3.8 de 27 bilhões de parâmetros ocupa cerca de 16,1 GB no formato MLX. A Apple informa que o M5 Max move até 614 GB por segundo entre memória e chip, e essa é uma taxa de pico.

Uma leitura completa dos pesos ocupa aproximadamente 26 ms. Se cada token exigir uma leitura própria, o resultado fica em cerca de 38 tokens por segundo. Essa é a aritmética do próprio vídeo, não um número publicado pela Lithos.

A conta ignora o cache de chave e valor, que cresce com o prompt. A Apple também afirma que, depois do primeiro token, a banda de memória limita a geração, e não o cálculo. Você pode conferir as especificações do chip na página de suporte da fabricante: Apple Support.

O que os megakernels Metal fundem de fato e o que fica de fora

Os megakernels Metal fundem apenas o mixer de cada camada, seja o Gated DeltaNet (GDN), que mantém uma memória recorrente, seja a atenção completa. O bloco feed-forward, também chamado de MLP, continua como um kernel separado. A descrição de camada inteira num único programa não corresponde ao código publicado.

O Qwen 3.8 de 27 bilhões tem 64 camadas: 48 usam Gated DeltaNet e 16 usam atenção completa. O padrão se repete 16 vezes, com três camadas GDN seguidas de uma de atenção. Cada camada traz ainda um bloco feed-forward.

O ganho vem de manter no chip o estado recorrente e as somas parciais do softmax em precisão de 32 bits. Um kernel comum lê e escreve o estado completo a cada token. No desenho do Lithos, cada worker cuida de uma fatia das colunas e conserva essa fatia durante um bloco de entrada.

A fusão reduz bolhas de lançamento de kernel e eleva o uso da banda disponível. Ela não altera a quantidade de dados lida: os pesos continuam vindo da memória uma vez por passagem. Por isso, sozinha, a técnica apenas aproxima o motor do teto de 38 tokens por segundo.

A origem do megakernel: o teste da Hazy Research em H100

A ideia de fundir kernels não nasceu no Lithos. A Hazy Research, laboratório da Universidade Stanford, mediu o efeito em uma H100, a GPU de data center da NVIDIA, e o resultado pertence a esse experimento, não à Apple.

No teste com um modelo Llama de 1 bilhão de parâmetros, os motores vLLM e SGLang dividiam uma passagem pelo modelo em cerca de 100 pequenos programas de GPU. Cada kernel tem preparação e encerramento, e a GPU fica ociosa entre eles. Os dois motores usaram no máximo cerca de 50% da banda de memória.

Um megakernel fundido usou 78% da banda. A Hazy Research relatou cerca de 2,5 vezes a velocidade do vLLM e mais de 1,5 vez a do SGLang. Vale lembrar que esses números descrevem uma H100, e não um Mac.

O Lithos transporta a ideia para o Metal e adiciona um protocolo de progresso. Quando um worker precisa do resultado de outro, o protocolo indica quando o dado está pronto. O detalhe do experimento está no blog da Hazy Research: Hazy Research.

Como o DSpark usa decodificação especulativa para passar do teto

A decodificação especulativa com o DSpark é a única forma de ultrapassar o teto de banda, porque extrai vários tokens de uma só leitura dos pesos. Um rascunhador pequeno adivinha um bloco de tokens, e o modelo grande verifica todos eles numa passagem única.

A analogia do vídeo ajuda: os pesos são um trajeto de ônibus que precisa ser percorrido inteiro a cada viagem. A decodificação simples manda o ônibus com um passageiro. A especulativa manda vários passageiros na mesma viagem, e cada passageiro é um token.

O DSpark vem de um artigo do DeepSeek AI com a Universidade de Pequim. O rascunhador lê valores internos do modelo grande e adivinha um bloco de uma vez. Uma pequena máscara de baixo posto permite que cada palpite veja o anterior, o que evita a queda na taxa de aceitação ao longo do bloco.

O artigo também descreve uma cabeça de confiança, que estima até onde vale a pena verificar o bloco. O método está no artigo técnico: DeepSeek-V3.2-Exp.

Os números auditados: 200, 168 e 139 tok/s não provam a mesma coisa

Os números do Lithos Metal no Mac M5 se dividem em medições e projeções. A rodada medida de 43,188 ms com seis tokens aceitos dá cerca de 139 tokens por segundo. O teto de oito tokens na mesma rodada daria cerca de 185 tokens por segundo.

As figuras de 168 tokens por segundo em contexto de 128 tokens e 27 tokens por segundo em 32K são projeções. Elas partem de seis tokens aceitos por passagem de oito linhas e excluem redação, verificação, processamento de aceitação e rewind de estado. O próprio README afirma que não são taxas medidas ponta a ponta.

A figura acima de 200 tokens por segundo aparece no texto de divulgação, sem contexto, sem prompt e sem taxa de aceitação declarada. Isso explica a diferença em relação aos 168 do README.

O README ainda compara o motor com o MLX e o Ollama em contextos curtos, com razão entre 1,8 e 2 vezes. O texto chama esses valores de projeções de alvo de cálculo, e cada backend mede um trabalho diferente.

O que a auditoria aritmética revela sobre velocidade e memória

A auditoria aritmética mostra que 200 tokens por segundo exigiriam uma rodada de cerca de 30 ms com seis tokens. Só a leitura dos pesos mais a etapa de rascunho já consomem aproximadamente esse tempo no papel. O número de 200 é um pico sem contexto declarado.

O repositório também registra que os 512 tokens gerados em quatro prompts curtos coincidem com a referência BF16, um formato numérico de 16 bits. Isso indica equivalência de saída nesses quatro prompts. Não mede velocidade nem diz nada sobre outros prompts.

O README menciona ainda que a etapa padrão de fusão altera o arredondamento de números de 16 bits. O número medido e a projeção não são a mesma coisa.

O repositório não publica uma ablação, o teste de cada truque isolado. Sem ela, não dá para saber quanto do ganho vem do megakernel e quanto vem do DSpark em hardware Apple.

O custo de prefill em prompts longos e os limites de compatibilidade

O prefill é o tempo que o modelo leva para ler o prompt antes do primeiro token, e ele cresce junto com o contexto. Em um M5 Max de 40 núcleos com 48 GB, um prompt de 30 mil tokens espera cerca de 53 segundos antes da primeira resposta.

Os números do pull request mesclado em 7 de outubro de 2026 mostram essa evolução em três tamanhos: 6,6 segundos para 4K tokens (antes 13,0), 26,9 segundos para 17K tokens (antes 39,1) e 53,3 segundos para 30K tokens (antes 71,3). Você acompanha as mudanças no repositório: lithos-metal.

A compatibilidade é organizada em degraus. O M5 Max de 40 núcleos tem receitas medidas para modelos grandes. O M5 Pro tem kernels medidos apenas para modelos menores. O M5 Max de 32 núcleos e o M4 Pro caem num caminho nativo sem medição, sem fusão automática de megakernel e com o acelerador de tensores desligado.

O motor roda uma geração por vez, tem licença Apache 2.0 e exige macOS 26 ou superior. Ele suporta uma família de modelos e um modelo experimental de mistura de especialistas com cerca de 35 bilhões de parâmetros.

Comparação: Lithos Metal, MLX e Ollama no M5 Max

A escolha entre os motores depende do que você mede. A tabela reúne o que cada fonte declara e separa fato medido, projeção de fabricante e ausência de dado.

AspectoLithos MetalMLXOllama
O que éMotor experimental para Metal, com megakernels e DSparkFramework de inferência da Apple para Apple SiliconExecutador local de modelos com camada de conveniência
Evidência de velocidade43,188 ms por rodada medida; projeções de 168 e 127 tok/sNão publicada no material analisadoNão publicada no material analisado
Uso de memória16,1 GB de pesos em 4 bits, mais 1,136 GB de rascunhadorDepende da quantização escolhidaDepende do modelo e da quantização
CompatibilidadeM5 Max de 40 núcleos; fallback sem medição em outros chipsApple Silicon em geralApple Silicon em geral
Limite declaradoUma geração por vez; macOS 26 ou superiorNão se aplicaNão se aplica

A razão declarada entre 1,8 e 2 vezes frente ao MLX não tem configuração informada. Se a razão valesse sobre os 168 tokens por segundo, o MLX rodaria perto de 90 tokens por segundo em decodificação simples. Isso ficaria muito acima do teto de 38, o que sugere configurações diferentes ou outra base de comparação.

Perguntas frequentes sobre o Lithos Metal no Mac M5

  • O Lithos Metal no Mac M5 atinge 200 tokens por segundo? Não há medição publicada que comprove esse valor. O número aparece no texto de divulgação como pico, sem contexto nem taxa de aceitação. A rodada medida no repositório indica cerca de 139 tokens por segundo.
  • Qual é o teto teórico de decodificação simples? Cerca de 38 tokens por segundo, segundo a aritmética baseada em 16,1 GB de pesos e 614 GB por segundo de banda de pico. Esse valor assume uma leitura de pesos por token e ignora o cache de chave e valor.
  • O que o DSpark muda em relação a um megakernel sozinho? O megakernel aproxima o motor do teto ao reduzir bolhas de kernel, mas não passa dele. O DSpark permite verificar até oito linhas por leitura de pesos, o que é a única forma de ultrapassar o limite de banda.
  • Quais Macs têm aceleração completa? O M5 Max de 40 núcleos é o único com receitas medidas para modelos grandes. O M5 Pro tem kernels medidos para modelos menores, e o M5 Max de 32 núcleos e o M4 Pro usam um caminho nativo sem medição.
  • Quanto tempo um prompt longo espera antes da primeira resposta? Em um M5 Max de 40 núcleos com 48 GB, um prompt de 30 mil tokens levou 53,3 segundos de prefill após as mudanças de outubro de 2026. A velocidade de decodificação projetada só vale depois dessa espera.

Source video