MAATRIX / Блог / Mistral на сервере: частые ошибки и решения

Mistral на сервере: частые ошибки и решения

Mistral на сервере: частые ошибки и решения

MAATRIX

Mistral ставится одной командой и поначалу выглядит рабочим, а дальше начинается: mixtral:8x7b убивает сервер с 16 ГБ, шаблон ругается на чередование ролей, на дефолтной температуре модель уходит в бесконечный повтор, а русский текст съедает вдвое больше контекста, чем вы посчитали. Частые ошибки Mistral — не поломка Ollama, а особенности линейки: смесь экспертов, словарь на 32 768 токенов и промпт-формат без системной роли. Разберём шесть сценариев с точными строками ошибок.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Сначала выясните, какой именно Mistral вы скачали

Под именем «Mistral» живут восемь моделей с несовместимыми лицензиями и окнами от 8k до 128k.

Тег OllamaПараметрыОкноДефолтный весЛицензия
mistral (v0.3)7,2B32 7684,1 ГБ (Q4_0)Apache 2.0
mistral-nemo12,2B131 0727,1 ГБ (Q4_0)Apache 2.0
mixtral:8x7b46,7B, активных 12,9B32 76826 ГБApache 2.0
mistral-small:22b (2409)22B131 07212 ГБMRL — исследования
mistral-small3.224B131 072~15 ГБApache 2.0
codestral:22b22B32 76813 ГБMNPL — не для продакшена
mistral-large123B131 07269 ГБMRL

ollama pull mistral:8x7b отвечает Error: pull model manifest: file does not exist: смесь экспертов лежит под именем mixtral, а не как размер внутри mistral. Что существует на самом деле — curl -s https://registry.ollama.ai/v2/library/mistral/tags/list | jq -r '.tags[]'.

Лицензия, которую не прочитали. codestral:22b выпущен под MNPL: в коммерческом продукте без отдельного соглашения с Mistral он запрещён, только для разработки. mistral-small:22b версии 2409 и mistral-large идут под исследовательской MRL. Apache 2.0 без оговорок — у 7B v0.3, mistral-nemo, mixtral, mistral-small3.1/3.2 (24B), devstral и magistral. Между 22B и 24B один символ в имени и пропасть в правах.

Что у вас на диске, покажет ollama show mistral. Строка architecture llama — норма: llama.cpp мапит текстовые Mistral на общую реализацию. Своя архитектура только у мультимодальных 3.1 и 3.2, старая Ollama их не загрузит. Когда странно ведёт себя сама Ollama — это отдельный разбор.

«8x7B» — это не 7B: арифметика, на которой падает Mixtral

Самое дорогое заблуждение линейки. Mixtral 8x7B читается как «восемь моделей по 7B, влезет в 8 ГБ». На деле это разреженная смесь экспертов: 46,7 млрд параметров суммарно, активны на токен только два эксперта из восьми в каждом слое — 12,9 млрд. Ключевое: в память грузятся все восемь, потому что маршрутизатор выбирает их заново для каждого токена.

Размеры файлов: Q2_K — 15,6 ГБ, Q3_K_M — 20,4 ГБ, Q4_K_M — 26,4 ГБ, Q5_K_M — 32,2 ГБ. Практический минимум RAM примерно на четверть больше файла. Q4 на машине с 16 ГБ даёт честный отказ ещё до загрузки:

Error: model requires more system memory (28.9 GiB) than is available (15.4 GiB)

Хуже, когда памяти хватает вместе со свопом: модель принимает, ядро выгружает страницы на диск, скорость падает до 0,2–0,4 токена в секунду, а в dmesg появляется Out of memory: Killed process 2317 (ollama).

Плюс MoE: при 26 ГБ весов скорость как у плотной модели на 13B. Минус: вы платите памятью, которой не пользуетесь на каждом токене. Честный вывод на 2026 год — без 32+ ГБ Mixtral брать не нужно. mistral-small3.2:24b на 15 ГБ отвечает лучше, а mistral-nemo:12b быстрее и умнее, чем Mixtral в Q2_K: у смеси экспертов ошибка квантования бьёт по маршрутизации, и модель выбирает не тех экспертов. Уровни разобраны в статье про выбор квантования.

