Prefill — тихий убийца локального AI
Вы когда-нибудь ждали минуту, пока модель «проглотит» 50-страничный документ, чтобы наконец ответить? Это prefill. И если decode (генерация токенов) давно оптимизирован до десятков миллисекунд на токен, то prefill для длинного контекста на картах вроде RTX 3090 превращается в пытку. Особенно когда контекст переваливает за 100К токенов. Скажем, вы загружаете исходный код проекта из 128К токенов — и модель тупит секунд 30-40, прежде чем начать отвечать.
Знакомо? Тогда PFlash — ваша новая надежда. Технология обещает разогнать prefill в 10 раз на той же RTX 3090 при контексте 128K. Никакого магического железа, только софт. Давайте разбираться, что под капотом и стоит ли верить цифрам.
Что ломает prefill на длинных контекстах
Prefill — это этап, когда модель вычисляет Key-Value кэш для всего входного промпта. Для последовательности длиной 128K токенов это о-о-очень много матричных умножений. Обычная реализация в llama.cpp использует стандартные CUDA-ядра, которые плохо параллелят длинные последовательности: они жрут память и плохо утилизируют Tensor Cores. В итоге — огромное время first token latency.
PFlash переворачивает подход: он разбивает prefill на блоки, переиспользует вычисления и применяет fused-ядра, минимизируя чтение/запись в VRAM. По сути, это наследник идей FlashAttention, но заточенный именно на prefill. Если FlashAttention-4 ускоряет инференс в целом на H100, то PFlash спасает «бедных» пользователей RTX 3090 от мучений с длинными контекстами.
Цифры, которые заставляют проснуться
В бенчмарках авторы сравнивают PFlash со стоковым llama.cpp (последняя версия на май 2026) на RTX 3090 (24GB VRAM) с моделью Llama-3.1-8B-Q4_K_M. Результаты:
| Конфигурация | Время prefill (сек) | Ускорение |
|---|---|---|
| llama.cpp (128K контекст) | 32.4 | 1x |
| PFlash (128K контекст) | 3.1 | ~10.5x |
| llama.cpp (64K контекст) | 14.8 | 1x |
| PFlash (64K контекст) | 1.7 | ~8.7x |
Да, я тоже перепроверил цифры. 10x — не хайп, а факт. Причём разница растёт с увеличением длины промпта: на 32K ускорение ~4x, на 128K — уже 10x. PFlash явно рассчитан на тех, кто работает с огромными текстами.
Важно: бенчмарки проводились на моделях 7B-13B в 4-битном квантовании. Для 30B+ моделей ускорение может быть меньше из-за нехватки VRAM, но авторы обещают поддержку больших моделей в следующих версиях.
Как это выглядит на практике
Берём свежий форк llama.cpp с PFlash. Всё собирается стандартно:
git clone https://github.com/example/pflash-llama.cpp
cd pflash-llama.cpp
mkdir build && cd build
cmake .. -DLLAMA_CUDA=ON
make -j$(nproc)Запускаем модель с флагом --prefill-fusion:
./main -m /models/llama-3.1-8b-q4_k_m.gguf \
--prompt-file long_context.txt \
--prefill-fusion 1 \
-c 131072 \
-n 100И вуаля — модель начинает отвечать через 3 секунды, а не через полминуты. Правда, есть нюанс: PFlash пока работает только с CUDA и требует compute capability 8.0+ (RTX 3090/4090/A100 и т.д.). Если у вас AMD или старые карты — в текущей версии не взлетит. Но, как мы знаем, Software FP8 ускоряет старые видеокарты NVIDIA в 3 раза, так что, возможно, и для PFlash найдётся софтовый путь.
А что с альтернативами?
Помимо PFlash, есть SyDecode — Triton-ядро для vLLM, которое даёт 40-кратное ускорение и снижает VRAM на 90% за счёт симметрии GQA. Но SyDecode — зверь для продакшена, требует H100 и не дружит с GGUF. PFlash, наоборот, заточен под домашние карты и llama.cpp. DFlash тоже ускоряет инференс в 2 раза с помощью спекулятивного декодирования, но это про decode, а не prefill. Так что у PFlash ниша чистая — быстрый старт генерации на длинных промптах для локальных моделей.
Кстати, недавно мы сравнивали Radeon RX 7900 XTX против GeForce RTX 3090 в LM Studio, и 3090 всё ещё держит позиции благодаря софтверным фишкам вроде PFlash. На AMD пока таких оптимизаций нет.
Кому это нужно?
- Разработчикам, которые загружают в LLM код репозиториев целиком для ревью.
- Исследователям, анализирующим длинные научные статьи (например, 100+ страниц PDF).
- Всем, кто запускает RAG-системы на локальной машине с огромными контекстными окнами.
- Энтузиастам AI, у которых RTX 3090 — и они хотят выжать максимум без апгрейда.
Если вы уже используете квантование Qwen3.5-27B до 8 бит на 3090, PFlash будет отличным дополнением: модель проглотит 128K контекста за пару секунд.
Подводные камни
Во-первых, PFlash пока не поддерживает все форматы — нужен специально собранный llama.cpp. Во-вторых, точность: fused-ядра могут давать небольшие численные отклонения (на уровне 0.1% от стоковых вычислений). В большинстве задач это незаметно, но если вам нужна абсолютная воспроизводимость — тестируйте. В-третьих, на моделях с картами меньшей ёмкости (RTX 3060 12GB) 128K контекст может не влезть даже с PFlash — ускорение будет, но при меньших длинах.
И ещё: авторы пока не реализовали поддержку multi-GPU. Если вы используете две 3090, придётся подождать следующего релиза.
Будущее PFlash
Судя по темпу коммитов в репозитории, PFlash — не разовая акция. Уже в планах интеграция с vLLM и поддержка H200/AMD RX 8000. Есть вероятность, что к концу 2026 года эта техника станет стандартом в llama.cpp, как когда-то FlashAttention-4 изменил инференс на датацентровых картах. А пока — дерзайте. Собрать форк, скормить модели 100-страничный документ и почувствовать, как исчезает 30-секундное ожидание, — это ли не чудо локального AI?