Le projet llama.cpp a introduit le support de l'attention flash clairsemée (FA) pour le backend Metal, ciblant spécifiquement la phase de préremplissage de l'inférence du modèle. Cette mise à jour inclut un nouveau noyau qui compacte les entrées de masque fini en listes d'index par ligne et étend le noyau vectoriel FA avec une récupération d'index clairsemée optionnelle.
- L'implémentation ajoute un port côté hôte pour activer le chemin clairsemé lorsque n_kv_max est supérieur à 0 et que d'autres conditions sont remplies.
- Une correction a été appliquée pour corriger les bugs d'adressage de ligne dans les noyaux d'attention flash clairsemée qui causaient précédemment des échecs dans les cas multi-lignes.
- Des techniques d'optimisation ont été ajoutées pour effectuer une compaction d'index clairsemé en un seul passage, évitant les lectures redondantes de masque en conservant les positions finies dans les registres par thread.
- Des cas de test et des benchmarks de performance ont été ajoutés pour valider les tailles de tête, les types de quantification et divers paramètres de configuration.
Ce changement améliore l'efficacité pour les utilisateurs de Metal en réduisant le trafic mémoire pendant la phase de préremplissage lorsque des indices d'attention clairsemée sont utilisés.