Развернуть за пару минут

Готовый образ на VPS MAATRIX: NVMe, AMD EPYC, root-доступ. Локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Развернуть Ollama

`[INST]`, чередование ролей и системный промпт, которого нет

Формат промпта у Mistral свой и строгий: <s>[INST] вопрос[/INST] ответ</s>[INST] следующий[/INST]. После [INST] пробел есть, перед [/INST] — нет; это не косметика, а другая последовательность токенов. Управляющие токены сидят на первых номерах словаря: <unk> — 0, <s> — 1, </s> — 2, [INST] — 3, [/INST] — 4. Токенизатор v3 (он же версия v0.3) добавил ещё пять — от [TOOL_CALLS] под номером 5 до [/TOOL_RESULTS] под номером 9. Ради них словарь и вырос с 32 000 до 32 768 записей.

Системной роли в шаблоне нет. Через transformers или любую библиотеку, применяющую jinja-шаблон из репозитория, вы получите одну из двух ошибок:

jinja2.exceptions.TemplateError: Only user and assistant roles are supported!
jinja2.exceptions.TemplateError: Conversation roles must alternate user/assistant/user/assistant/...

Вторая всплывает и без всякого system: достаточно двух сообщений подряд от пользователя, например когда историю склеили из очереди задач. Лечение не в патче шаблона, а в сборке истории: системный текст приклеить к первой реплике пользователя, соседние сообщения одной роли слить в одно.

Ollama делает это молча. Её встроенный шаблон вклеивает SYSTEM в первый [INST] сам, а вот в самодельном Modelfile с наивным TEMPLATE системный промпт исчезнет без предупреждения — проверяйте ollama show --template mistral. Отдельные токены [SYSTEM_PROMPT] и [/SYSTEM_PROMPT] появились только в токенизаторе v7 (Small 3.x, Large 2411): если системная инструкция важна, берите Small 3.2, а не семёрку. Оттуда же Error: mistral:7b-instruct-v0.2 does not support tools (status code: 400) — не баг, [TOOL_CALLS] есть только с v0.3.

Модель несёт чушь, зацикливается или не останавливается

Ollama по умолчанию ставит temperature 0.8, top_p 0.9, top_k 40, repeat_penalty 1.1 с окном repeat_last_n 64. Для Mistral это заметно горячее, чем нужно: сама Mistral рекомендует 0.15 для Small 3.1 и 3.2, 0.3 для Nemo и 0.7 с top_p 0.95 для Magistral. При 0.8 модель уходит в перечисления, выдумывает факты и повторяет абзацы. Окно штрафа в 64 токена на ответе в тысячу токенов тоже бесполезно — начало уже забыто.

Бесконечная генерация — известная болезнь линейки. Small 3.2 выпустили в том числе ради неё: по внутренним замерам Mistral доля бесконечных генераций упала с 2,11% до 1,29%. Даже в исправленной версии примерно один ответ из восьмидесяти не останавливается сам — таймаут и num_predict на клиенте не паранойя.

Стоп-токен в самосборных GGUF. Признак — модель дописывает [INST] и продолжает диалог за вас. Конец реплики у Mistral — </s> (токен 2). Оба лечения складываются в один Modelfile:

FROM ./Mistral-7B-Instruct-v0.3-Q4_K_M.gguf
PARAMETER stop "</s>"
PARAMETER stop "[INST]"
PARAMETER temperature 0.3
PARAMETER repeat_last_n 256

Nemo и старые конвертеры. У Mistral Nemo head_dim равен 128, хотя hidden_size / num_heads даёт 160 — Mistral задала его явно. Сборки llama.cpp старше конца июля 2024 считали размер головы сами и выдавали кашу: ошибки нет, модель грузится, текст бессвязный. ollama -v показывает версию старше 0.2.8 — обновляйтесь и перекачивайте веса.

