Как ускорить ответ локальной LLM: чтение ввода заранее
Как ускорить ответ локальной LLM: чтение ввода заранее

Как ускорить ответ локальной LLM: чтение ввода заранее

Локальную LLM ускоряют не только квантизацией: часть задержки можно убрать, заставив модель считать контекст, пока вы ещё печатаете промпт. Свежий пример такого подхода — MAFDET, open-source приложение (Apache-2.0) поверх llama.cpp, которое на GPU с 6 ГБ памяти сократило ожидание первого слова с 12 до 3 секунд.

Почему локальная LLM молчит 10+ секунд перед первым словом

Задержка складывается из двух фаз: обработка промпта (prefill) и генерация токенов. Reasoning-модели добавляют к этому блок «размышлений», который вы читаете как пустой экран.

На средней видеокарте prefill занимает основную долю ожидания: вы нажали Enter — и GPU только начинает считать KV-кэш по вашему тексту. Всё время, пока вы набирали запрос, видеокарта простаивала. Именно этот простой MAFDET и пытается занять.

Важно разделять: ускорение здесь не от «более умной» модели и не от смены квантизации, а от переноса уже нужных вычислений в то время, когда пользователь ещё не закончил ввод.

Что делает MAFDET: чтение ввода заранее

MAFDET заранее считает KV-кэш по тексту, который вы набираете, и к моменту Enter основная часть prefill уже готова. Это надстройка над llama.cpp, а не отдельный движок инференса.

Заявлены две функции во время набора:

  • Reads ahead: KV-кэш следует за вашим текстом по мере ввода — с опечатками, правками в середине и вставками из буфера обмена.
  • Подготовка к генерации: к нажатию Enter модель уже прогрета по контексту, поэтому первый токен появляется быстрее.

Название отсылает к египетской богине-кошке Мафдет, «бегунье», которая била змей и скорпионов до того, как они успевали атаковать, — метафора работы на опережение.

Сколько это экономит: 12 секунд против 3

На GPU с 6 ГБ памяти ожидание первого слова сократилось с 12 до 3 секунд. Это единственная цифра в исходных материалах, и она относится к конкретной конфигурации — не стоит переносить её на любую модель и любое железо.

Что влияет на выигрыш в вашем случае:

  • Длина промпта. Чем больше текста вы набираете, тем больше работы успевает сделать prefill заранее.
  • Скорость набора. Если вы вставляете готовый промпт одним движением, читать вперёд почти нечего.
  • Правки и вставки. Механизм заявлен устойчивым к опечаткам и правкам в середине — но именно они создают дополнительную работу по пересчёту кэша.
  • Модель и квантизация. Тяжёлая reasoning-модель на 6 ГБ всё равно останется медленной в генерации; экономия касается старта, а не скорости вывода токенов.

Практический вывод: если ваша боль — «нажал Enter и смотрю в пустоту», метод бьёт в цель. Если боль — медленная генерация длинного ответа, читайте как выбрать локальную или облачную модель по бенчмаркам.

Кому это нужно и чем отличается от альтернатив

Нужно тем, кто работает с локальной моделью интерактивно и упирается в задержку старта, а не в качество ответа. В первую очередь — владельцам GPU среднего класса на 6–12 ГБ.

Отличия от привычных способов ускорения:

  • Квантизация и меньшая модель снижают стоимость каждого токена, но не убирают простой GPU во время вашего набора.
  • Кэширование промптов в API-инструментах работает с повторяющимися запросами, а не с текстом, который ещё печатается.
  • Speculative decoding ускоряет генерацию, а MAFDET — фазу до неё.

Ограничение: подход привязан к llama.cpp и к сценарию, где промпт набирается вручную. Для батчевых задач и скриптов выигрыша не будет.

Больше разборов по ИИ и автоматизации — в канале @il_chum

Как начать

Начать стоит с проверки, что узкое место у вас именно в prefill, а не в генерации. Дальше — поставить MAFDET и сравнить замеры до и после на своём железе.

Шаги:

  1. Замерьте текущее время до первого токена на типичном промпте — 5–10 прогонов, чтобы понять разброс.
  2. Возьмите MAFDET из репозитория проекта (лицензия Apache-2.0, работает поверх llama.cpp).
  3. Прогоните тот же набор промптов и сравните цифры.
  4. Отдельно проверьте сценарии с правками в середине текста и вставками — они самые чувствительные для чтения вперёд.

Если параллельно хочется снизить расход контекста и память агента, пригодится материал как сократить расход контекста AI-агента.

Частые вопросы

Ускоряет ли MAFDET генерацию токенов? Нет. Он занимает время набора промпта вычислением KV-кэша, то есть сокращает ожидание перед первым словом, а не скорость самого ответа.

Сработает ли это на GPU с 6 ГБ? Именно на такой конфигурации получен замер: 12 секунд ожидания сократились до 3. Но цифра зависит от длины промпта, модели и скорости набора.

Нужно ли переписывать промпты под этот подход? Нет. Механизм заявлен устойчивым к опечаткам, правкам в середине и вставкам — он следует за текстом по мере ввода.


Больше разборов по ИИ и автоматизации — в канале: @il_chum