Большие языковые модели жрут тонны 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 совсем.
--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 всё аналогично, только добавляете флаг драфтера.