Запуск MiniMax M3 EAGLE3 на llama.cpp: GGUF и ускорение | AiManual
AiManual Logo Ai / Manual.
23 Июн 2026 Инструмент

Запуск MiniMax M3 EAGLE3 на llama.cpp: конвертация в GGUF и ускорение инференса с помощью драфт-модели

Инструкция по конвертации драфт-модели MiniMax M3 EAGLE3 в GGUF для llama.cpp. Ускорение инференса на multi-GPU с 2.3 до 5 tk/s.

Реклама
partv2

Большие языковые модели жрут тонны VRAM. MiniMax M3 230B MoE — не исключение. На трёх 3090 он ползёт со скоростью 2.3 токена в секунду. Долго. Больно. Но есть способ взять ту же модель, добавить крошечную голову-черновик (draft model) и получить 5 tk/s. Привет, EAGLE3 и конвертация в GGUF.

Мы уже разбирали EAGLE3 в llama.cpp в общем. Теперь — конкретика: как заставить MiniMax M3 работать через speculative decoding, собрав свой GGUF с драфт-моделью. Никаких абстракций, только грязь под ногтями.

EAGLE3: не очередной speculative decoding

Обычный speculative decoding берёт маленькую модель (например, TinyLLaMA) и просит её предсказать несколько токенов. Большая модель потом проверяет черновик. Проблема: маленькая модель часто плохо согласована с большой — draft-токены отвергаются, ускорения нет.

EAGLE3 решает иначе. Вместо отдельной модели он использует draft head — дополнительный набор слоёв, которые сидят прямо на hidden states основной модели. Эти слои обучаются вместе с моделью (или дообучаются) и умеют экстраполировать следующий токен, глядя на внутренние представления. Результат — draft-гипотезы гораздо точнее, процент принятия токенов выше 80%.

Для MiniMax M3 EAGLE3 — мастхэв. Модель MoE с 230B параметров, но только часть экспертов активна на каждом шаге. Draft head добавляет всего ~1-2% к общему числу параметров, но ускоряет инференс в 2-2.5 раза на multi-GPU.

Важно: EAGLE3 требует, чтобы draft head был конвертирован в отдельный файл GGUF. В llama.ccp PR #9876 (апрель 2026) добавил поддержку загрузки drafter'а из отдельного GGUF-файла, аналогично тому, как мы настраивали MTP для Gemma 4 31B. Но у MiniMax draft head идёт вместе с моделью — его нужно извлечь.

Конвертация в GGUF: от SafeTensors к двум файлам

Допустим, у вас есть оригинальные веса MiniMax M3 (или квантованные через AutoGPTQ). Вам нужны два GGUF: основной (base model) и драфтер (eagle3 drafter). Процесс:

1 Извлечение draft head

В репозитории MiniMax есть скрипт extract_eagle3.py. Он берёт чекпоинт и вытаскивает только те слои, которые относятся к драфтеру. На выходе — папка с весами draft head в формате SafeTensors.

python extract_eagle3.py --checkpoint ./minimax_m3_230b --output ./eagle3_drafter

2 Конвертация двух моделей в GGUF

Используем convert_hf_to_gguf.py из llama.cpp. Для основной модели всё стандартно. Для драфтера нужно указать тип модели — eagle3.

python convert_hf_to_gguf.py --model ./minimax_m3_230b --outfile minimax_m3_230b.gguf --model-type minimax
python convert_hf_to_gguf.py --model ./eagle3_drafter --outfile minimax_m3_eagle3.gguf --model-type eagle3

Первый запуск convert_hf_to_gguf.py может вылететь с ошибками, если не хватает зависимостей. Установите pip install transformers torch safetensors и обновите llama.cpp до последнего коммита (ветка master). На 23 июня 2026 последняя стабильная версия llama.cpp — b4658.

3 (Опционально) Квантование драфтера

Draft head очень маленький — около 2-3 миллиарда параметров. Его можно оставить во float16, но для экономии памяти можно нафигачить Q4_K_M — качество draft'а почти не страдает.

llama-quantize --model minimax_m3_eagle3.gguf --ofile minimax_m3_eagle3_q4.gguf --type q4_0

Запуск на multi-GPU: флаги, слои, магия

Теперь у нас два GGUF-файла. Запускаем через llama-cli (или llama-server) с новыми флагами:

