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

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

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

MAATRIX

DeepSeek запускается на обычном VPS без видеокарты — но не тот DeepSeek, о котором пишут в новостях. И ведёт он себя иначе, чем привычные чат-модели: сначала пишет вслух рассуждения, тратит на них сотни токенов, и только потом отвечает. Ниже — путь от чистой Ubuntu до рабочего API: какой тег брать, как гасить лишние размышления, замеры скорости и границы, за которыми процессорный сервер перестаёт справляться.

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

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

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

Какой DeepSeek вы скачиваете на самом деле

Главная развилка, на которой теряют неделю: ollama run deepseek-r1:7b не запускает DeepSeek-R1. Настоящая R1 — MoE на 671 миллиард параметров, 404 ГБ даже в четырёхбитном квантовании. Всё, что меньше 671b, — дистилляты: обычные Qwen и Llama, дообученные на рассуждениях R1. Думать вслух они умеют, но архитектура и знания у них чужие.

ТегЧто внутриВес Q4_K_MМинимум RAM
deepseek-r1:1.5bдистиллят Qwen2.5-Math-1.5B1,1 ГБ4 ГБ
deepseek-r1:7bдистиллят Qwen2.5-Math-7B4,7 ГБ16 ГБ
deepseek-r1:8bдистиллят Qwen3-8B, сборка 05285,2 ГБ16 ГБ
deepseek-r1:14bдистиллят Qwen2.5-14B9,0 ГБ32 ГБ
deepseek-r1:32bдистиллят Qwen2.5-32B20 ГБ32 ГБ
deepseek-r1:70bдистиллят Llama-3.3-70B43 ГБ64 ГБ
deepseek-r1:671bнастоящая R1, MoE 671B/37B404 ГБне про VPS
deepseek-coder-v2:16bMoE-Lite, 16B при 2,4B активных8,9 ГБ16 ГБ

Отсюда три практических вывода:

  • :1.5b и :7b собраны на математической базе Qwen2.5-Math. Они хороши в счёте и логике и заметно слабее в русской прозе и RAG, чем обычная qwen2.5:7b-instruct того же веса. Нужен универсальный ассистент — берите :8b или :14b.
  • Тег :8b менялся. До обновления 0528 он указывал на дистиллят Llama-3.1-8B, после — на Qwen3-8B. Нужна воспроизводимость — пиньте полное имя deepseek-r1:8b-0528-qwen3-q4_K_M.
  • Лицензии разные. Сама R1 под MIT, дистилляты наследуют лицензию базы: Qwen-сборки — Apache 2.0, :70b — Llama 3.3 Community License с её ограничениями. Для коммерческого продукта это не формальность.

Установка Ollama и первый запуск

Чистая Ubuntu 24.04 LTS или Debian 13. До установки проверьте два условия: systemd-detect-virt должен ответить kvm, а в /proc/cpuinfo быть флаг avx2. На контейнерном VPS Ollama видит память всей ноды, лимит режет cgroup, и процесс ловит signal: killed посреди загрузки весов. Диск считайте по корневому разделу: модели ложатся в /usr/share/ollama/.ollama/models и три-четыре тега DeepSeek съедают 40 ГБ.

Установка — одна команда, дальше две проверки:

curl -fsSL https://ollama.com/install.sh | sh
ollama --version                 # ollama version is 0.33.4
systemctl is-active ollama       # active

Скрипт создаёт пользователя ollama, юнит /etc/systemd/system/ollama.service и демон на 127.0.0.1:11434; если процесс не стартовал — разбор в статье почему Ollama не запускается. Первый запуск делайте сразу с --verbose:

$ ollama run deepseek-r1:8b --verbose "Сколько будет 17 × 24? Ответь одним числом."
Thinking...
Хорошо, нужно умножить 17 на 24. Разложу 24 на 20 и 4. 17 × 20 = 340...
...done thinking.

408

total duration:       2m3.417s
load duration:        5.612s
prompt eval count:    24 token(s)
prompt eval rate:     61.08 tokens/s
eval count:           714 token(s)
eval rate:            5.94 tokens/s

Ответ — три символа, а модель выдала 714 токенов и потратила две минуты: около 660 токенов ушло на рассуждения. Это не поломка, это устройство R1. Если запуск закончился строкой Error: model requires more system memory (7.4 GiB) than is available (5.9 GiB) — не хватает памяти, раскладка есть в таблице RAM для Ollama.

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

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

Развернуть Ollama

Токены рассуждений: главная особенность R1 на CPU

На видеокарте лишние 700 токенов стоят пары секунд, поэтому в облаке рассуждения почти бесплатны. На процессорном VPS при 6 токенах в секунду те же 700 токенов — две минуты молчания до первого слова ответа. Здесь и ломаются интеграции: бот в Telegram отваливается по таймауту, веб-интерфейс показывает пустой экран, в логах ничего. Отделить размышления от ответа умеет сам Ollama — в нативном API за это отвечает поле think.

curl -s http://127.0.0.1:11434/api/chat -d '{
  "model":"deepseek-r1:8b",
  "messages":[{"role":"user","content":"Одним предложением: что такое KV-кэш?"}],
  "think":true, "stream":false}' | jq '{think:.message.thinking, answer:.message.content}'

