Проект llama.cpp добавил поддержку разреженного flash-внимания (FA) для бэкенда Metal, ориентированную на фазу префилла при выводе модели. Это обновление включает новое ядро, которое сжимает конечные записи маски в списки индексов по строкам и расширяет векторное ядро FA за счёт опционального сбора разреженных индексов.

  • Реализация добавляет шлюз на стороне хоста для включения разреженного пути при n_kv_max > 0 и выполнении других условий.
  • Исправлена ошибка адресации строк в ядрах разреженного flash-внимания, которая ранее приводила к сбоям в случаях с несколькими строками.
  • Добавлены методы оптимизации для выполнения однопроходного сжатия разреженных индексов, избегая избыточного чтения маски за счёт хранения конечных позиций в регистрах каждого потока.
  • Добавлены тестовые случаи и бенчмарки производительности для проверки размеров голов, типов квантования и различных параметров конфигурации.

Это изменение повышает эффективность для пользователей Metal за счёт снижения трафика памяти на этапе префилла при использовании подсказок разреженного внимания.