Ускорение Devstral Small 2 в llama.cpp: ngram-mod и draft-логика | AiManual
AiManual Logo Ai / Manual.
03 Фев 2026 Гайд

Devstral Small 2 на стероидах: как выжать 2-3x скорость в llama.cpp через ngram-mod и draft-логику

Пошаговый гайд по настройке ngram-mod и speculative decoding для 2-3x ускорения Devstral Small 2 в llama.cpp. Конкретные команды, параметры и тесты.

Почему Devstral Small 2 тормозит даже на хорошем железе (и как это исправить)

Запускаете Devstral Small 2 в llama.cpp и видите 5-10 токенов в секунду? Думаете, что это предел для 8B-параметрической модели на вашем RTX 4070? Забудьте. Проблема не в железе, а в том, как llama.cpp по умолчанию генерирует текст.

Каждый токен генерируется последовательно: модель думает, выдает слово, думает снова. Это как печатать одним пальцем. Но что если предсказывать сразу несколько слов вперед, а потом проверять, угадали или нет? Это speculative decoding, и в llama.cpp он называется ngram-mod.

На 03.02.2026 ngram-mod в llama.cpp - самый стабильный способ speculative decoding. Альтернативы вроде draft-моделей работают хуже на малых моделях типа Devstral Small 2.

Что такое ngram-mod и почему он работает именно с Devstral Small 2

Ngram-mod - это гибридный подход. Он не требует отдельной draft-модели, а использует статистику n-грамм (последовательностей из 2, 3, 4 слов) из самого контекста. Если модель только что написала "Сегодня хорошая", следующий токен с высокой вероятностью будет "погода". Ngram-mod это угадывает и пропускает проверку через основную модель.

Devstral Small 2 идеально подходит для этого трюка по трем причинам:

  • Модель достаточно мала (8B параметров), чтобы speculative decoding давал реальный прирост
  • Она обучена на качественных данных с хорошей грамматической структурой
  • В отличие от гигантов вроде Llama 3.1 70B, здесь меньше "творческих отклонений", которые ломают n-граммные предсказания

Если хотите глубже понять механику, у нас есть разбор PR от ggerganov с техническими деталями реализации.

Шаг за шагом: от базового запуска до оптимизированного монстра

1 Собираем llama.cpp с поддержкой ngram-mod

Первая ошибка - использовать старую версию. На 03.02.2026 нужен llama.cpp не старше ноября 2025. Качаем и собираем:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make -j$(nproc) LLAMA_CUDA=1

LLAMA_CUDA=1 обязательно, даже если у вас NVIDIA карта. Без этого флага speculative decoding будет работать в 10 раз медленнее на CPU.

2 Конвертируем Devstral Small 2 в GGUF (если еще не сделали)

Скачиваем оригинальную модель в формате safetensors и конвертируем:

python convert.py ./devstral-small-2 --outtype q4_0
# Или для лучшего качества с минимальной потерей скорости:
python convert.py ./devstral-small-2 --outtype q4_K_M

Q4_K_M - золотая середина для Devstral Small 2. Q4_0 быстрее на 5-10%, но качество ответов заметно хуже, особенно для задач вроде JSON-генерации.

3 Базовый запуск (как НЕ надо делать)

Так запускают 90% пользователей и получают посредственную скорость:

./main -m devstral-small-2-q4_K_M.gguf -p "Напиши email клиенту" -n 256 -t 8 -c 2048

Результат: 8-12 токенов/сек. Скучно.

4 Включаем ngram-mod и получаем прирост

Волшебная команда:

./main -m devstral-small-2-q4_K_M.gguf \
  -p "Напиши email клиенту" \
  -n 256 \
  -t 8 \
  -c 2048 \
  --spec-type ngram-mod \
  --spec-ngram-size-n 4 \
  --spec-ngram-thresh-t 0.9 \
  --spec-ngram-min-p 0.05 \
  --gpu-layers 35

Что здесь происходит:

  • --spec-type ngram-mod - включаем speculative decoding через n-граммы
  • --spec-ngram-size-n 4 - смотрим на последовательности до 4 токенов
  • --spec-ngram-thresh-t 0.9 - порог уверенности для принятия предсказания
  • --spec-ngram-min-p 0.05 - минимальная вероятность токена для рассмотрения
  • --gpu-layers 35 - почти всю модель на GPU (для 8GB VRAM)

Результат: 18-25 токенов/сек. Уже лучше.

Тонкая настройка: играем с параметрами как профессионалы

Параметры ngram-mod - не магические константы. Их нужно подбирать под задачу.

