Что произошло: пул-реквест #28770 в llama.cpp
В репозитории ggml-org/llama.cpp открыт пул-реквест #28770 с заголовком «CUDA: enable sparse fa for qwen4». Автор изменения - участник под ником am17an. Пул-реквест включает разреженный Flash Attention (sparse fa) для моделей Qwen4 при работе через CUDA. Страница PR и обсуждение доступны по ссылке.
В описании изменение подано фразой «Another day, another Qwen Flash Next speedup», то есть как очередное ускорение для архитектуры Qwen Flash Next. Дальше главная оговорка, которую легко пропустить при чтении громкого заголовка: это пул-реквест. Изменение ещё не в основной ветке и не в релизах, поэтому стабильная сборка llama.cpp эту функциональность может не содержать.
Суть на уровне идеи: разреженное внимание снижает вычислительную нагрузку на GPU при обработке длинных контекстов. Какой прирост это даёт в реальных tokens/s и на каких картах, в источниках не указано, так что конкретных цифр ниже не будет. Разберём, что известно точно и что пока остаётся открытым вопросом.
Кто такой am17an и почему это важно
am17an указан автором пул-реквеста #28770. Ни биографии, ни списка других его изменений в llama.cpp в доступных материалах нет, поэтому приписывать ему дополнительный вклад не стоит.
Значение имеет другое: изменения в llama.cpp попадают в проект через публичные пул-реквесты с ревью сообщества. Заголовок PR описывает намерение автора, а не гарантированный результат. Мейнтейнеры могут попросить правки, изменение может быть переписано или отклонено. Практический вывод простой: следить стоит за статусом PR и за тем, что реально попало в merge, а не за формулировкой заголовка.
Почему это называют очередным ускорением Qwen Flash Next
Фраза «Another day, another Qwen Flash Next speedup» задаёт контекст: работа над скоростью этой архитектуры в llama.cpp идёт не первый раз, и #28770 подаётся как очередной шаг в этой серии. Какие именно изменения были раньше, в источниках не перечислено, поэтому список предыдущих PR приводить не будем.
Названия стоит разделять. В материалах AI-Manual отдельно разбиралось, что такое Qwen3.8-Flash-Next и почему это не полноценный Qwen4. В PR фигурирует обозначение «qwen4» в связке с архитектурой Qwen Flash Next. Как эти имена соотносятся в коде llama.cpp, из доступных данных не видно, поэтому дальше речь идёт о том, что заявлено в заголовке PR.
Разреженный Flash Attention и обычный: в чём разница
Почему длинный контекст - это дорого
Внимание связывает каждый токен с другими токенами последовательности. Чем длиннее контекст, тем больше вычислений и тем больше памяти нужно под KV-кэш и промежуточные буферы. На одной видеокарте это упирается в объём VRAM и в пропускную способность памяти.
Картина знакома каждому, кто гонял длинные промпты локально: на коротких запросах генерация идёт бодро, а с ростом контекста скорость падает. Длинный prefill и раздутый KV-кэш - те участки, где внимание становится узким местом. Именно там появляются решения вроде Flash Attention.
Что даёт разреженность на практике
Flash Attention считает внимание блоками, не выгружая промежуточные результаты целиком в глобальную память: это экономит память и ускоряет работу на GPU. Разреженный вариант (sparse fa) отбрасывает часть связей между токенами, за счёт чего снижается вычислительная нагрузка.
По описанию PR #28770 разреженное внимание снижает нагрузку на GPU при обработке длинных контекстов. Точных данных о величине эффекта нет. Нет и деталей о том, как sparse FA в этом изменении соотносится с обычным Flash Attention: какие паттерны разреженности применяются, как это влияет на точность вычислений, затрагивает ли изменение prefill, decode или оба этапа.
На практике выигрыш зависит от модели и её квантизации, версии CUDA и драйвера, длины контекста и типа задачи. Список поддерживаемых видеокарт NVIDIA в материалах не приводится.
Кому и когда это пригодится при локальном запуске Qwen4
Изменение относится к CUDA-бэкенду. Это значит NVIDIA-видеокарты и сборка llama.cpp с поддержкой CUDA. На CPU, Metal, Vulkan и прочих бэкендах sparse fa из этого PR не заработает.
Сценарии, где эффект наиболее вероятен: длинные документы в промпте, чаты с накоплением истории, RAG-пайплайны, куда попадает много исходного текста, агентные циклы с растущим контекстом. Общий признак один: большая часть времени уходит на обработку внимания при длинной последовательности токенов.
Требования к железу и окружению
Нужна NVIDIA GPU с поддержкой CUDA и сборка llama.cpp под CUDA. Конкретные модели карт, минимальные версии CUDA и драйвера в источниках не указаны, поэтому называть «безопасный» список карт было бы выдумкой. Для длинных контекстов объём VRAM остаётся критичным и с разреженным вниманием: KV-кэш никуда не исчезает, разреженность снижает вычислительную нагрузку, а не требования к памяти под кэш целиком.
Когда выигрыша может не быть
Если вы работаете с короткими промптами и контекстом в несколько тысяч токенов, экономия от разреженности может не перекрыть накладные расходы, а разница окажется в пределах погрешности замеров. На не-CUDA бэкендах изменения нет вовсе. Пока PR открыт, функциональности нет и в стабильных сборках: обновиться «прямо сейчас» не получится.
Ограничения и открытые вопросы
Перечислим прямо, чего в материалах нет. Нет данных о приросте производительности, списка поддерживаемых видеокарт NVIDIA, требований к версиям CUDA и драйвера, конкретных версий Qwen4. Нет описания изменений кода. Нет информации о том, как разреженность влияет на качество ответов. Неизвестно, будет ли PR принят в текущем виде.
Влияние на качество: что известно и что нет
Разреженное внимание по своей логике отбрасывает часть связей между токенами, поэтому компромисс по качеству в принципе возможен. Для PR #28770 таких замеров нет, значит утверждать нельзя ни то, что качество страдает, ни то, что оно сохраняется. Проверка остаётся за пользователем: один и тот же набор промптов прогоняется на сборке с изменением и без, ответы сравниваются вручную или через автоматические метрики.
Статус PR: что значит «открыт»
Открытый пул-реквест - предложение изменений, которое проходит обсуждение и ревью. До момента мержа функциональности нет ни в основной ветке, ни в релизных сборках, а сам код может измениться. Статус и ход обсуждения удобно отслеживать на странице PR. Полезно читать комментарии мейнтейнеров: обычно именно там появляются замечания по реализации и упоминания ограничений.
Как проверить и включить, если изменение доступно
Готового рецепта с флагами в источниках нет, и придумывать названия параметров командной строки мы не будем. Общая логика такая: собрать llama.cpp с CUDA из ветки PR или дождаться мержа, запустить Qwen4 с длинным контекстом, снять метрики, повторить то же самое на сборке без изменения, сравнить результаты. Точные ключи запуска стоит искать в документации проекта и в обсуждении PR: там же обычно появляются рабочие примеры.
Что сравнивать при проверке
- скорость генерации в tokens/s на длинных ответах;
- время до первого токена (TTFT), особенно при длинном промпте;
- время обработки промпта (prefill) отдельно от генерации;
- потребление VRAM при разной длине контекста;
- стабильность: не растёт ли время на токен по мере удлинения контекста.
Условия должны совпадать: та же модель и квантизация, тот же промпт, та же длина контекста, те же параметры сэмплинга, одинаковый прогрев перед замером. Иначе разница будет отражать изменения в настройках, а не эффект от sparse fa. Пример аккуратной постановки замеров на одном железе разбирался в материале про ускорение MoE-инференса в llama.cpp на RTX 4080: там показано, как отделять эффект патчей от шума и где искать регрессии.
Что это значит для экосистемы llama.cpp и Qwen
Появление sparse FA для Qwen4 на CUDA продолжает линию работы над архитектурой Qwen Flash Next. Проект регулярно получает изменения, нацеленные на скорость локального инференса. Например, CUDA graph для MTP draft в пул-реквесте #28549 решает другую задачу из той же области: убирает накладные расходы при спекулятивном декодировании.
Ускорения внимания не сводятся к CUDA. В сообществе есть и не-NVIDIA направления: форк llama.cpp для Radeon VII, MI50 и MI60 с вариантами Flash Attention под gfx906. Это другой бэкенд и другой набор ограничений, но логика похожа: снизить цену внимания на длинном контексте.
Далеко идущих выводов о будущих версиях делать не стоит. Итог зависит от того, будет ли PR принят, какие правки внесёт ревью и как изменение покажет себя на реальных картах.
Итог: стоит ли следить за пул-реквестом #28770
Если вы запускаете Qwen4 на NVIDIA через llama.cpp и часто работаете с длинным контекстом, изменение потенциально полезно: разреженный Flash Attention бьёт именно по цене внимания на длинных последовательностях. При этом подтверждённых цифр нет, влияние на качество не измерено, а код ещё проходит ревью.
Если контексты короткие или у вас не CUDA, спешить некуда. Практичный план: держать PR в закладках, дождаться мержа, после обновления прогнать свой обычный набор промптов на длинном контексте и сравнить tokens/s, TTFT и потребление VRAM с предыдущей сборкой. Так вы получите ответ для своей задачи, а не общие обещания из заголовка.