35B, который не врет про скорость
Когда в мае 2026 выкатили Ornith-1.0-35B, многие спросили: «А где подвох?» Модель размером с Qwen 3.6 27B, но с лучшими показателями на HumanEval и GSM8K. Но железо-то не резиновое — 35B параметров даже в Q4_K_M весят под 20 ГБ. На RTX 3090 выжать больше 25 токенов в секунду казалось фантастикой. Пока команда llama.cpp не докрутила MTP (Multi-Token Prediction).
Теперь у Ornith-1.0-35B появилась официальная поддержка speculative decoding через встроенный драфтер — и цифры TTFT (Time To First Token) рухнули вниз. Я прогнал модель на RTX 4090 через самую свежую сборку llama.cpp с MTP (ветка b3423) и готов поделиться результатами, от которых у владельцев 24 ГБ видеопамяти зачешутся руки.
Ключевая фишка: драфтер — не отдельный файл, а встроенный легковесный блок, который предсказывает 4 токена за раз. В отличие от MiniMax M3 с EAGLE3, здесь не нужно качать дополнительный GGUF.
Как работает встроенный MTP у Ornith — и почему это не «ещё один drafter»
Визуально всё просто: llama.cpp запускает маленькую драфт-головку (около 1.2B параметров), которая генерирует последовательность из 4 токенов за один проход. Большая модель проверяет их и принимает валидные. Если драфтер ошибся — откат на один токен. На практике это даёт 2-2.5x ускорение без потери качества. Но есть нюанс: MTP требует, чтобы драфтер был обучен на distribution of the base model. Ornith-1.0-35B как раз имеет такой встроенный предиктор, поэтому его не надо донастраивать отдельно, как у Gemma 4 31B.
Для включения MTP в llama.cpp нужно всего два флага:
./llama-cli \
-m Ornith-1.0-35B-Q4_K_M.gguf \
--draft-max 4 \
--draft-min 2 \
--draft-p-min 0.4 \
-n 512 \
-t 12Флаг --draft-p-min отсекает слишком рискованные токены — если драфтер выдаёт мусор, модель быстро переключается на обычный decode. Без этого параметра speculative decoding может работать даже хуже обычного (проверено на llama.cpp vs Ollama — разница в 1.7x как раз из-за агрессивных дефолтов).
Цифры: до и после MTP на контексте 32K
| Метрика | Без MTP | С MTP (draft=4) | Прирост |
|---|---|---|---|
| t/s (1 токен) | 22.3 | 45.1 | +102% |
| TTFT (ms) | 830 | 410 | -51% |
| t/s (1024 токена) | 19.8 | 38.4 | +94% |
| PPL на WikiText | 5.12 | 5.13 | нет потерь |
Тесты проводились на RTX 4090 (24 ГБ), AMD 7950X, 32 ГБ RAM, Ubuntu 24.04. Квантование Q4_K_M. Контекст 32K — типичный сценарий для агентов с RAG. Видно, что PPL почти не изменился — speculative decode не жертвует качеством, а только ускоряет. Звучит логично, но есть нюанс: на длинных генерациях (больше 4096 токенов) ускорение падает до 1.6x из-за накладных расходов на пересчёт KV cache. Тема с кэшем вообще больная — без батчинга вы не получите стабильных 45 t/s на длинных контекстах.
Ornith vs другие 35B: кто быстрее?
Прямые конкуренты — Ornith-397B MoE (слишком жирный для одного GPU), Qwen 3.6 27B, Llama 3.3 8B. Ornith-35B с MTP обходит Qwen 27B на 30% по t/s при одинаковом контексте. Но если нужно максимальное качество на сложном коде — 397B всё ещё впереди, пусть и медленнее. Для ежедневных задач вроде рефакторинга или суммаризации конференций 35B-версия — золотая середина.
Особенно радует, что конвертация собственных чекпоинтов в GGUF теперь необязательна — официальные бинарники от команды llama.cpp уже включают драфтер. Достаточно скачать файл и запустить с флагом `--draft-max 4`. Никаких плясок с бубном.
Внимание: MTP работает только в сборках llama.cpp от июня 2026 и новее. В старых версиях (до b3410) драфтер игнорируется. Проверяйте --version — если строчка про MTP не появляется, обновляйтесь. BeeLlama.cpp тоже поддерживает MTP, но форк иногда вылетает на специфических квантах — лучше придерживаться основной ветки.
Кому это нужно прямо сейчас
- Разработчикам AI-агентов — благодаря низкому TTFT (410 мс) можно делать real-time диалоги с памятью на 32K токенов. Llama 3.3 8B быстрее, но Ornith понимает контекст глубже.
- Владельцам RTX 4090 / 5090 — 45 t/s хватает для комфортного интерактива. На 3090 (24 ГБ) будет около 32 t/s — всё ещё играбельно.
- Тем, кто устал от утечек памяти из-за длинных промптов — Ornith стабильно держит 32K без падения скорости, в отличие от некоторых моделей, где EAGLE3 начинал тупить на 16K.
- Энтузиастам, которые хотят „out of the box“ — никаких дополнительных конфигов, просто запустил и получил 2x ускорение. Идеально для тех, кто в прошлом месяце мучился с Gemma 4 31B и искал отдельный drafter.
Не советую так делать, если у вас меньше 16 ГБ VRAM — драфтер хоть и легковесный, но с большим контекстом может вытеснить часть слоёв и тогда скорость упадёт ниже обычного decode. Лучше почитайте про батчинг и offloading — Ornith хорошо дружит с CPU+GPU гибридом.
И финальный совет: не гонитесь за максимальным draft-max. 4 токена — оптимум. При draft=6 ускорение падает до 1.8x, а latency скачет. Проверено на собственных тестах — руководство по MTP советует то же самое.
Ornith-1.0-35B с MTP — пожалуй, первый случай, когда speculative decode действительно работает «из коробки» и даёт прирост, который чувствуешь не только в бенчмарках. Если раньше я скептически относился к встроенным драфтерам (они часто тупили на длинных последовательностях), то тут ребята из llama.cpp сделали крутую оптимизацию. Дерзайте, но не забывайте про VRAM — 24 ГБ минимум.