Proyek llama.cpp merilis versi b10532, memperkenalkan tahap pra-pemrosesan pada backend Metal yang mendekuantisasi cache Key-Value (KV) terkuantisasi ke F16 sebelum mengeksekusi Flash Attention.

  • Kernel baru mendekuantisasi tensor KV Q8_0 menjadi buffer scratch F16 yang kontigu, memungkinkan penggunaan kernel Flash Attention F16 yang ada alih-alih dekuantisasi dalam kernel.
  • Dukungan diperluas untuk mencakup semua jenis KV terkuantisasi yang didukung oleh Metal, termasuk Q4_0, Q4_1, Q5_0, dan Q5_1.
  • Untuk model berbasis MLA di mana V adalah tampilan K, implementasi melewatkan dekuantisasi V yang redundan dan membaca V dari buffer F16 K.
  • Verifikasi pada M2 Ultra menunjukkan bahwa perplexity untuk Qwen2.5-0.5B dengan KV q8_0 cocok tepat dengan referensi F16 (PPL 1.0008).

Perubahan ini memungkinkan eksekusi Flash Attention yang efisien pada perangkat Metal dengan memanfaatkan buffer F16 kontigu untuk cache KV terkuantisasi, memastikan kesetaraan akurasi dengan implementasi F16 standar.