llama.cpp b11414: разреженный Flash Attention с квантованным KV-кешем в Vulkan
На странице · 3 разделов
В предварительных сборках llama.cpp b11413–b11414 Vulkan-бэкенд научился применять разреженный Flash Attention к квантованным K/V, если маска модели и длина контекста удовлетворяют условиям включения. Раньше этот путь работал только с f16-кешем, а с квантованным кешем обрабатывалась плотная область внимания. Автор PR измерил прирост скорости генерации 15,6% на 64k в своём тесте Qwen3.8-Flash-Next с Q8_0 KV; это не универсальный результат для всех моделей и GPU. b11414 добавляет сопутствующее исправление повторного использования буфера Vulkan.
llama.cpp b11414: разреженное внимание с квантованным KV в Vulkan
5 октября 2026 года в предварительные сборки llama.cpp вошло изменение Vulkan-бэкенда для моделей с разреженным вниманием и квантованным KV-кешем. Функция появилась в b11413; следующая сборка b11414 включает её и отдельное исправление повторного использования временного буфера при операциях внимания и softmax. Это prerelease, не новый выпуск весов и не подтверждённый нами тест производительности. Код llama.cpp распространяется по MIT; лицензию конкретной модели нужно проверять отдельно. s1 s2 s3 s4 s5
Почему это важно для локального запуска
До PR #29639 разреженный путь Vulkan Flash Attention включался только для K/V в f16. Если модель использует разреженную маску, но пользователь квантует KV-кеш, движок мог считать плотное внимание по контексту вместо обращения к отобранным позициям. Автор называет Qwen3.8-Flash-Next QSA и похожие DeepSeek-схемы; это оптимизация бэкенда Vulkan для подходящих масок и конфигураций, а не ускорение любого GGUF с Q8_0. s3
Патч разрешает квантованные K/V на scalar и coopmat1 путях; coopmat2 остаётся только для f16, поскольку его операции выборки читают f16. В scalar MMQ исправлена индексация загружаемых K-блоков: теперь используется список выбранных разреженной маской позиций. Порог включения для квантованного кеша установлен на отношение длины контекста к числу оставленных ячеек не меньше 16:1 и минимум 4096 ячеек контекста. Для f16 прежний порог 2:1 сохранён, если не действует отдельное правило выбранного kernel. Поэтому на коротком контексте новая ветка может вообще не включиться. s3
Что показывают измерения автора
Автор сравнил генерацию Flash-Next с кешем Q8_0 K/V в четырёх чередующихся раундах на AMD RDNA3/RDNA4. Базовая ветка была master с заранее перенесённым исправлением PR #29591; это важно для интерпретации цифр. На глубине 64k получено 27,9 → 32,3 токена/с (+15,6%), на 128k — 20,6 → 21,4 (+4,1%), на 32k — 38,9 → 39,7 (+2,1%). Для 16–24k автор не обнаружил изменения: порог оставляет плотный путь. Обработка промпта и f16-кеш, по сообщению автора, не изменились. Это результаты автора в его условиях, а не замеры Modelium или гарантия эффекта на другом GPU и модели. s3
Отдельный PR #29591 исправляет потенциально устаревшее содержимое prealloc_y в Vulkan после Flash Attention или большого softmax перед повторным matmul. Автор приводит тесты для длинных промптов у архитектур с общим нормализованным входом внимания и FFN: четыре новых случая не проходили до исправления и проходили после. В полном Vulkan CI автор также отмечает один прежний сбой qwen3_0_6b, поэтому нельзя объявлять весь набор тестов безусловно зелёным. Исправление вошло в b11414 после b11413; для оценки нового sparse-пути разумнее брать именно более позднюю сборку. s2 s4
Практический следующий шаг
Если у вас уже есть локальный Vulkan-стек и модель с подходящей разреженной маской, скачайте официальный Vulkan-пакет b11414 для своей ОС из релиза, сохраните прежнюю сборку для отката и сравните скорость генерации на одинаковых модели, длине контекста и формате K/V. Сверьте не только токены/с, но и ответы на контрольном наборе задач: редакция эту сборку и GPU не запускала. Не переносите авторские +15,6% на короткий контекст, CUDA/Metal или любой квантованный кеш. Изменение не говорит ничего о минимальной RAM/VRAM. s2 s3
Если выбираете формат K/V, сначала прочитайте руководство по KV-кешу: здесь важен именно выбор формата и замер на вашем стенде, а не размер файла весов. s3
Источники
- ggml-org/llama.cpp: release b11413 — Предварительная сборка 11:03:39 UTC содержит PR #29639.. Получено 05.10.2026.
- ggml-org/llama.cpp: release b11414 — Предварительная сборка 11:43:51 UTC содержит PR #29591, официальный Ubuntu Vulkan пакет загружен.. Получено 05.10.2026.
- ggml-org/llama.cpp PR #29639: sparse flash attention for quantized K/V — Условия активации, код, авторские замеры и методика: Q8_0, четыре раунда, AMD RDNA3/RDNA4.. Получено 05.10.2026.
- ggml-org/llama.cpp PR #29591: stale prealloc_y reuse — Описание ошибки, новые тесты, оставшийся прежний сбой CI; патч включён в b11414.. Получено 05.10.2026.
- ggml-org/llama.cpp LICENSE at b11414 — MIT для кода llama.cpp, не для моделей пользователей.. Получено 05.10.2026.