O projeto llama.cpp introduziu suporte ao flash attention (FA) esparsa para o backend Metal, direcionado especificamente à fase de pré-carregamento da inferência do modelo. Esta atualização inclui um novo kernel que compacta entradas de máscara finita em listas de índices por linha e estende o kernel FA vetorial com coleta opcional de índices esparsos.
- A implementação adiciona uma porta no lado do host para habilitar o caminho esparsa quando n_kv_max for maior que 0 e outras condições forem atendidas.
- Uma correção foi aplicada para corrigir erros de endereçamento de linha nos kernels de flash attention esparsa que anteriormente causavam falhas em casos de múltiplas linhas.
- Técnicas de otimização foram adicionadas para realizar compactação de índices esparsos em uma única passagem, evitando leituras redundantes de máscara ao manter posições finitas em registradores por thread.
- Casos de teste e benchmarks de desempenho foram adicionados para validar tamanhos de cabeçalho, tipos de quantização e vários parâmetros de configuração.
Esta alteração melhora a eficiência para usuários do Metal ao reduzir o tráfego de memória durante a fase de pré-carregamento quando as dicas de atenção esparsa são utilizadas.