Перейти к содержанию
modelium.
Начать с задачи
←

llama.cpp b11430: ускорение Flash Attention на Hexagon в многокерновом режиме

В prerelease-сборку llama.cpp b11430 от 5 октября вошла переработка Flash Attention и матричных операций для Hexagon NPU на Snapdragon. В режиме row-split несколько ядер теперь делят KV-головы вместо повторного чтения всего KV-кеша, когда число голов делится на число ядер. Автор замерил ускорение обработки промпта Qwen3-0.6B с 6977 до 11026 токенов/с в одном четырёхъядерном сценарии; скорость генерации этим результатом не подтверждена.

Что изменилось 5 октября

PR #29974 был слит в llama.cpp 5 октября 2026 года; тег b11430 опубликован в тот же день и помечен GitHub как prerelease. Сравнение с уже вышедшим стабильным v0.6.0 показывает один дополнительный коммит. Это изменение движка локального инференса на Hexagon NPU, не выпуск новых весов модели и не новый стабильный релиз. Исходники llama.cpp распространяются по MIT; права на конкретные веса нужно проверять отдельно. s1 s2 s3 s5

В режиме row-split раньше каждое вычислительное ядро читало все KV-головы во время Flash Attention. Теперь, если число KV-голов кратно числу ядер, ядра делят между собой головы и читают соответствующие доли KV-кеша. Иначе остаётся прежнее разбиение по блокам токенов: автор прямо приводит пример Gemma 4 с двумя KV-головами на четырёх ядрах. Переключатель GGML_HEXAGON_FA_HEAD_SPLIT включён по умолчанию; в закреплённом scripts/snapdragon/run.py его можно менять опцией --hex-fa-head-split. В том же PR переработаны подбор HMX/HVX, распределение MoE-экспертов и матричные операции для нескольких последовательностей. s1 s2 s4

Какие результаты подтверждены источником

В описании релиза приведены авторские измерения для четырёх ядер в row-split, ubatch=1024: у Qwen3-0.6B скорость обработки промпта выросла с 6977 до 11026 токенов/с, у Llama 3.2 3B — с 3717 до 5522. Для Qwen3.5 4B приведены 2739 и 2855, а для Gemma 4 MoE улучшение этого механизма не заявлено. Там же сказано, что в этих испытаниях генерация токенов не ускорилась. Это замеры разработчика, не тест Modelium, и они не задают универсальный выигрыш для любого Snapdragon или любой модели. s1

В PR отдельно приведён прогон на Galaxy S24 Ultra / Hexagon v75 для Qwen3.5 2B Q4_0: при ngl=99, шести потоках, n_ubatch=1024, Flash Attention и HTP0 результат pp1024 изменился с 1294,15 до 1436,50 токена/с, а tg128 — с 31,62 до 31,49 токена/с. Это другой эксперимент и другой знаменатель: его нельзя смешивать с числами четырёхъядерного row-split или объявлять ускорением decode. Автор не приводит здесь независимого повторения измерений. s2

Практический выбор

Если вы уже запускаете GGUF на Hexagon NPU и используете row-split, сравните стабильный v0.6.0 и экспериментальный b11430 на одной и той же модели и устройстве: отдельно замерьте обработку промпта (pp) и генерацию (tg), зафиксируйте число ядер, длину контекста, ubatch и настройки offload. Не переносите абсолютные цифры автора на свою конфигурацию. Для случая, когда число KV-голов не делится на число ядер, новый head-split автоматически уступает прежнему пути. s1 s2

В assets b11430 есть пакеты android-arm64-snapdragon и linux-arm64-snapdragon. Официальный гайд объясняет выбор Hexagon-устройства через --devices и пример запуска llama-bench на Android; сначала проверьте совместимость своего устройства и развёртывания по нему. Это prerelease: для производственного контура сохраняйте воспроизводимую предыдущую сборку и сценарий отката. s1 s4

Источники