El proyecto llama.cpp ha introducido soporte de atención flash dispersa (FA) para el backend de Metal, dirigido específicamente a la fase de prellenado de la inferencia del modelo. Esta actualización incluye un nuevo kernel que compacta las entradas de máscara finita en listas de índices por fila y extiende el kernel de FA vectorial con recolección opcional de índices dispersos.

  • La implementación añade una puerta del lado del host para habilitar la ruta dispersa cuando n_kv_max es mayor que 0 y se cumplen otras condiciones.
  • Se aplicó una corrección para solucionar errores de direccionamiento de fila en los kernels de atención flash dispersa que anteriormente causaban fallos en casos de múltiples filas.
  • Se añadieron técnicas de optimización para realizar la compactación de índices dispersos en un solo pase, evitando lecturas redundantes de máscaras al mantener las posiciones finitas en registros por hilo.
  • Se añadieron casos de prueba y benchmarks de rendimiento para validar tamaños de cabeza, tipos de cuantificación y varios parámetros de configuración.

Este cambio mejora la eficiencia para los usuarios de Metal al reducir el tráfico de memoria durante la etapa de prellenado cuando se utilizan pistas de atención dispersa.