Представь, что ты деплоишь свою модель машинного обучения в пятницу вечером, а скорость генерации токенов оставляет желать лучшего. Знакомая ситуация? Проект llama.cpp, ставший стандартом де-факто для запуска больших языковых моделей на «гражданском» железе, долгое время страдал от медленной генерации на тяжелых моделях. Однако с вливанием Pull Request #22673, добавляющего поддержку Multi-Token Prediction (MTP), ситуация изменилась.
Новость вызвала настоящий фурор в сообществах r/LocalLLaMA и r/technology. Пост об обновлении собрал тысячи апвоутов, а разработчики уже делятся первыми бенчмарками, где скорость генерации токенов вырастает почти в два раза без потери качества ответов. Давайте разберемся, как это работает «под капотом», почему это важно для индустрии и как использовать MTP в своих проектах.
Что такое MTP и как оно ломает привычную парадигму
Классические LLM работают по принципу авторегрессии: модель предсказывает один следующий токен, добавляет его в контекст и заново прогоняет данные через свои слои, чтобы предсказать следующий. Это крайне неэффективно с точки зрения использования ресурсов GPU, так как пропускная способность памяти (memory bandwidth) становится бутылочным горлышком.
Multi-Token Prediction (MTP) — это архитектурное решение, при котором у модели появляются дополнительные «головы» (MTP-heads). Вместо того чтобы гадать по одному слову, модель пытается предсказать сразу цепочку из 2, 3 или даже 4 токенов за один проход (forward pass).
Механика процесса:
- Основная сеть предсказывает следующий токен.
- Параллельно MTP-слои выдают свои варианты для последующих позиций.
- В рамках одного вычислительного цикла система проверяет, насколько предсказания «голов» совпадают с логикой основной модели.
- Если предсказание верно, мы получаем сразу несколько токенов за время, которое раньше тратилось на один.
«Это напоминает предсказание ветвей (branch prediction) в современных процессорах. Мы не ждем результата, а предполагаем наиболее вероятный путь. Если угадали — получаем колоссальный буст», — комментируют пользователи в обсуждении на GitHub.
Цифры и бенчмарки: насколько всё стало быстрее?
Самые впечатляющие результаты демонстрируют модели семейства Qwen и Gemma. Согласно тестам разработчика am17an и первых пользователей llama.cpp, прирост производительности выглядит следующим образом:
- Qwen3.6-27B: Ускорение в 2.1–2.4 раза на видеокартах уровня RTX 3090/4090.
- Gemma 4: Стабильный прирост в 1.5–1.8 раза при генерации длинных текстов.
- Llama 3 (с дообученными MTP-слоями): Около 1.6x.
Важный нюанс: MTP ускоряет именно генерацию (eval), а не фазу обработки входного промпта (prompt processing). Более того, на первых итерациях PR наблюдалось небольшое замедление пре-инференса, но в финальных коммитах эту проблему практически нивелировали.
Сравнение с Speculative Decoding
До появления нативной поддержки MTP в llama.cpp часто использовали Speculative Decoding (спекулятивное декодирование). Для этого требовалась вторая, маленькая «модель-черновик» (draft model), которая работала быстро и подсовывала варианты основной модели. MTP эффективнее, потому что:
- Не нужно держать в VRAM вторую модель.
- Нет накладных расходов на синхронизацию двух разных нейросетей.
- MTP-слои обучаются вместе с основной моделью, поэтому их «интуиция» точнее.
Техническая реализация в llama.cpp
Чтобы воспользоваться преимуществом MTP, вам потребуется модель в формате GGUF, которая уже содержит в себе MTP-слои. На Hugging Face уже начали появляться такие сборки, например, Qwen3.6-27B-MTP-UD-GGUF.
Пример запуска через CLI (параметры могут меняться по мере стабилизации PR):
./llama-cpp --model Qwen3.6-27B-MTP-UD-GGUF --prompt "Write a short story about a character who learns to use MTP"И да, теперь можно сказать, что MTP — это как добавление турбонаддува в твою модель: она начинает работать быстрее, не теряя в качестве.