MAATRIX / Блог / Как запустить Mistral на VPS

Как запустить Mistral на VPS

Как запустить Mistral на VPS

MAATRIX

Под вывеской «Mistral» в реестре Ollama лежит десяток моделей: от семёрки на 4,4 ГБ до MoE на 26 ГБ, и часть из них — под лицензией, запрещающей коммерцию. Запустить Mistral на VPS — дело пятнадцати минут; сложнее выбрать правильный тег, не удивиться скорости на русском и не поймать своп на третьем запросе. Ниже — путь от чистой Ubuntu до рабочего API с замерами.

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

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

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

Какой именно Mistral: теги, веса и лицензии

Команда ollama run mistral тянет Mistral 7B Instruct v0.3 — 7,2 млрд параметров, окно 32 768 токенов. Модель живая, но это не весь ассортимент.

ТегВесКонтекстЛицензия
mistral:7b4,4 ГБ (Q4_K_M)32 768Apache 2.0
mistral-nemo:12b7,1 ГБ (Q4_0)128kApache 2.0
mistral-small:22b13 ГБ128kMRL, некоммерческая
mistral-small:24b14 ГБ32 768Apache 2.0
mixtral:8x7b26 ГБ (Q4_0)32 768Apache 2.0
codestral:22b13 ГБ32 768MNPL, не для продакшена

Две строки — юридические мины, и это главное отличие Mistral от Llama с единой лицензией на всё семейство. Mistral Research License разрешает только исследования: поставить mistral-small:22b или 123-миллиардный mistral-large в свой SaaS без договора нельзя. Non-Production License у Codestral запрещает даже внутренний продакшен, включая ассистента для своих разработчиков. А соседний mistral-small:24b — честный Apache 2.0: разница между 22b и 24b выглядит минорным обновлением, а на деле это смена правового режима.

На процессорном VPS ваш выбор — mistral:7b или mistral-nemo:12b. Тег указывайте целиком: mistral:7b-instruct-v0.3-q4_K_M воспроизводится через год, а mistral переедет на следующий релиз.

Ставим Ollama и забираем веса без сюрпризов с диском

Чистая Ubuntu 24.04 LTS или Debian 13, под root:

curl -fsSL https://ollama.com/install.sh | sh
ollama --version   # ollama version is 0.33.1
ollama pull mistral:7b-instruct-v0.3-q4_K_M
ollama show mistral:7b
    architecture        llama
    context length      32768
    quantization        Q4_K_M

Не пугайтесь строки architecture llama: в GGUF Mistral 7B описан той же архитектурой, что и Llama, разница лишь в гиперпараметрах.

Ловушка с диском тут острее, чем у других: веса ложатся в /usr/share/ollama/.ollama/models, то есть на корневой раздел, а Mixtral весит 26 ГБ. Проверьте df -h / заранее, иначе pull упадёт с no space left on device. Каталог переносит строка Environment="OLLAMA_MODELS=/mnt/models" в systemctl edit ollama плюс chown -R ollama:ollama /mnt/models; забудете chown — получите permission denied на первом же pull, демон работает не от root.

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

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

Развернуть Ollama

Токенизатор и русский язык: где семёрка проигрывает NeMo

Пункта нет в мануалах, а он определяет реальную стоимость работы. У Mistral 7B словарь 32 768 токенов на SentencePiece, собранный под английский и код: кириллицы почти нет, русское слово рассыпается на 3–5 кусков. У Mistral NeMo словарь другой — Tekken на 131 072 токена, русский в нём представлен нормально.

Замерьте сами — Ollama отдаёт prompt_eval_count в ответе /api/generate:

TXT=$(head -c 1000 /tmp/ru.txt | tr '\n' ' ')
for M in mistral:7b mistral-nemo:12b; do curl -s http://127.0.0.1:11434/api/generate \
  -d "{\"model\":\"$M\",\"prompt\":\"$TXT\",\"stream\":false}" | jq '.prompt_eval_count'; done

На тысяче знаков связного русского вышло mistral:7b — 631 против mistral-nemo:12b — 372. Разница в 1,7 раза бьёт трижды. Контекст: 32k у семёрки — это около 50 тысяч знаков по-русски, а не 130 тысяч, как на английском. Скорость: при 6,8 ток/с семёрка выдаёт 11 знаков в секунду, NeMo при 3,9 ток/с — около 10,5: разрыв в буквах исчезает. Качество: дробление слов портит морфологию, семёрка путает падежи и срывается на английский.

Вывод честный: для русского mistral:7b не лучший выбор в своём весе, берите его под английский и код. Частично лечится системным промптом:

FROM mistral:7b-instruct-v0.3-q4_K_M
PARAMETER num_ctx 16384
PARAMETER stop "</s>"
PARAMETER stop "[/INST]"
SYSTEM """Отвечай только на русском, не переключайся на английский."""

