Проект llama.cpp выпустил версию b10532, вводя этап предварительной обработки на бэкенде Metal, который деквантует квантованные ключ-значения (KV) кэши до F16 перед выполнением Flash Attention.

  • Новый ядро деквантует тензоры Q8_0 KV в непрерывный буфер F16, позволяя использовать существующие ядра Flash Attention F16 вместо деквантования внутри ядра.
  • Поддержка была расширена для всех типов квантованных KV, поддерживаемых Metal, включая Q4_0, Q4_1, Q5_0 и Q5_1.
  • Для моделей на основе MLA, где V является представлением K, реализация пропускает избыточную деквантование V и читает V из буфера F16 K.
  • Проверка на M2 Ultra показала, что перплексия для Qwen2.5-0.5B с q8_0 KV точно совпадает со справочным значением F16 (PPL 1.0008).

Это изменение позволяет эффективно выполнять Flash Attention на устройствах Metal, используя непрерывные буферы F16 для квантованных KV кэшей, обеспечивая точность, эквивалентную стандартным реализациям F16.