Mistral на сервере: частые ошибки и решения
Mistral ставится одной командой и поначалу выглядит рабочим, а дальше начинается: mixtral:8x7b убивает сервер с 16 ГБ, шаблон ругается на чередование ролей, на дефолтной температуре модель уходит в бесконечный повтор, а русский текст съедает вдвое больше контекста, чем вы посчитали. Частые ошибки Mistral — не поломка Ollama, а особенности линейки: смесь экспертов, словарь на 32 768 токенов и промпт-формат без системной роли. Разберём шесть сценариев с точными строками ошибок.
Содержание
- Сначала выясните, какой именно Mistral вы скачали
- «8x7B» — это не 7B: арифметика, на которой падает Mixtral
- `[INST]`, чередование ролей и системный промпт, которого нет
- Модель несёт чушь, зацикливается или не останавливается
- Контекст: 8k у v0.1, 32k у v0.3, 128k у Nemo
- Русский язык и словарь на 32 768 токенов
- Какой сервер под Mistral брать в MAATRIX
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Сначала выясните, какой именно Mistral вы скачали
Под именем «Mistral» живут восемь моделей с несовместимыми лицензиями и окнами от 8k до 128k.
| Тег Ollama | Параметры | Окно | Дефолтный вес | Лицензия |
|---|---|---|---|---|
mistral (v0.3) | 7,2B | 32 768 | 4,1 ГБ (Q4_0) | Apache 2.0 |
mistral-nemo | 12,2B | 131 072 | 7,1 ГБ (Q4_0) | Apache 2.0 |
mixtral:8x7b | 46,7B, активных 12,9B | 32 768 | 26 ГБ | Apache 2.0 |
mistral-small:22b (2409) | 22B | 131 072 | 12 ГБ | MRL — исследования |
mistral-small3.2 | 24B | 131 072 | ~15 ГБ | Apache 2.0 |
codestral:22b | 22B | 32 768 | 13 ГБ | MNPL — не для продакшена |
mistral-large | 123B | 131 072 | 69 ГБ | 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 fp16 | KV у Nemo 12B | KV у Small 24B |
|---|---|---|---|
| 8 192 | 1,0 ГБ | 1,25 ГБ | 1,25 ГБ |
| 32 768 | 4,0 ГБ | 5,0 ГБ | 5,0 ГБ |
| 131 072 | — | 20 ГБ | 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 — десятки моделей в одном окне. Оплата картой РФ и по СБП.