Не Ollama. В vLLM модели Mistral требуют своего токенизатора и пакета mistral-common: без тройки флагов --tokenizer-mode mistral --config-format mistral --load-format mistral шаблон соберётся неправильно и качество просядет без единой ошибки, а вызовы функций включаются отдельно — --tool-call-parser mistral --enable-auto-tool-choice.

Контекст: 8k у v0.1, 32k у v0.3, 128k у Nemo

Версия v0.1 — ловушка. В её конфиге стоит max_position_embeddings: 32768, и ollama show честно печатает 32768. Но обучена она со скользящим окном на 4096 токенов и rope_theta = 10000, то есть держит около 8k. В v0.2 скользящее окно убрали, rope_theta подняли до 1e6 и получили настоящие 32k — их унаследовала v0.3. Тег mistral:7b-instruct-v0.1 живой, но тянуть его не нужно.

Ollama открывает 4096 по умолчанию и честно пишет об этом в журнале: n_ctx_per_seq (4096) < n_ctx_train (32768) -- the full capacity of the model will not be utilized. Наивная реакция — выставить максимум — кончается отказом при загрузке: Error: model requires more system memory (24.6 GiB) than is available (15.2 GiB). Считается это заранее, по формуле 2 · слои · KV-головы · head_dim · 2 байта на токен. У mistral 7B v0.3 — 32 слоя, 8 KV-голов, head_dim 128, итого 128 КБ на токен. У Nemo и Small 24B слоёв 40 при тех же головах — 160 КБ на токен.

ОкноKV у 7B fp16KV у Nemo 12BKV у Small 24B
8 1921,0 ГБ1,25 ГБ1,25 ГБ
32 7684,0 ГБ5,0 ГБ5,0 ГБ
131 07220 ГБ20 ГБ

Кэш выделяется целиком при загрузке, поэтому падение происходит сразу, а не «когда наговорим». Половину расхода снимает OLLAMA_KV_CACHE_TYPE=q8_0 вместе с OLLAMA_FLASH_ATTENTION=1, почти без потери качества.

Честное ограничение: 128k у Nemo — окно обучения, а не рабочая память. В независимых тестах длинного контекста эффективное окно Nemo оценивают примерно в 16k: одиночный факт она находит и дальше, но связать факты из разных концов стотысячного документа уже не может. Раскладка по всем тегам — в таблице RAM для Mistral.

Русский язык и словарь на 32 768 токенов

Об этом почти не пишут, а это самая дорогая особенность семёрки. Словарь mistral 7B — 32 768 записей, обучен на английском и западноевропейских языках. Кириллица в него почти не попала и разбирается байтовым фолбэком: русская буква — два байта UTF-8, до двух токенов на символ.

curl -s http://127.0.0.1:11434/api/chat -d '{"model":"mistral:7b","options":{"num_predict":1},
 "stream":false,"messages":[{"role":"user","content":"<1000 знаков русского>"}]}' | jq .prompt_eval_count

Тысяча знаков русского даёт у mistral:7b порядка 550–700 токенов. У Llama 3 со словарём на 128 256 записей — около 350–380, у Mistral Nemo с токенизатором Tekken на 131 072 записи — примерно 330–360. По оценке самой Mistral, Tekken сжимает русский текст примерно на 30% плотнее словаря Llama 3.

  • Окно 32k у семёрки вмещает около 50 тысяч знаков русского, а не 130 тысяч, как было бы на английском: документ упирается в контекст втрое раньше, чем вы рассчитывали.
  • Промпт обрабатывается дольше — вдвое больше токенов на стадии prompt eval, самой медленной на процессоре.
  • Качество ниже. Mistral 7B заявлена как англоязычная: по-русски она отвечает, но путает падежи и согласование чаще моделей с нормальным кириллическим словарём.

Честная рекомендация: если задача на русском, семёрку не берите вообще. Минимум — mistral-nemo:12b (7,1 ГБ, Tekken), лучший в линейке — mistral-small3.2:24b.

Какой сервер под Mistral брать в MAATRIX

Почти всё перечисленное упирается не в конфиги, а в память: signal: killed на Mixtral, отказ открыть окно пошире, невозможность держать рядом вторую модель.