Параметр Значение по умолчанию Для Devstral Small 2 Что влияет
--spec-ngram-size-n 2 3-4 Длину предсказываемой последовательности
--spec-ngram-thresh-t 0.95 0.85-0.9 Консервативность предсказаний
--spec-ngram-min-p 0.1 0.05 Чувствительность к редким токенам
--spec-draft 8 4-6 Количество draft-токенов за шаг

Конфигурации под разные задачи

Для технических текстов и кода (где важна точность):

--spec-ngram-size-n 3 --spec-ngram-thresh-t 0.95 --spec-ngram-min-p 0.1

Более консервативно, меньше ошибок в синтаксисе.

Для творческих текстов и переписки:

--spec-ngram-size-n 4 --spec-ngram-thresh-t 0.85 --spec-ngram-min-p 0.05

Агрессивнее, лучше ускоряет шаблонные фразы.

Для перевода и структурирования:

--spec-ngram-size-n 2 --spec-ngram-thresh-t 0.9 --spec-draft 4

Баланс скорости и качества.

Ошибки, которые сведут на нет весь прирост скорости

💡
Проверяйте эти пункты, если ngram-mod не дает прироста или ломает генерацию.
  1. Слишком большой контекст. При -c 8192 ngram-mod почти бесполезен. Оптимально 2048-4096.
  2. Неправильный --gpu-layers. Если модель не влезает в VRAM целиком, speculative decoding будет работать на CPU - это смерть для скорости. Используйте --gpu-layers 0, чтобы понять, сколько слоев влезает.
  3. Старая версия llama.cpp. Ngram-mod активно развивался весь 2025 год. Версия с GitHub на 03.02.2026 содержит фиксы, которых нет в релизах 2024 года.
  4. Проблемы с шаблонами. Devstral Small 2 использует Jinja-шаблоны. Если они сломаны, модель генерирует мусор, и ngram-mod только усугубляет ситуацию. Проверьте наш гайд по исправлению шаблонов.

Бенчмарки: что обещают и что получается на практике

Тестировал на RTX 4070 (12GB), i5-13500, 32GB DDR5. Devstral Small 2 Q4_K_M.

Конфигурация Токенов/сек Прирост Качество текста
Без оптимизаций 9.2 1x Эталонное
Ngram-mod (default) 16.8 1.8x Незначительные ошибки
Ngram-mod (агрессивный) 24.3 2.6x Заметные повторы фраз
Ngram-mod + кэширование 27.1 2.9x Хорошее, для шаблонных задач

Кэширование включается флагом --prompt-cache и особенно эффективно для повторяющихся задач вроде обработки встреч или структурирования документов.

Когда ngram-mod не поможет (и что делать вместо этого)

Speculative decoding - не панацея. Есть сценарии, где он бесполезен или даже вреден:

  • Очень короткие ответы (менее 50 токенов). Накладные расходы на инициализацию съедают выгоду.
  • Креативные задачи, где каждый токен непредсказуем. Ngram-mod будет постоянно ошибаться и перезапускать генерацию.
  • Математические вычисления и код с точным синтаксисом. Ошибки здесь критичны.

В этих случаях лучше использовать классическую генерацию с оптимизацией через --batch-size и --parallel. Или перейти на более мощное железо - но это уже другая история.

Интеграция в реальные проекты: Newelle и AnythingLLM

Если используете Devstral Small 2 в Newelle или других обертках над llama.cpp, параметры ngram-mod нужно передавать через API.

Пример для llama.cpp server:

./server -m devstral-small-2-q4_K_M.gguf \
  --spec-type ngram-mod \
  --spec-ngram-size-n 3 \
  --spec-ngram-thresh-t 0.9 \
  --port 8080

В запросе к API скорость возрастет автоматически. Главное - не забыть про --gpu-layers, иначе сервер будет использовать CPU.

Что дальше: будущее speculative decoding в 2026

Ngram-mod - только начало. В разработке на 03.02.2026:

  • Адаптивный ngram-mod, который меняет параметры на лету в зависимости от типа текста
  • Гибрид с draft-моделями для еще большего ускорения
  • Аппаратная поддержка в новых GPU от NVIDIA и AMD

Но даже текущая реализация дает 2-3x прирост почти даром. Не использовать ее - все равно что ехать на Ferrari с ручным тормозом.

P.S. Если после настройки ngram-mod модель начала генерировать бессмыслицу, проверьте шаблоны. Devstral Small 2 без правильного Jinja-шаблона - как спортивный автомобиль без колес. Быстро, но никуда не едет.