Поставьте "think": false — модель отдаст только ответ; то же делают /set nothink в оболочке и флаг --think=false. Честная оговорка: выключение рассуждений не ускоряет R1, а меняет её качество. Дистилляты обучены думать перед ответом, и на арифметике разница видна сразу. Гасите размышления там, где нужен короткий факт, и оставляйте там, где нужен разбор.

Вторая ловушка — лимит длины ответа. При "options":{"num_predict":256} модель израсходует его весь на размышления и вернёт пустую строку:

{"message":{"role":"assistant","content":""},"done_reason":"length"}

Ошибки нет, ответа тоже: для R1 закладывайте num_predict не меньше 1024. И третье — клиенты, написанные до появления рассуждающих моделей, про поле thinking не знают и печатают пользователю сырой блок <think>...</think>.

Параметры, без которых DeepSeek зацикливается

Официальные рекомендации DeepSeek отличаются от дефолтов Ollama, и игнорировать их дорого: с температурой 0,8 семёрка на длинных ответах уходит в повтор одного абзаца до упора в num_predict.

  • temperature 0.6, top_p 0.95. Рабочий диапазон температуры — 0,5–0,7, и отдельно: не ставьте 0. Жадное декодирование у R1 даёт бесконечное повторение, это написано авторами модели в карточке.
  • Никакого системного промпта. Все инструкции DeepSeek рекомендует помещать в сообщение пользователя: системный промпт сбивает шаблон, который заставляет модель открывать ответ блоком рассуждений.
  • Язык задавайте явно. Дистилляты регулярно уходят в китайский внутри размышлений, а иногда и в ответе. Строка «Думай и отвечай по-русски» в сообщении пользователя снимает проблему; на :1.5b — не всегда.

Собираем свой тег, чтобы не передавать параметры в каждом запросе:

FROM deepseek-r1:8b
PARAMETER temperature 0.6
PARAMETER top_p 0.95
PARAMETER num_ctx 16384
PARAMETER num_predict 2048
PARAMETER repeat_penalty 1.0
ollama create deepseek-ru -f Modelfile && ollama show deepseek-ru --parameters

repeat_penalty 1.0 — не опечатка: в размышлениях модель законно возвращается к одним и тем же формулировкам, и штраф за повторы выталкивает её на посторонние слова. Строку SYSTEM мы намеренно не добавляем.

Скорость и память: замеры на 8 vCPU

Скорость упирается не в частоту процессора, а в пропускную способность памяти: на каждый токен движок читает все веса. При реальных для виртуалки 25–30 ГБ/с и весах 5,2 ГБ это 5–6 токенов в секунду, и удвоение ядер цифру не изменит. Замеры сняты на 8 vCPU / 16 ГБ RAM, Ubuntu 24.04, Q4_K_M, контекст 8k, один пользователь; последняя колонка — время до конца ответа вместе с размышлениями.

Модельprompt evalГенерацияСредний ответ целиком
deepseek-r1:1.5b~190 t/s20–26 t/s25–40 с
deepseek-r1:7b~62 t/s5,5–7 t/s1,5–3 мин
deepseek-r1:8b~58 t/s5–6,5 t/s2–3,5 мин
deepseek-r1:14b~30 t/s2,5–3,5 t/s4–7 мин
deepseek-coder-v2:16b~95 t/s13–18 t/s20–40 с

Последняя строка выглядит ошибкой, но это не она. deepseek-coder-v2:16b — разреженная MoE: на каждый токен активируются несколько экспертов из 64, вместе около 2,4 миллиарда параметров, и через шину памяти проходит примерно 1,5 ГБ вместо 8,9 ГБ. Отсюда скорость трёхмиллиардной модели при качестве на коде, близком к четырнадцатимиллиардной. Плата одна: в RAM всё равно лежит вся модель целиком. Если ваши замеры заметно ниже таблицы — почему Ollama медленно генерирует токены.

Теперь про контекст. Модель объявляет больше сотни тысяч токенов, но Ollama по умолчанию открывает окно 4096 и лишнее молча отрезает с начала промпта — journalctl -u ollama | grep truncat покажет строку msg="truncating input prompt" limit=4096 prompt=9310. У рассуждающей модели окно расходуется вдвое быстрее: каждый ход диалога кладёт в историю не только ответ, но и сотни токенов размышлений, и четырёх тысяч хватает на три реплики. Цена длинного окна — память: KV-кэш стоит 21 МБ на тысячу токенов у :1.5b, 56 МБ у :7b, 144 МБ у :8b и 192 МБ у :14b. Полные 32k у восьмимиллиардной съедают 4,5 ГБ сверх 5,2 ГБ весов, поэтому на 16 ГБ разумный компромисс — 16k, а уменьшить кэш почти вдвое помогают OLLAMA_FLASH_ATTENTION=1 и OLLAMA_KV_CACHE_TYPE=q8_0.

Доступ по API и защита порта 11434

Настройки задавайте через drop-in (sudo systemctl edit ollama, затем systemctl daemon-reload && systemctl restart ollama) — обновление перезаписывает основной юнит целиком:

[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_CONTEXT_LENGTH=16384"
Environment="OLLAMA_KEEP_ALIVE=30m"
Environment="OLLAMA_NUM_PARALLEL=1"
Environment="OLLAMA_FLASH_ATTENTION=1"

Адрес намеренно оставлен локальным: у Ollama нет авторизации вообще, ни ключей, ни паролей. Открытый в интернет порт 11434 сканеры находят за часы, и дальше процессор круглосуточно занят чужими запросами. Наружу — только через прокси с паролем и TLS:

ufw allow 22/tcp && ufw allow 443/tcp && ufw deny 11434/tcp && ufw enable
location / {
    proxy_pass http://127.0.0.1:11434;
    proxy_set_header Host localhost:11434;
    proxy_buffering off;
    proxy_read_timeout 900s;
    auth_basic "llm";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Два параметра настроены именно под рассуждающую модель. proxy_read_timeout 900s — не перестраховка: у :14b при 3 токенах в секунду ответ с размышлениями на 1500 токенов идёт больше восьми минут, а дефолтные 60 секунд рвут соединение с 504 Gateway Time-out ровно тогда, когда модель ещё думает и наружу не ушло ни байта. proxy_buffering off обязателен для стриминга: иначе пользователь смотрит в пустой экран всё время рассуждений. Заголовок Host подменяется потому, что на чужое доменное имя Ollama отвечает 403 Forbidden.

OpenAI-совместимый маршрут — https://ваш-домен/v1, ключ любой непустой. Учтите: поля num_ctx в схеме OpenAI нет и оно игнорируется, а рассуждения старые клиенты видят внутри content тегами <think>. Стыковка с веб-интерфейсом — почему Open WebUI не видит Ollama.

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

Без видеокарты DeepSeek — задача про объём и пропускную способность памяти, а не про частоту процессора. Три честные границы.

Минимум: 4 vCPU, 8 ГБ RAM, 60 ГБ NVMe. Живёт deepseek-r1:1.5b с окном 8–16k: 20–26 токенов в секунду, годится для классификации, извлечения полей и коротких логических задач. Восьмимиллиардная формально влезет, но только с окном 4k и без ничего рядом — ни Open WebUI, ни базы.

Рабочий вариант: 8 vCPU, 16 ГБ RAM, 100–160 ГБ NVMe. Целевая связка: deepseek-r1:8b с контекстом 16k (7,5 ГБ вместе с кэшем) плюс 2–3 ГБ на Open WebUI с Postgres в Docker. Сюда же помещается deepseek-coder-v2:16b — переключаться между ними по задаче реально при OLLAMA_MAX_LOADED_MODELS=1.

Комфорт: 8–16 vCPU, 32 ГБ RAM, от 200 ГБ NVMe. Порог для deepseek-r1:14b, где рассуждения становятся действительно связными: 9 ГБ весов плюс до 6 ГБ кэша при полном окне. Тридцатидвойка тоже влезет, но 2 токена в секунду терпимы только для фоновых задач.

Две границы назову прямо. Настоящая R1 на 671B на VPS не запускается: 404 ГБ весов — это выделенный сервер с 512 ГБ RAM, и даже там при 37 миллиардах активных параметров вы получите 2–4 токена в секунду. И интерактивный чат на несколько человек процессорный сервер не вытянет: рассуждающая модель занимает слот минутами, пять параллельных запросов превращаются в очередь. Живой продукт с пользователями требует GPU.

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

Локация — Лондон, причина прикладная. Веса тянутся из реестра Ollama, и из российских сетей многогигабайтные слои регулярно рвутся на середине, а сборки с Hugging Face через hf.co/... часто не открываются вовсе; с лондонской площадки пятигигабайтная модель приезжает за минуты. Пинг из Москвы 40–60 мс на фоне 6 токенов в секунду незаметен, зато сервер остаётся в европейском правовом контуре — важно, если через модель идут рабочие документы. Франция закрывает тот же сценарий, российская площадка нужна при требованиях 152-ФЗ. Оплата — картой российского банка, по СБП, криптой или токеном MAAT; иностранная карта не нужна. Конфигурацию под конкретную модель подберём на странице заказа.

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

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

Развернуть Ollama

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

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

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

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

Это настоящий DeepSeek или подделка?

Всё, что меньше тега 671b, — дистилляты Qwen и Llama, обученные на рассуждениях R1: думают вслух честно, но знания и архитектура у них чужие. Настоящая R1 весит 404 ГБ в Q4 и на VPS не запускается.

Модель думает две минуты до ответа. Как ускорить?

На CPU рассуждения стоят столько же, сколько обычная генерация, поэтому ускорить их нельзя — можно выключить: "think": false в /api/chat или /set nothink в оболочке. Качество на логических задачах при этом падает, так что отключайте выборочно.

Какой тег брать для русского языка?

deepseek-r1:8b на базе Qwen3 или :14b. Теги :1.5b и :7b собраны на базе Qwen2.5-Math: считают хорошо, а связный русский пишут заметно хуже и чаще срываются в китайский внутри рассуждений.

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

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