llama-cli \
  --model minimax_m3_230b.gguf \
  --draft-model minimax_m3_eagle3_q4.gguf \
  --draft-max-n-tokens 5 \
  --draft-min-n-tokens 3 \
  --speculative-ngram 0 \
  --gpu-layers 60 \
  --tensor-split 16,20,24 \
  --prompt "Расскажи про speculative decoding"

Ключевые моменты:

  • --draft-model — указывает на файл драфтера.
  • --draft-max-n-tokens — сколько токенов генерирует draft head за один проход (рекомендуется 5-8).
  • --tensor-split — распределение слоёв между GPU. Для трёх 3090 (24GB каждая) я ставил 16,20,24 — подгонял, чтобы влезало без переполнения.
  • --speculative-ngram 0 — отключаем ngram-декодинг, оставляем только EAGLE3.

С этой конфигурацией на трёх 3090 (суммарно 72GB VRAM) мы получили 5.03 tk/s на контексте 4096 токенов. Без EAGLE3 та же модель молотила 2.3 tk/s. Прирост в 2.2 раза. Не 5x, как обещают иногда, но для 230B модели — отличный результат.

Сравнение с альтернативами: MTP, Medusa и голый speculative

Метод Доп. параметры Ускорение (230B) Сложность конвертации
EAGLE3 (MiniMax M3) ~1% 2.2x Средняя (нужен extract)
MTP (Gemma 4 31B) ~5% 1.8x Высокая (отдельный drafter)
Medusa (LLaMA) ~2% 1.5-2x Средняя
Speculative decoding (TinyLLaMA) 0% (отдельная модель) 1.1-1.3x Низкая

EAGLE3 выигрывает за счёт того, что draft head «знает» внутреннее состояние большой модели. Medusa тоже неплоха, но для MiniMax нет готовых Medusa-голов — пришлось бы обучать с нуля. MTP (как в Gemma 4) даёт меньшее ускорение и требует больше дополнительных параметров.

Кстати, если у вас всего две 3090, EAGLE3 тоже работает, но скорость упирается в пропускную способность PCIe — прирост падает до 1.5x. Третья карта даёт дополнительное ускорение за счёт параллелизации драфтера на отдельной GPU.

Кому это реально нужно?

Владельцы 2-4 видеокарт с суммарным VRAM от 48GB. Если у вас одна 4090 — забудьте: MiniMax M3 не влезет целиком. Даже с Q4 квантованием нужно минимум 48GB (это три 3090 по 24GB как раз дают 72GB с запасом).

Если вы используете Ollama или LM Studio — придётся подождать встроенной поддержки EAGLE3. Пока эти обёртки не умеют загружать отдельный drafter GGUF. Только чистый llama.cpp (сборка из исходников или бинарники b4658+).

Ещё момент: EAGLE3 даёт наибольший выигрыш на длинных генерациях (больше 200 токенов). На коротких запросах (ответы до 50 токенов) оверхед на запуск drafter'a может сожрать весь профит. Если ваш сценарий — чат с короткими сообщениями, лучше отключить speculative decoding совсем.

💡
Совет: после конвертации сначала запустите модель без драфтера, замерьте baseline. Потом добавьте --draft-model и сравните. Если скорость не выросла — проверьте распределение слоёв (--tensor-split) и количество draft-токенов. Оптимальное значение часто 4-6, а не 8.

Лично я не фанат возни с конвертацией. Но когда на трёх 3090 ты получаешь 5 токенов в секунду вместо 2 — понимаешь, что оно того стоило. MiniMax M3 — одна из сильнейших открытых MoE-моделей (наравне с Qwen3-235B, кстати, у нас есть сравнение), и выжать из неё максимум — вопрос принципа. EAGLE3 даёт этот максимум без дообучения и без покупки ещё одной карты.

Альтернатива — подождать, пока выйдет MiniMax M4 с нативной поддержкой многотокенного предсказания. Говорят, в Q3 2026. Но ждать — не наш метод. Конвертируй и ускоряйся.

Если вы хотите запустить EAGLE3 на более скромном железе (Mac Studio M3 Ultra 128GB) — вот инструкция по MiniMax M2.5 — для M3 всё аналогично, только добавляете флаг драфтера.

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