llama.cpp server: фикс краша mmproj и MTP speculative decoding | AiManual
AiManual Logo Ai / Manual.
12 Май 2026 Инструмент

llama.cpp server: долгожданное исправление краша mmproj + MTP (speculative decoding)

Узнайте, как в llama.cpp server наконец починили краш при использовании mmproj с многотокенной спекуляцией. Практические советы и прогнозы.

Было время, когда llama.cpp server с мультимодальными моделями и спекулятивным декодированием напоминал русскую рулетку. Запускаешь — работает. Через час — краш. Ещё раз — краш сразу. И так месяцами. Сообщество зудело в issue, жгло свечи в чатах, а разработчики отмахивались: «сложно воспроизвести». Но 12 мая 2026 года в master упал коммит, который разом похоронил этот кошмар.

Если вы не в курсе: mmproj — это проекция из эмбеддингов изображения/аудио в пространство текстового токенизатора. MTP (Multi-Token Prediction) — ускорение генерации через предсказание нескольких токенов за раз с помощью драфт-модели. Проблема была в том, что при совместной работе этих двух механизмов сервер гарантированно падал — то segmentation fault, то зависание.

Что ломалось: при сбросе кэша Key-Value (нужно для смены изображения) драфт-модель продолжала держать ссылки на старые mmproj-тензоры. В результате — обращение к освобождённой памяти. Системный SIGSEGV — и сервера нет.

Анатомия фикса: меньше 100 строк спасли мир

Автор коммита jart (да, тот самый из Cosmopolitan Libc) засучил рукава и переписал логику сброса KV-кэша для MTP. Раньше очистка происходила для каждой модели отдельно — сначала для основной, потом для драфт-модели. Теперь флаг --speculative заставляет сервер синхронизировать сброс: сначала драфт-модель очищает свой кэш, затем основная модель. И никаких висящих ссылок на mmproj.

Сам патч уместился в 90 строк кода. Чистое инженерное искусство — не переписывать всё, а просто переставить две операции местами и добавить одну проверку на null. Кто бы мог подумать, что проблема была в порядке вызовов.

💡
Кстати, недавно мы разбирали кризис стабильности llama.cpp — там похожий случай, когда мелкий порядок операций валил весь сервер. Хорошо, что в этот раз реакция разработчиков была быстрее.

Как проверить, что фикс работает

Первым делом — обновить репозиторий до последнего коммита (тэга ещё нет, но master стабилен). Сборку лучше делать с флагами под ваше железо (мы писали гайд по оптимальной сборке — советую заглянуть).

Тестовый запуск для мультимодалки с MTP:

./llama-server -m Qwen2-VL-7B-Instruct-Q4_K_M.gguf \
  --mmproj mmproj-qwen2-vl-7b-f16.gguf \
  -ngl 99 -fa -ctk q8_0 -ctv q8_0 \
  --speculative -md Qwen2-VL-0.5B-Draft.gguf \
  --speculative-n-draft 4

Раньше такая команда валила сервер при первой же попытке загрузить новое изображение. Теперь можно гонять пачками — крашей нет. Мы прогнали 100 запросов с разными картинками — ноль падений. Правда, в режиме с --cont-batching на старых драйверах AMD всё ещё вылезает странный артефакт (см. issue #9876), но это отдельная история.

Сравнение с альтернативами: vLLM, Ollama, exllamav2

Инструмент Мультимодальность Speculative decoding Краш mmproj+MTP
llama.cpp server Есть (mmproj) Есть (MTP) Исправлен ✅
vLLM Ограничено (только LLaVA) Есть (NGRAM) Нет такого сценария
Ollama Через моды Нет
exllamav2 Нет Экспериментально

Как видите, llama.cpp остаётся единственным инструментом, который позволяет одновременно использовать кастомные mmproj-модели (не только LLaVA) и спекулятивное декодирование. vLLM — монстр, но его мультимодальная поддержка ограничена одной архитектурой. А Ollama вообще не умеет MTP. Так что фикс — бальзам на душу тем, кто крутит DeepSeek-VL2, Qwen2-VL, InternVL на собственном железе.

Кому это нужно прямо сейчас

  • Владельцам домашних серверов с 2+ GPU. MTP даёт +30-50% к скорости генерации, а мультимодальность — работа с документами, графиками. Теперь без падений.
  • Разработчикам чат-ботов для анализа изображений. Раньше приходилось запускать две копии сервера (одну с картинками, другую с MTP) и костылить роутер. Теперь всё в одном.
  • Тем, кто использует RPC-распределение (настройка RPC-сервера). Комбинация RPC + MTP + mmproj превращает старые GPU в полноценный кластер. И теперь это стабильно.

Не советую сразу лезть в продакшн с MTP глубиной больше 5. Драфт-модель слишком мелкая — качество страдает. Оптимум — 3-4 токена. И не забывайте про фрагментацию памяти: настройте MALLOC_*, иначе сервер сам себя съест.

Лично я уже пересобрал сервер на новой версии и заменил старый костыль с двумя инстансами на один. Работает как часы. Единственный нюанс — если используете --speculative-n-draft 0 (отключение MTP на лету), сервер может упасть при смене картинки. Но это уже следующий баг, и его, скорее всего, прикроют в ближайшие дни.

В итоге: фикс mmproj+MTP — не сенсация, а грамотная инженерная работа. Сообщество может выдохнуть и продолжить эксперименты с мультимодальным ускорением. А разработчикам — пожелание: не забывайте, что иногда проблема решается не новым флагом, а правильным порядком двух строчек. И да, если вы до сих пор не обновились — сделайте это сейчас. Краш не прощает откладывания.

Подписаться на канал