Собирается через ollama create mistral-ru -f Modelfile. Про stop: реплику у Mistral закрывает </s>, разметка диалога — [INST] ... [/INST]. При импорте стороннего GGUF без шаблона модель генерирует бесконечно, дописывая новые [INST]-блоки; две строки выше это закрывают. И нюанс формата: у Mistral нет отдельной роли system — шаблон вклеивает её в первую реплику, поэтому длинная инструкция «забывается» быстрее.

Контекст и память: 32k у семёрки, «миллион» у NeMo

Первое разочарование: Ollama открывает окно 4096 токенов независимо от модели, остальное молча режет. В journalctl -u ollama | grep truncat это видно дословно — msg="truncating input prompt" limit=4096 prompt=9137 new=4096.

Второе разочарование обратное: ollama show mistral-nemo печатает context length 1024000. Это не опечатка — в конфиге NeMo max_position_embeddings действительно больше миллиона. Обучалась модель на 128k, дальше качество разваливается, а столько KV-кэша нет ни на одном VPS.

Третье: у Mistral 7B версий v0.2 и v0.3 нет скользящего окна. В v0.1 был sliding window attention на 4096 токенов с дешёвым длинным контекстом; с v0.2 стоит sliding_window: null, и кэш растёт линейно: 2 × слоёв × KV-голов × head_dim × 2 байта на токен. В семействе 8 KV-голов и head_dim 128, меняется только глубина.

МодельСлоёвKV на токенОкно 8kОкно 16kОкно 32k
mistral:7b32128 КиБ1 ГиБ2 ГиБ4 ГиБ
mistral-nemo:12b, mistral-small:24b40160 КиБ1,25 ГиБ2,5 ГиБ5 ГиБ
mixtral:8x7b32128 КиБ1 ГиБ2 ГиБ4 ГиБ

Полные 128k у NeMo стоили бы 20 ГиБ поверх 7,1 ГБ весов — на 16-гигабайтной машине это гарантированный OOM. Реалистичная цель — 16k в drop-in юнита:

[Service]
Environment="OLLAMA_CONTEXT_LENGTH=16384"
Environment="OLLAMA_FLASH_ATTENTION=1"
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"
Environment="OLLAMA_KEEP_ALIVE=30m"

q8_0 режет кэш вдвое и работает только с флеш-аттеншеном: 16k у семёрки обойдутся в 1 ГиБ вместо двух. После рестарта ollama ps покажет итог: mistral:7b … 6.6 GB … 100% CPU — это веса плюс кэш плюс накладные, а 100% CPU значит, что видеокарты нет. Арифметика по каждому тегу — в таблице RAM для Mistral.

Mixtral: 47 миллиардов по памяти, 13 по скорости

MoE ломает интуицию «больше параметров — медленнее». В mixtral:8x7b 46,7 млрд параметров, но роутер берёт на токен двух экспертов из восьми, и считается около 12,9 млрд. Замеры --verbose на 8 vCPU, сначала семёрка:

prompt eval rate:     33.88 tokens/s
eval count:           159 token(s)
eval duration:        23.4s
eval rate:            6.79 tokens/s

Та же машина на Mixtral: eval rate: 4.60 tokens/s. Сводка замеров на VPS с EPYC без GPU, Q4, окно 8k:

Модель4 vCPU8 vCPU16 vCPU
mistral:7b4,2 ток/с6,8 ток/с8,4 ток/с
mistral-nemo:12b2,4 ток/с3,9 ток/с4,8 ток/с
mixtral:8x7b4,6 ток/с5,9 ток/с
mistral-small:24b2,0 ток/с2,6 ток/с

Модель на 47 млрд параметров быстрее модели на 24 млрд — вот она, MoE. Цена честная: все 26 ГБ весов обязаны лежать в RAM целиком, ведь неизвестно, какие эксперты понадобятся следующему токену.

Отсюда главный риск Mixtral на VPS. Ollama отображает веса через mmap, поэтому при нехватке памяти модель формально запустится — и начнёт читать экспертов с диска. Каждый токен дёргает другую пару, кэш страниц не спасает, скорость падает до 0,2–0,4 ток/с. Диагноз даёт vmstat 1:

 r  b   swpd   free   buff  cache   si   so    bi    bo
 2  3 1048572  61240   1024 3894120 5312 4180 61440   240

Ненулевые si/so — это не «медленный процессор», а свопинг весов. Лечение одно: больше RAM либо модель меньше. Прочие причины — в отдельной статье.

Подключаем приложения: API, инструменты и защита порта

Ollama говорит на двух диалектах: собственном /api/chat и OpenAI-совместимом /v1/chat/completions. Второй удобнее, под него написаны все клиенты; ключ он не проверяет, но многие SDK падают на пустом значении — подставляйте любую строку вроде OPENAI_API_KEY=ollama.

Приятная особенность: начиная с v0.3 семёрка умеет вызывать функции. Модель отвечает блоком [TOOL_CALLS], а Ollama разворачивает его в стандартное поле:

