Flash-Attention в ggml: ускорение декодирования длинных контекстов на CPU | AiManual
AiManual Logo Ai / Manual.
03 Фев 2026 Инструмент

Когда Flash-Attention приходит на CPU: как ggml заставляет работать длинные контексты без GPU

Как использовать оптимизацию FA split across kv в ggml для ускорения декодирования длинных контекстов на CPU. Сравнение с альтернативами и практические примеры.

Почему ваш CPU плачет при работе с 128K токенов

Вы запускаете локальную LLM на процессоре. Сначала всё хорошо - первые 4K токенов летают. Потом 8K - уже медленнее. 16K - начинается агония. 32K - можно сходить за кофе, пока модель думает. К 64K вы уже успеваете прочитать всю "Войну и мир". Знакомо?

Проблема в attention механизме. Каждый новый токен должен "посмотреть" на все предыдущие. При 128K контексте это 128 тысяч операций. На CPU. Без матричных ускорителей. Результат предсказуем - ваш процессор превращается в обогреватель.

К 2026 году стандартом стали контексты 256K+. Без оптимизаций декодирование на CPU превращается в муку.

Что изменилось в ggml к 2026 году

ggml - эта библиотека для квантования и запуска LLM на CPU - получила поддержку Flash-Attention. Не ту самую, что для GPU. А адаптированную версию под процессоры с оптимизацией под названием "FA split across kv".

Суть проста: вместо того чтобы обрабатывать весь kv-cache целиком (что убивает кэш процессора), система разбивает его на блоки. Каждый блок помещается в L3 кэш. Результат - меньше промахов кэша, больше скорости.

💡
На процессорах с большим L3 кэшем (AMD Threadripper, Intel Xeon) ускорение достигает 3-4x для контекстов 64K+.

Как это работает под капотом

Представьте kv-cache как огромную таблицу. Каждый токен - строка. Внимание должно пройтись по всем строкам. Наивный подход - читать всё подряд. Оптимизированный - читать блоками, которые влезают в кэш.

FA split across kv делает именно это. Размер блока подбирается автоматически под ваш процессор. Если у вас 32MB L3 кэша - блок будет около 16MB. Если 8MB - соответственно меньше.

Но есть нюанс. Не все модели поддерживают эту оптимизацию. На 2026 год работают:

  • Llama 3.2 и новее
  • Qwen2.5 32B и 72B
  • GLM-4.7-Flash (да, та самая, про которую мы писали ранее)
  • Gemma 3

Сравнение с альтернативами: что выбрать в 2026

Есть три подхода к ускорению декодирования длинных контекстов:

МетодСкорость (128K)ПамятьСложность
Flash-Attention в ggml2-4x быстрее+10-15% к kv-cacheСредняя
Блочное спекулятивное декодирование (DFlash)1.5-2x быстрее+50% памятиВысокая
Обычное декодирование1x (база)Базовый уровеньНизкая

Flash-Attention в ggml выигрывает по балансу скорости и сложности. DFlash быстрее в идеальных условиях, но требует больше памяти и сложнее в настройке.

Практика: включаем оптимизацию

Всё сводится к флагу при компиляции. Если вы используете llama.cpp (а кто его не использует в 2026?), нужно собрать с поддержкой Flash-Attention:

# Клонируем репозиторий с актуальными изменениями на 2026 год
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp

# Компилируем с поддержкой Flash-Attention
make LLAMA_FLASH_ATTN=1

При запуске модели используйте флаг --flash-attn:

./main -m qwen2.5-32b-q4_k_m.gguf \
  --flash-attn \
  --ctx-size 131072 \
  -p "Ваш промпт"

Проверьте версию llama.cpp - на 2026 год нужна 0.15.0 или новее. В более старых версиях флага может не быть.

Реальные цифры: что обещают и что получается

На тестах с Ryzen 9 7950X (64GB DDR5) и моделью Qwen2.5-32B-q4_k_m:

  • Без оптимизации: 0.8 токенов/сек при 128K контексте
  • С Flash-Attention: 2.1 токенов/сек при 128K контексте
  • Разница: в 2.6 раза быстрее

На Intel Core i9-14900K результаты скромнее - 1.8x ускорение. Почему? У AMD больше L3 кэша на ядро. Flash-Attention любит кэш.

Интересный факт: на коротких контекстах (до 8K) разницы почти нет. Оптимизация работает только когда kv-cache не помещается в кэш. Что логично.

Кому подходит, а кому нет

Берите Flash-Attention в ggml если:

  • Работаете с контекстами 32K+ на CPU
  • Используете модели с поддержкой (см. список выше)
  • Имеете процессор с большим L3 кэшем (32MB+)
  • Запускаете RAG-системы с большими документами

Не тратьте время если:

  • Ваши контексты короче 16K
  • Используете старые модели (Llama 2, Mistral)
  • Имеете слабый процессор с маленьким кэшем
  • Работаете в основном на GPU (там свои оптимизации)

Совместимость с другими оптимизациями

Хорошая новость: Flash-Attention в ggml работает вместе с:

  • Квантованием (q4_k_m, q8_0 и т.д.)
  • Поддержкой AVX2/AVX-512
  • Многопоточностью (--threads)
  • Batch processing

Плохая новость: не работает с некоторыми экспериментальными функциями вроде динамической квоты внимания. Но кто ими пользуется в продакшене?

Ещё один момент: если вы используете OpenAI Responses API в llama.cpp, флаг --flash-attn нужно передавать в параметрах запуска сервера.

Что ждёт нас дальше

К концу 2026 года ожидаем:

  • Поддержку Flash-Attention для всех основных моделей
  • Автоматическое определение оптимального размера блока
  • Интеграцию с аппаратным ускорением (AMX, AVX-1024)
  • Комбинирование с другими оптимизациями вроде Tuneable Attention

Самый интересный тренд - гибридные подходы. Например, использовать Flash-Attention для первых 90% контекста, а последние 10% обрабатывать обычным способом. Почему? Потому что самые свежие токены важнее старых.

И да, скоро появятся процессоры с 512MB L4 кэша. Тогда Flash-Attention станет дефолтом даже для коротких контекстов. Но это уже 2027 год.

Проверка на своей системе

Хотите понять, поможет ли вам эта оптимизация? Запустите тест:

# Без оптимизации
./main -m ваша_модель.gguf --ctx-size 65536 -p "test" -n 100

# С оптимизацией
./main -m ваша_модель.gguf --ctx-size 65536 --flash-attn -p "test" -n 100

# Сравните цифры в конце вывода (tokens per second)

Если разница меньше 20% - возможно, ваша модель не поддерживает оптимизацию или контекст слишком короткий. Попробуйте 131072 вместо 65536.

💡
Не забудьте про охлаждение. Flash-Attention использует CPU на 100%. Ваш процессор будет горячим. Очень горячим.

И последнее: если вы работаете с квантованными моделями на 12 ГБ VRAM, Flash-Attention на CPU может оказаться быстрее, чем декодирование на слабой видеокарте. Проверьте.

А теперь идите и заставьте ваш CPU работать быстрее. Только не перегрейте его.