Развертывание больших языковых моделей на локальной инфраструктуре ставит инженерные команды перед сложным выбором: раздувать бюджеты на оборудование или мириться с высокой задержкой генерации. Спекулятивное декодирование решает эту проблему: модель генерирует черновые токены заранее, а затем основная модель проверяет их пакетным проходом. Однако классические архитектуры многотокенного прогнозирования (MTP) используют фиксированную длину черновика. Такая жесткая стратегия впустую тратит вычислительные ресурсы GPU на откат проверок каждый раз, когда энтропия токенов резко возрастает.

Чтобы устранить эту неэффективность, разработчик stew675 открыл пулреквест #27210 в репозитории ggml-org/llama.cpp, добавив адаптивную глубину черновика с помощью флага `--spec-type draft-mtp-adaptive`. Механизм основан на конечном автомате, который связывает счетчик успешных шагов с накопителем штрафных баллов за ошибки.

«Большая глубина сбрасывается быстро (полный промах добавляет N), малая удерживается стабильно, а на минимальном пороге штрафы не накапливаются вовсе».

Как отметил разработчик stew675 в описании пулреквеста, глубина черновика увеличивается на один шаг после серии циклов, в которых целевая модель приняла все предсказанные токены. Напротив, каждый отклоненный токен добавляет `(N - acceptance)` к штрафному счетчику, снижая глубину черновика при превышении лимита. На базовом уровне — по умолчанию равном 3 благодаря флагу `--spec-draft-n-min-adpative` — накопление штрафов полностью прекращается, а на более глубоких уровнях пороги динамически снижаются, ускоряя генерацию при точных прогнозах.

Тесты производительности на коде и обычном тексте

Эмпирические тесты на модели Qwen3.8-27B Q8_0 с использованием двух GPU Radeon AI PRO R9700 показали заметный прирост пропускной способности на повторяющихся и структурированных задачах. Тестовая среда работала с контекстным окном 8192 токена, 8 потоками исполнения, температурой 0.6, top-k 20, top-p 0.95 и min-p 0.001.

При автодополнении кода на C++ объемом от 750 до 800 токенов статическая глубина черновика 2 выдавала 67,2 токена в секунду, а статическая глубина 3 достигала 78,8 токена в секунду. Включение адаптивного режима с параметром `--spec-draft-n-max 12` и минимальным порогом 2 подняло среднюю скорость до 86,4 токена в секунду. При этом рабочая глубина удерживалась на уровне 10–11 токенов, несмотря на средний уровень подтверждения черновиков в 58,4%. Повышение базового минимума до 3 обеспечило скорость 85,3 токена в секунду при глубине от 9 до 12 токенов.

На менее предсказуемых задачах по генерации прозы результаты оказались скромнее: статическая глубина 3 зафиксировала производительность на уровне 56,4 токена в секунду. Для технических руководителей, поддерживающих локальную инфраструктуру, пулреквест #27210 наглядно показывает, что алгоритмическая оптимизация способна повысить корпоративную производительность и снизить совокупную стоимость владения без закупки новых ускорителей.

Опенсорс ИИЛокальный ИИБольшие языковые моделиПроизводительностьСнижение затрат