curl -s http://127.0.0.1:11434/api/chat -d '{"model":"mistral:7b","stream":false,
 "messages":[{"role":"user","content":"Погода в Лондоне?"}], "tools":[{"type":"function",
 "function":{"name":"get_weather","parameters":{"type":"object",
 "properties":{"city":{"type":"string"}}}}}]}' | jq -c '.message.tool_calls'
# [{"function":{"name":"get_weather","arguments":{"city":"London"}}}]

Оговорка по опыту: на семёрке инструменты нестабильны — она путает имена аргументов и иногда описывает вызов словами вместо структуры. Для агентских сценариев берите mistral-nemo:12b.

Главное предупреждение: в Ollama нет аутентификации вообще. Кто дотянулся до порта 11434, тот гоняет инференс на вашем процессоре и удаляет модели через /api/delete. Проверьте себя с другой машины curl -s --max-time 5 http://ВАШ_IP:11434/api/tags: пришёл список моделей — закрывайте порт через ufw deny 11434/tcp.

И не выставляйте OLLAMA_HOST=0.0.0.0 «чтобы приложение с ноутбука достучалось» — оставьте демон на локальном адресе и пробросьте порт туннелем ssh -N -L 11434:127.0.0.1:11434 user@ваш-сервер. Для веб-интерфейса — Nginx с TLS и auth_basic, но учтите: Ollama сверяет Host и на чужой отвечает 403 Forbidden, поэтому обязателен proxy_set_header Host localhost:11434;.

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

Без видеокарты это задача про объём и скорость памяти, а не про частоту процессора: на каждый токен вычитываются все веса модели, и типичные для VPS 25–40 ГБ/с — ваш потолок. Отсюда правило: лишние гигабайты RAM полезнее лишних ядер, удвоение ядер с 8 до 16 даёт прибавку в четверть, а не вдвое.

Минимум: 4 vCPU, 8 ГБ RAM, 60 ГБ NVMe. Здесь живёт mistral:7b с окном 8–16k и скоростью около 4 ток/с: телеграм-бот, разметка, извлечение полей. Ограничение честное — соседей на машине не будет, ни Open WebUI с Postgres, ни второй модели в памяти.

Рабочий вариант: 8 vCPU, 16 ГБ RAM, 120–160 ГБ NVMe. Целевая связка под mistral-nemo:12b с окном 16k: 7,1 ГБ весов, около 1,3 ГиБ кэша с q8_0, 2–3 ГБ на веб-интерфейс и запас на вторую модель. Русский здесь перестаёт быть компромиссом.

Под Mixtral: 16 vCPU, 32 ГБ RAM, от 200 ГБ NVMe. Ниже 32 ГБ MoE не берите — получите не медленную работу, а свопинг из предыдущей секции. Зато помещаются 26 ГБ весов целиком, окно 32k и OLLAMA_MAX_LOADED_MODELS=2.

Две вещи прямо. Одновременных пользователей процессорный VPS не тянет: пять параллельных запросов к семёрке дают каждому больше минуты ожидания. И mistral-small:24b при двух ток/с для чата непригоден — под 24B нужен GPU. Про разрядность весов — разбор квантования, про поломки — частые ошибки Mistral.

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

Локация — Лондон. Причина практическая: из российских сетей многогигабайтные слои реестра Ollama регулярно рвутся на середине, а ollama pull hf.co/... для сторонних GGUF часто не отвечает вовсе. С британской площадки 26 ГБ Mixtral приезжают за минуты, а не за три подхода; пинг из Москвы в 40–60 мс на фоне 5 ток/с неразличим, плюс европейский правовой периметр для рабочих документов. Обязаны хранить данные в РФ по 152-ФЗ — берите российскую площадку, Ollama ставится там так же; детали — в обзоре VPS в Великобритании для нейросетей. Оплата — картой российского банка, по СБП, криптой или токеном MAAT.

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

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

Развернуть Ollama

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

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

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

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

Можно ли использовать Mistral в коммерческом продукте бесплатно?

Зависит от тега: mistral:7b, mistral-nemo, mistral-small:24b и mixtral идут под Apache 2.0. А mistral-small:22b, mistral-large (MRL) и codestral (MNPL) коммерческое использование запрещают.

Запустится ли mixtral:8x7b на 16 ГБ RAM?

Формально да: Ollama отображает веса через mmap и не падает. Но 26 ГБ в 16 не влезают, эксперты читаются с диска, и вы получите 0,2–0,4 ток/с при ненулевых si/so в vmstat 1. Под Mixtral нужно 32 ГБ.

Mistral 7B или Llama 3.1 8B для русского?

При равном железе обычно выигрывает Llama: у Mistral 7B словарь всего 32 768 токенов, и русский текст расходует их почти вдвое больше. Нужен именно Mistral — берите mistral-nemo:12b с Tekken. Про соседа — как запустить Llama 3 на VPS.

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

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