A quantização Q8_0 do llama.cpp obtém uma aceleração de 3,1x em GPUs Intel Arc com a correção de reordenação SYCL.

✍️ OpenClawRadar📅 Publicado: April 16, 2026🔗 Source
A quantização Q8_0 do llama.cpp obtém uma aceleração de 3,1x em GPUs Intel Arc com a correção de reordenação SYCL.
Ad

Uma correção de otimização de desempenho para o backend SYCL do llama.cpp oferece melhorias significativas de velocidade para modelos quantizados Q8_0 executando em GPUs Intel Arc. A correção aborda um problema de padrão de acesso à memória que estava limitando o desempenho do Q8_0 a apenas 21% da largura de banda teórica.

Problema de Desempenho e Causa Raiz

Em uma GPU Intel Arc Pro B70 com 32 GB de GDDR6 e largura de banda de 608 GB/s, os modelos Q8_0 estavam rodando a apenas 4,88 tokens/segundo, enquanto o Q4_K_M alcançava 20,56 tokens/segundo. Essa diferença de desempenho de 4x era inesperada, já que o Q8_0 tem apenas 1,7x mais dados que o Q4_K_M.

Após descartar pressão na VRAM, problemas de driver e falhas no backend, a investigação rastreou o gargalo para o caminho de despacho do kernel SYCL do llama.cpp. O backend SYCL inclui uma otimização de "reordenação" que separa os fatores de escala de quantização dos dados de peso para acesso coalescido à memória da GPU. Essa otimização foi implementada para as quantizações Q4_0, Q4_K e Q6_K, mas o Q8_0 nunca foi adicionado à estrutura de reordenação.

Os blocos de 34 bytes do Q8_0 (que não são potências de 2) tornaram o layout não reordenado particularmente ineficiente para o desempenho do cache da GPU.

Ad

A Correção e os Resultados

A solução envolveu aproximadamente 200 linhas de código estendendo a estrutura de reordenação existente para suportar o Q8_0. O bug mais crítico foi um problema de uma única linha: os tensores Q8_0 não estavam recebendo a struct "extra" alocada durante a inicialização do buffer, fazendo com que a flag de reordenação nunca fosse definida.

Resultados no Qwen3.5-27B (Intel Arc Pro B70):

  • Q8_0 antes: 4,88 t/s (21% de largura de banda)
  • Q8_0 depois: 15,24 t/s (66% de largura de banda) - 3,1x mais rápido
  • Q4_K_M: 20,12 t/s (inalterado)
  • Q6_K: 13,83 t/s (sem reordenação)

Com essa correção, o Q8_0 agora supera o Q6_K (15,24 vs 13,83 tokens/segundo) enquanto oferece qualidade superior às quantizações de menor bit.

Validação e Implementação

Antes de implementar a correção, a equipe aplicou um patch binário no IPEX-LLM de código fechado da Intel para rodar na GPU B70 (que não é oficialmente suportada pelo seu ID de dispositivo PCI). Seus kernels Q8_0 otimizados alcançaram 61% de largura de banda, confirmando que o problema era solucionável. A implementação de código aberto no llama.cpp alcança 66% de largura de banda.

A correção foi submetida como um pull request para o repositório do llama.cpp.

📖 Read the full source: r/LocalLLaMA

Ad

👀 See Also