Что нового в llama.cpp: три оптимизации для ускорения инференса
Свежие обновления llama.cpp принесли три значимых оптимизации, нацеленных на разные архитектуры и платформы. Для владельцев NVIDIA GPU добавлена поддержка чанкованного SSD matmul в контексте Mamba-2 - на модели Nemotron-Nano-9B-v2 это даёт до 22% ускорения предзаполнения (prefill) при больших batch-размерах на RTX 6000 Pro MaxQ. Пользователи Apple Silicon получили FWHT-ядро в Metal-бэкенде, которое на DeepSeek-V4-Flash-UD-IQ2_XXS и M4 Max добавляет до 3.5% скорости как на префилле, так и на генерации токенов. Третье нововведение - экспериментальная поддержка схемы спекулятивного декодирования Eagle3 для моделей серии GPT-OSS. Разберём каждую оптимизацию детально: как работает, на каких конфигурациях даёт прирост и где ждать подвоха.
Эти изменения продолжают тренд на расширение возможностей llama.cpp. Ранее мы разбирали ускорение prompt processing под ROCm до 15% и сравнивали движок с TensorSharp в тестах на CUDA и Vulkan. Теперь фокус сместился на Mamba-2 и Apple Silicon.
SSD-матрицы для Mamba-2: ускорение prefill до 22% на NVIDIA GPU
Архитектура Mamba-2 использует State Space Duality (SSD) - математический фреймворк, объединяющий state space models и линейное внимание. Ключевая операция здесь - матричное умножение, которое при определённых условиях можно разбить на чанки. Новая оптимизация в llama.cpp реализует чанкованный SSD matmul, что снижает накладные расходы на prefill-стадии инференса.
Как работает чанкованный SSD matmul в контексте Mamba-2
SSD-фреймворк в Mamba-2 опирается на дуальность: state space модели можно представить как линейное внимание и наоборот. Это позволяет переформулировать вычисления через матричные умножения, которые хорошо ложатся на GPU. Чанкование разбивает большое матричное умножение на блоки меньшего размера. Выигрыш возникает за счёт лучшей утилизации кэша и снижения задержек при работе с памятью - особенно заметно при обработке длинных последовательностей и больших batch-размеров.
Для разработчиков, работающих с Mamba-2 моделями, это прямой апгрейд: не нужно менять код или конфигурацию, достаточно собрать llama.cpp с актуальными флагами и использовать модель в формате GGUF. Оптимизация включается автоматически при обнаружении архитектуры Mamba-2.
Практический выигрыш: тесты на Nemotron-Nano-9B-v2 и RTX 6000 Pro MaxQ
Цифры подтверждают эффективность подхода. На связке Nemotron-Nano-9B-v2 и RTX 6000 Pro MaxQ прирост скорости prefill достигает 22% при больших batch-размерах. Это существенно для сценариев с массовой обработкой запросов - например, RAG-системы, пакетная классификация документов, обработка логов. На малых batch-размерах эффект снижается, что ожидаемо: накладные расходы на чанкование начинают перевешивать выигрыш от оптимизации памяти.
Модель Nemotron-Nano-9B-v2 - представитель семейства Mamba-2, и результаты на ней репрезентативны для всей линейки. Если вы используете другие Mamba-2 модели, прирост будет аналогичным при схожих условиях: большие batch, достаточный объём VRAM, архитектура NVIDIA с поддержкой эффективного матричного умножения.
FWHT-ядро для Metal: ускорение до 3.5% на Apple Silicon
Fast Walsh-Hadamard Transform (FWHT) - это быстрое ортогональное преобразование, которое применяется в некоторых архитектурах для эффективного смешивания информации. В контексте llama.cpp FWHT-ядро встроено в Metal-бэкенд для ускорения операций, связанных с обработкой KV-кэша.
Роль FWHT в оптимизации инференса
FWHT заменяет более тяжёлые матричные операции на быстрые преобразования с линейной сложностью. В нейросетях это используется для аппроксимации внимания и сжатия представлений. Интеграция в Metal даёт прирост за счёт того, что FWHT-ядро пишет данные напрямую в тайловую память GPU Apple Silicon, минуя лишние копирования. Это не революция, а аккуратная инженерная оптимизация - 3.5% могут стать решающими при долгих сессиях генерации или потоковой обработке запросов.
Apple Silicon долгое время оставался в роли догоняющего в задачах LLM-инференса. Мы уже разбирали, почему Apple M5 не раскрывает свой потенциал из-за отсутствия полноценной поддержки w4a8. FWHT-ядро - шаг в сторону более полного использования возможностей чипов M-серии.
Результаты на DeepSeek-V4-Flash-UD-IQ2_XXS и M4 Max
Тесты на DeepSeek-V4-Flash-UD-IQ2_XXS с чипом M4 Max показывают ускорение до 3.5% как на prefill, так и на генерации токенов. Важный нюанс: эффект зависит от типа квантизации KV-кэша. На агрессивных схемах квантования прирост ближе к верхней границе, на более консервативных - скромнее. Рекомендуется протестировать несколько конфигураций KV-кэша на своей модели, чтобы найти оптимальный баланс между точностью и скоростью.
DeepSeek-V4-Flash - модель с высокими требованиями к памяти и вычислительным ресурсам. То, что FWHT-ядро даёт измеримый прирост даже на такой тяжёлой модели, говорит о качестве оптимизации. Для менее требовательных моделей эффект может быть менее заметным в абсолютных цифрах, но процентное соотношение сохранится.
Экспериментальная поддержка Eagle3: спекулятивное декодирование для GPT-OSS
Спекулятивное декодирование - техника ускорения генерации: маленькая «драфт-модель» быстро генерирует несколько токенов, а основная модель проверяет их параллельно. Eagle3 - одна из схем такого декодирования, ориентированная на модели семейства GPT-OSS.
Поддержка в llama.cpp помечена как экспериментальная. Это значит, что возможны нестабильности, падения производительности на отдельных конфигурациях и несовместимость с некоторыми квантизациями. Для продакшен-среды пока не рекомендуется, но для исследований и тестов - отличная возможность оценить потенциал спекулятивного декодирования на локальном железе. Если вы работаете с GPT-OSS моделями и готовы к экспериментам, сборка с флагом Eagle3 даст представление о возможном ускорении генерации в будущих стабильных версиях.
Ограничения и практические рекомендации
Каждая оптимизация имеет границы применимости. Игнорирование этих границ приводит к разочарованию: «обновление не дало прироста». Разберём, когда не стоит ждать чуда.
Когда SSD matmul не даст прироста
Чанкованный SSD matmul заточен под большие batch-размеры. На одиночных запросах или batch из 1-2 примеров прирост будет минимальным или нулевым. Вторая критическая точка - архитектура модели: если модель не использует Mamba-2, оптимизация просто не применяется. Проверьте архитектуру перед тем, как рассчитывать на ускорение. Третье ограничение - GPU. Хотя RTX 6000 Pro MaxQ показала отличные результаты, на более старых картах с меньшей пропускной способностью памяти эффект может быть скромнее.
FWHT-ядро: влияние квантизации KV-кэша
FWHT-ядро чувствительно к типу квантизации KV-кэша. На FP16 эффект минимален, на Q8_0 и Q4_0 - заметнее. Это связано с тем, что FWHT эффективнее работает с квантованными представлениями, где накладные расходы на преобразование данных выше. Практическая рекомендация: запустите бенчмарк на своей модели с разными типами KV-кэша, замерьте prefill и decode отдельно. Выберите конфигурацию, которая даёт наилучший компромисс между точностью и скоростью. Не гонитесь за 3.5% любой ценой - на некоторых моделях прирост может быть 1-2%, и это нормально.
Eagle3 пока остаётся экспериментальной функцией. Если стабильность критична, дождитесь стабильного релиза. Для тестовых стендов и исследовательских задач - включайте и делитесь результатами с сообществом.
Эти оптимизации - часть более широкого движения по повышению эффективности локального инференса. Мы уже видели, как запуск DeepSeek-V4-Flash на одном B300 выявил неожиданные узкие места в MoE-ядрах, и как интеграция Minimax M3 в llama.cpp открыла доступ к локальному инференсу без облаков. Каждое обновление расширяет пространство возможного для разработчиков и исследователей, работающих на собственном железе.