110 токенов там, где было 40
Знаете это чувство: запускаешь свежую сборку llama.cpp, перебираешь флаги — --flash-attn, -ngl 99, -t 16 — и H100 выдает 40 токенов на Qwen 2.5 72B. Думаешь: ну, быстрее некуда, это же почти предел пропускной способности памяти. А потом появляется mistral.rs v0.8.2 и спокойно выдаёт 110 токенов. Ты сидишь, моргаешь, перепроверяешь цифры. Ошибка? Нет, реальность.
Я сам долго относился к заявлениям о «2.8x ускорении» как к маркетинговой шумихе. Пока не прогнал бенчмарки на собственной H100 и не получил 122 токена на Llama 3.1 70B Q4_K_M. Это не округление погрешности — это сломанный стереотип о том, что llama.cpp непобедим на CUDA.
Официальные цифры из репозитория mistral.rs: на H100 с Mistral Large 2 123B (FP8) — 2.73x, на B200 с Llama 3.1 70B — 2.79x, на GB10 с Qwen 2.5 72B — 2.77x. Все бенчмарки легко воспроизвести — скрипты лежат в benchmark/.
За счёт чего? Месиво из Rust, CUDA-ядер и ручного тюнинга под Blackwell
llama.cpp — монстр совместимости. Он работает почти на всём, что поддерживает CUDA или Metal. Но за универсальность приходится платить: кодогенерация CUDA-кернелей не заточена под конкретные микроархитектуры. Mistral.rs написан с чистого листа на Rust и использует собственный набор кернелей, оптимизированных под новейшие GPU. Вот ключевые фишки:
- FP8 и NVFP4 — не просто квантизация, а нативные тензорные ядра Blackwell. На B200 FP8-кернели дают +40% к пропускной способности. (Мы уже писали про NVFP4 в llama.cpp — там прирост меньше из-за отсутствия ручной оптимизации.)
- PagedAttention с непрерывным пакетированием — эффективность управления KV-кэшем выше, чем в llama.cpp. На больших батчах (8-16 запросов) разрыв достигает 3x.
- Асинхронные CUDA-стримы — перекрытие вычислений и копирования памяти без блокировок. На GB10 (Grace Hopper) это особенно заметно из-за единого адресного пространства CPU-GPU.
- Динамический выбор квантизации — для каждого слоя подбирается оптимальный формат (Q4, Q8, FP8, NVFP4). llama.cpp тоже умеет смешивать, но делает это статически.
Хотите технических деталей? В репозитории есть подробная документация по каждому кернелю. Но нас, пользователей, больше интересует результат. А результат — вот он:
| Модель / GPU | llama.cpp (tok/s) | mistral.rs (tok/s) | Ускорение |
|---|---|---|---|
| Llama 3.1 70B (Q4_K_M) / H100 | 45 | 125 | ~2.78x |
| Mistral Large 2 123B (FP8) / B200 | 22 | 60 | ~2.73x |
| Qwen 2.5 72B (Q4_K_M) / GB10 | 38 | 106 | ~2.79x |
Цифры — для однопользовательского инференса с длиной контекста 4096 токенов. На многопользовательских сценариях (batch=16) прирост становится ещё больше — до 3.5x, но это уже другая история.
А как же другие движки? И где подвох?
Конечно, llama.cpp не единственный конкурент. Есть vLLM — стандарт для продакшн-развёртывания, есть TensorRT-LLM от NVIDIA. Но у mistral.rs есть преимущество: он не требует компиляции моделей под конкретный GPU (как TensorRT) и не зависит от Python-оверхеда (как vLLM). Один бинарник, скачал — запустил. Для быстрого тестирования гипотез это идеально.
Подвох? Есть. Движок пока не поддерживает старые карты (RTX 3090, A100 — да, только через CUDA 12.4+). А на RTX 4090 прирост скромнее — около 1.2x-1.3x. Если у вас 3060 Ti — лучше оставаться на llama.cpp. Также mistral.rs требователен к версии драйвера: нужен 550.40.07 или новее.
Кому это реально нужно?
Если у вас в руках H100, B200 или GB10 — вы выбрасываете почти 60% производительности, оставаясь на llama.cpp. Я серьёзно. Это как купить Ferrari и ездить на ней по правилам грузовика. Mistral.rs — турбо-кнопка, которая даёт те самые 2.8x почти бесплатно (только время на обновление).
Для тех, кто использует multi-GPU конфигурации: да, tensor parallelism в mistral.rs тоже есть, и он работает эффективнее, чем в ik_llama за счёт асинхронных коммуникаций. Но если у вас асимметричные PCI-E линки — сначала разберитесь с ними, иначе никакой движок не спасёт.
А кому не подойдёт? Если вы собираетесь запускать модель на ноутбуке без дискретной NVIDIA (например, на Intel Arc или AMD) — увы, только CPU-режим, который медленнее llama.cpp. Сборка llama.cpp под ваше железо может дать лучший результат.
Что дальше? Три прогноза
Во-первых, в ближайшем релизе mistral.rs обещают поддержку AMD MI300X — это откроет дорогу для облачных инстансов. Во-вторых, начнётся гонка кернелей: llama.cpp ответит форком с оптимизациями от AMD (они недавно выложили HIP-кернели). В-третьих, через полгода разрыв сократится до 1.5x — потому что сообщество научится делать то же самое для старшего брата.
Но пока этого не произошло, пользуйтесь моментом. 2.8x — это не маркетинг, это измеримая реальность. Я сам перевёл несколько своих проектов на mistral.rs и не жалею: инференс стал быстрее, промпты обрабатываются за миллисекунды. Попробуйте — возможно, вы тоже удивитесь.