Минимум: 4 vCPU, 8 ГБ RAM, 60 ГБ NVMe. Комфортно живёт mistral:7b-instruct-v0.3-q4_K_M с окном 8k: 4,4 ГБ весов, 1 ГБ кэша, полтора гигабайта системы. Ограничение честное — Nemo сюда вместе с веб-интерфейсом уже не влезает, окно шире 8k даёт OOM, а русский на семёрке будет посредственным.

Рабочий вариант: 8 vCPU, 16 ГБ RAM, 120–160 ГБ NVMe. Целевая конфигурация под mistral-nemo:12b с окном 16k и q8_0-кэшем: 9,5 ГБ на модель, ещё 2–3 ГБ на Open WebUI с базой. Замер такой машины (EPYC, DDR4-3200, без видеокарты):

$ ollama run mistral:7b-instruct-v0.3-q4_K_M --verbose
prompt eval rate:     78.94 tokens/s
eval rate:            9.71 tokens/s

Nemo на той же машине даёт около 6 токенов в секунду, Small 24B — около 2,5. Восемь ядер нужны не ради скорости печати (она упирается в пропускную способность памяти), а ради чтения промпта: русский документ на 20 тысяч знаков — это 12–14 тысяч токенов и три минуты на prompt eval. Заложите proxy_read_timeout 600s; в Nginx, иначе получите 504 Gateway Time-out там, где модель просто думает.

Комфорт: 8–16 vCPU, 32 ГБ RAM, от 200 ГБ NVMe. Порог для mistral-small3.2:24b с окном 32k; Mixtral Q4 влезает впритык — 26,4 ГБ весов плюс 4 ГБ кэша не оставляют места ни на что, под смесь экспертов честнее брать 48 ГБ. mistral-large:123b на процессорном VPS запускать не нужно: 69 ГБ весов дают меньше токена в секунду. Три модели линейки — это уже 50 ГБ диска.

Ollama есть в каталоге приложений MAATRIX, ставить её руками не нужно: при заказе сервера она разворачивается автоматически на Ubuntu или Debian, юнит поднят и включён в автозапуск, версия свежая — та, что корректно грузит Nemo и Small 3.2. Доступы появляются в личном кабинете, в разделе «Доступ». Останется ollama pull и Modelfile из четвёртого раздела. Полный путь с нуля — как запустить Mistral на VPS.

Локация — Лондон. Причина практическая: веса. Реестр registry.ollama.ai из российских сетей регулярно рвёт многогигабайтные слои, а Hugging Face, где оригиналы mistralai/* лежат за формой согласия, без обходных путей недоступен вовсе. С британской площадки и реестр, и HF отдают на полной скорости канала: 26 ГБ Mixtral приезжают минутами, а не сутками. Пинг из Москвы 40–60 мс на фоне 6–10 токенов в секунду незаметен; Франция даёт тот же результат. Россия нужна, только если через модель идут персональные данные и вы под 152-ФЗ. Оплата — картой российского банка, по СБП, криптовалютой или токеном MAAT.

Развернуть за пару минут

Готовый образ на VPS MAATRIX: NVMe, AMD EPYC, root-доступ. Локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Развернуть Ollama

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Почему mixtral:8x7b требует 26 ГБ, если это «восемь моделей по 7B»?

Маршрутизатор выбирает экспертов заново на каждый токен, поэтому все восемь лежат в памяти целиком: 46,7 млрд параметров при 12,9 млрд активных. Скорость как у 13B, память как под 47B.

Как передать системный промпт, если приходит Conversation roles must alternate user/assistant?

Склеить системный текст с первой репликой пользователя и убрать два подряд идущих сообщения одной роли: в шаблонах Mistral до токенизатора v7 системной роли нет. Токены [SYSTEM_PROMPT] появились только в Small 3.x.

Mistral отвечает по-русски хуже, чем ожидалось. Что делать?

Сменить модель внутри линейки: у mistral:7b словарь на 32 768 записей и кириллица режется побайтово — тысяча знаков даёт 550–700 токенов против 330–360 у mistral-nemo:12b с Tekken.

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.