MiniMax M3.1 Flash GGUF: локальный запуск, память и API
Для первого запуска Unsloth Q2 заложите 160 GiB памяти, для Q4 — 256 GiB. Соберите ветку llama.cpp с поддержкой MiniMax, запустите сервер с контекстом 16K и проверьте ответ API и чтение файла через OpenCode. Сравните GGUF, MLX для Apple Silicon, EXL3 для DGX Spark и вариант AMD. Разберитесь, что показывают метрики квантования и как сопоставить локальные расходы с оплатой API.
Содержание

Для локального запуска MiniMax M3.1 Flash GGUF начните с UD-Q2_K_XL и заложите 160 GiB+ памяти. Если доступны 256 GiB+, предпочтите UD-Q4_K_XL. Если оборудование придётся покупать ради редких задач по программированию, сначала попробуйте API и оцените расходы.
Эти оценки Unsloth по состоянию на 2026-11-06 рассчитаны на текстовый контекст 16K и один слот обработки запросов. Учитывается суммарный объём RAM — оперативной памяти — и VRAM — видеопамяти, либо объём объединённой памяти. Ниже вы пройдёте весь путь до локального API и подключения OpenCode 1.
Сколько памяти нужно M3.1 Flash?
Памяти должно хватать на все квантованные веса и дополнительные расходы при работе модели. В оригинальной карточке MiniMax указаны примерно 428B параметров, из которых 23B активны на каждом токене. Активная доля уменьшает объём вычислений, но для загрузки модель не становится моделью на 23B параметров.
Unsloth публикует следующие размеры и ориентиры. Размер загрузки указан в десятичных GB, объём памяти — в GiB.
| Вариант квантования | Размер загрузки | Объём весов | Ориентир по памяти |
|---|---|---|---|
UD-IQ1_M | 129.4 GB | 120.5 GiB | Эксперимент при нехватке памяти; пояснение ниже |
UD-Q2_K_XL | 143.9 GB | 134.0 GiB | 160 GiB+ |
UD-IQ3_XXS | 160.0 GB | 149.1 GiB | 176 GiB+ |
UD-IQ3_S | 175.5 GB | 163.4 GiB | 192 GiB+ |
UD-Q3_K_XL | 194.0 GB | 180.6 GiB | 208 GiB+ |
UD-Q4_K_XL | 249.4 GB | 232.3 GiB | 256 GiB+ |
UD-Q8_K_XL | 259.1 GB | 241.3 GiB | 272 GiB+ |
Помимо весов, Unsloth закладывает примерно 20–32 GiB на KV-кэш, движок и операционную систему. KV-кэш хранит промежуточные данные механизма внимания для текущего контекста. Более длинный контекст, дополнительные слоты, обработка изображений и спекулятивное декодирование требуют больше памяти.
После загрузки весов 1-bit на машине со 128 GiB останется всего 7.5 GiB. Это меньше указанного запаса на остальные расходы. Для Q2 используйте более осторожную рекомендацию Unsloth: 160 GiB.
Сумма RAM и VRAM не гарантирует, что веса удастся распределить между ними. При переносе части обработки на CPU соответствующие веса должны помещаться в оперативную память. Также оставьте достаточно места на диске для выбранных файлов.
Заявленное окно контекста 1M не означает, что приведённых объёмов памяти хватит для работы с таким контекстом. Начните с 16K и увеличивайте значение после проверки расхода памяти.
Какой вариант квантования выбрать?
Сначала проверьте, помещается ли Q2 в память. Затем сравните его с Q4 на своих задачах по программированию, если оборудование позволяет. Вариант 3-bit подойдёт как промежуточный выбор, когда для Q4 памяти недостаточно.
Сводные показатели Unsloth и результаты по отдельным категориям описывают разные выборки:
| Совпадение top-1 по данным Unsloth | UD-Q2_K_XL | UD-Q4_K_XL |
|---|---|---|
| Взвешенный итог по семи категориям | 91.5% | 98.0% |
| Программирование | 91.2% | 97.6% |
| Общение на общие темы | 88.5% | 97.3% |
| Математика | 95.7% | 99.0% |
Сводный показатель учитывает семь категорий с весами. Строки про общение и математику относятся к отдельным категориям. Поэтому у Q2 одновременно встречаются значения 91.5% и 88.5%.
Совпадение top-1 показывает, выбирает ли квантованная модель тот же токен с наибольшей вероятностью, что и эталон. Это не доля успешно решённых задач. Показатель 91.2% для программирования не означает, что 91.2% изменений в репозитории пройдут тесты.
Рассматривайте 1-bit как эксперимент при жёстком ограничении памяти, даже с учётом сводного совпадения около 89.9%. Перед постоянным использованием любого варианта проверьте правки файлов, аргументы инструментов и поведение в задачах из нескольких шагов.
Q8 занимает на 9.7 GB больше, чем Q4. Unsloth описывает его как преобразование опубликованных весов без потерь с сохранением смешанных форматов NVFP4 и BF16. Поэтому метка «8-bit» не означает одинаковую точность хранения каждого тензора.
Какой движок выбрать для вашего оборудования?
Выбирайте веса и инструкцию под конкретный движок для запуска модели. Если вариант EXL3 помещается в память, это ещё не подтверждает, что поместится соответствующий GGUF.
По документации на 2026-11-06 доступны следующие варианты:
| Оборудование | Вариант запуска | Условия и ограничения |
|---|---|---|
| Apple Silicon | Веса MLX-community oQ3e и oMLX | Общий размер — 196.152 GB / 182.681 GiB, включая черновую модель и компоненты обработки изображений. Нужна дополнительная память для движка и контекста. |
| Один DGX Spark | Инструкция vcruz305 для SAGE-EXL3 | Рассчитана на систему GB10 со 128 GB памяти. Версии компонентов зафиксированы, доступ к весам нужно запросить. Поддерживаются текстовые запросы и один поток декодирования. |
| AMD Instinct | Веса Quark MXFP4 от AMD | В документации указаны MI350/MI355, Linux, ROCm 7.2.3 и пример с тензорным параллелизмом на четырёх GPU. Это не универсальная инструкция для Radeon. |
| Четыре RTX 3090 | Специализированный движок, упомянутый в публикации MiniMax от 1 ноября | MiniMax связывает подход @superalesha с квантованными весами, кэшированием экспертов и системной RAM. Это упоминание не гарантирует такую же производительность на другой конфигурации. |
Для первого запуска GGUF используйте приведённую ниже инструкцию для llama.cpp. Перед коммерческим использованием прочитайте MiniMax Community License, включая требования к указанию авторства и отправке уведомления.
Как собрать llama.cpp и запустить сервер с контекстом 16K?
Используйте ветку с поддержкой MiniMax, на которую ссылается Unsloth. По состоянию на 2026-11-06 PR #31192 в llama.cpp оставался открытым и не был объединён с основной веткой. В примере зафиксирован коммит, на который эта ветка указывала при проверке.
Сборка и загрузка весов
Выполняйте команды в Bash на Ubuntu или WSL с уже установленным набором инструментов NVIDIA CUDA. Установите остальные зависимости и соберите сервер:
sudo apt-get update
sudo apt-get install -y build-essential cmake git libssl-dev python3-venv curl jq
git clone https://github.com/ggml-org/llama.cpp
git -C llama.cpp fetch origin pull/31192/head:minimax-m31
git -C llama.cpp checkout --detach 6b95a9908d2c7b242817a447708aec38e937e2c0
cmake llama.cpp -B llama.cpp/build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DGGML_CUDA=ON
cmake --build llama.cpp/build --config Release -j --target llama-server
На macOS установите инструменты командной строки Xcode, CMake, Python и jq. Команды apt-get пропустите. Замените -DGGML_CUDA=ON на -DGGML_CUDA=OFF: согласно документации по сборке, Metal на macOS включён по умолчанию.
Через Hugging Face CLI скачайте все четыре части весов Q2:
python3 -m venv .venv-m31
source .venv-m31/bin/activate
python -m pip install -U huggingface_hub
hf download unsloth/MiniMax-M3.1-Flash-GGUF \
--local-dir unsloth/MiniMax-M3.1-Flash-GGUF \
--include "UD-Q2_K_XL/*"
Храните все части в одной папке. Укажите серверу первый файл, и он загрузит весь набор.
Запуск и проверка
Начните с одного слота, явно заданного контекста 16K и обычной генерации текста:
./llama.cpp/build/bin/llama-server \
--model unsloth/MiniMax-M3.1-Flash-GGUF/UD-Q2_K_XL/MiniMax-M3.1-Flash-UD-Q2_K_XL-00001-of-00004.gguf \
--alias m31-local \
--ctx-size 16384 \
--parallel 1 \
--n-gpu-layers auto \
--jinja \
--flash-attn on \
--temp 1.0 \
--top-p 0.95 \
--top-k 0 \
--min-p 0.0 \
--chat-template-kwargs '{"reasoning_effort":"high"}' \
--host 127.0.0.1 \
--port 8080
Для этого варианта с разреженным вниманием автор PR указывает Jinja, Flash Attention и один слот. Параметры llama-server позволяют автоматически выбирать число слоёв на GPU.
Команда не подключает проектор для изображений или черновую модель DSpark для спекулятивного декодирования. Ключ API не задан. Сервер принимает соединения только на локальном адресе.
Если не удаётся выделить VRAM, уменьшите число слоёв на GPU и проверьте свободную RAM. Если недостаточно общего объёма памяти, выберите меньший вариант квантования или добавьте память. Перенос обработки на CPU не избавляет от необходимости хранить веса.
Во втором терминале Bash проверьте готовность сервера:
curl -sS -i http://127.0.0.1:8080/health
Продолжайте после ответа HTTP 200 с {"status":"ok"}. Ответ HTTP 503 с Loading model означает, что инициализация ещё идёт.
Затем получите список моделей и отправьте запрос:
curl -sS http://127.0.0.1:8080/v1/models | jq '.data[].id'
curl -sS http://127.0.0.1:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
--data '{
"model": "m31-local",
"messages": [
{"role": "user", "content": "Reply with LOCAL_OK."}
],
"reasoning_effort": "low",
"max_tokens": 4096,
"stream": false
}' | jq '{message: .choices[0].message, finish_reason: .choices[0].finish_reason}'
Убедитесь, что в списке есть m31-local, а поле message.content содержит запрошенный ответ. Для этой короткой проверки значение low в запросе переопределяет серверное значение high.
Если finish_reason равно length, ответ исчерпал лимит выходных токенов. Увеличьте этот лимит в пределах общего окна контекста. Отсутствие итогового текста при таком завершении ещё не означает ошибку загрузки модели.
Как подключить OpenCode 1 и проверить вызов инструмента?
Подключите клиент через документированную настройку собственного провайдера OpenCode. OpenCode выполняет операции с файлами, а llama-server генерирует ответы модели.
Эта конфигурация следует документации OpenCode 1. OpenCode 1 и OpenCode 2 используют одну команду opencode. Если у вас уже установлен V2, выделите для V1 отдельное окружение.
Для новой установки V1 при наличии Node.js и npm выполните:
npm install -g opencode-ai
opencode --version
Добавьте следующую конфигурацию в opencode.json в корне проекта, сохранив нужные существующие настройки. Она основана на официальном примере провайдера llama.cpp:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"local": {
"npm": "@ai-sdk/openai-compatible",
"name": "MiniMax local",
"options": {
"baseURL": "http://127.0.0.1:8080/v1"
},
"models": {
"m31-local": {
"name": "MiniMax M3.1 Flash Q2",
"limit": {
"context": 16384,
"output": 4096
}
}
}
}
}
}
Подставной ключ API для этой локальной конфигурации не нужен. Лимит контекста совпадает с настройкой работающего сервера. Лимит вывода задаёт выбранный объём ответа, а не максимальную возможность модели.
В проекте Node.js с файлом package.json выполните:
opencode run --model local/m31-local \
"Read package.json with a file tool. Report scripts.test, or say it is missing. Do not edit files or run commands."
Убедитесь, что OpenCode действительно вызвал инструмент чтения файла, и сравните ответ с содержимым файла. Одной фразы модели о том, что она прочитала файл, недостаточно.
Если клиент не подключается, проверьте базовый URL с /v1, псевдоним модели и работающий сервер. Если текстовые ответы приходят, но инструменты не работают, проверьте --jinja. Повторите короткую проверку чтения файла перед тем, как поручать модели правки репозитория.
Начните с небольшой сессии. Если описания инструментов занимают слишком много контекста, примените подход из руководства по расходу контекста MCP. Сначала измерьте этот расход, затем решайте, нужно ли расширять окно сервера.
Когда лучше воспользоваться API?
Начните с API, если для редкого использования пришлось бы покупать оборудование. Локальный запуск стоит рассматривать, когда подходящий компьютер уже есть или модель должна работать на вашей машине.
По состоянию на 2026-11-06 стандартные тарифы API MiniMax составляют:
| Что оплачивается | USD за 1 миллион токенов |
|---|---|
| Вход без попадания в кэш | $0.15 |
| Чтение входных токенов из кэша | $0.015 |
| Выходные токены | $0.60 |
Это плата за использование API, которая списывается с баланса. MiniMax также описывает тарифы Flash как фиксированные. По формуле расчёта кэша оплачиваются новые входные токены, попадания в кэш и выходные токены. Отдельная плата за запись в кэш в этой формуле не добавляется.
Рассмотрим условную месячную нагрузку: 20 миллионов входных токенов без кэша и 2 миллиона оплачиваемых выходных токенов.
API token charge = 20 × $0.15 + 2 × $0.60
= $4.20 per month
В этом примере используются только текстовые запросы, нет попаданий в кэш и платных серверных инструментов. Налоги и комиссии при оплате не учтены.
Для сравнения возьмём условный расчёт локальных расходов:
Hardware allocation = $3,000 ÷ 36 months
= $83.33 per month
Active electricity = 0.15 kW × 60 hours × $0.20/kWh
= $1.80 per month
Local subtotal = $85.13 per month
Все исходные величины локального расчёта — допущения. Это не цена проверенной конфигурации и не подтверждение, что она выполнит указанную нагрузку за 60 часов. Перед покупкой добавьте потребление в простое, время на настройку и обслуживание, а также стоимость необходимых обновлений оборудования.
При сравнении реальных запусков задавайте одинаковую глубину рассуждений. В API MiniMax по умолчанию используется max, а в этом локальном сервере — high. Считайте оплаченные выходные токены и сравнивайте стоимость выполненной задачи по программированию, включая повторные попытки и неудачные вызовы инструментов.
По состоянию на 2026-11-06 BetterToken также предлагает MiniMax-M3.1-Flash с оплатой по использованию. Его документированный OpenAI-совместимый базовый URL — https://www.bettertoken.ai/v1; расходы для этого варианта считайте по текущим тарифам.
Для России документация BetterToken указывает подключение к его API без VPN и оплату в рублях. Это не распространяется на сторонние сайты, загрузки Hugging Face и GitHub, аккаунты, подписки или обновления клиентов. Доступные способы пополнения и комиссии проверяйте при оплате.
Если оборудование уже есть, замените условную долю его стоимости своими фактическими дополнительными расходами. Затем измерьте результаты на характерных задачах. Локальный вариант имеет смысл, когда модель помещается в память, укладывается в нужное время и выдаёт результаты, которые проходят вашу проверку.