Своя языковая модель на сервере — это приватность (данные не уходят в чужие API), предсказуемые расходы и полный контроль. Ollama сделала запуск LLM почти таким же простым, как установку обычного пакета: одна команда — и модель отвечает по HTTP API. GPU-серверы стоят дорого, но для небольших квантованных моделей на 3–8 миллиардов параметров хватает обычного CPU-сервера с достаточным объёмом RAM. В этой статье честно разберём, что реально работает на процессоре, как это настроить и на какую скорость рассчитывать.
Сразу честно: что даёт CPU без GPU
Начнём с главного, чтобы не было завышенных ожиданий. На GPU у нас нет — вся генерация идёт на процессоре, и это накладывает ограничения:
- Скорость умеренная. Небольшая квантованная модель на CPU генерирует порядка единиц токенов в секунду — ответ на абзац текста занимает десятки секунд, а не доли секунды, как в облачных API. Точная цифра зависит от модели, квантования и длины контекста.
- Размер моделей — 3–8B. Модели на 3–8 миллиардов параметров в 4-битном квантовании — рабочий диапазон для CPU. Модели на 30B+ технически могут запуститься при достаточной RAM, но скорость станет непригодной для практики.
- RAM решает. Квантованная модель целиком загружается в оперативную память. 8B-модель в кванте Q4 занимает около 5 ГБ, плюс контекст, плюс сама система.
Для каких задач этого достаточно: чат-бот с небольшим потоком сообщений, суммаризация текстов по расписанию, классификация и разметка данных, генерация черновиков, локальный ассистент по документации. Для чего не хватит: продакшн-чат с сотнями одновременных пользователей и задачи, где ответ нужен за секунду.
Выбор сервера
Ориентируемся на память и ядра. Берём тариф Ultra за 1500 ₽/мес: 20 vCPU, 32 ГБ RAM, 192 ГБ NVMe — это VPS на KVM-виртуализации в Москве. Почему именно он:
| Тариф | vCPU | RAM | NVMe | Цена | Подходит для LLM? |
|---|---|---|---|---|---|
| Start | 6 | 8 ГБ | 96 ГБ | 450 ₽ | Только модели ~3B, впритык |
| Pro | 12 | 16 ГБ | 128 ГБ | 750 ₽ | Модели до 7–8B, без запаса |
| Ultra | 20 | 32 ГБ | 192 ГБ | 1500 ₽ | Модели 3–8B комфортно, с запасом на контекст |
32 ГБ RAM позволяют держать в памяти 8B-модель с большим контекстом и параллельно гонять само приложение — бота, API-обёртку, базу. 20 vCPU дают llama.cpp (движку под капотом Ollama) достаточно потоков для генерации. NVMe важен на этапе загрузки модели с диска в память: файлы по 4–5 ГБ подгружаются быстро. Подробнее о том, как считать память под разные задачи, — в статье сколько RAM нужно серверу.
KVM-виртуализация здесь принципиальна: ресурсы выделены честно, и долгая 100%-я загрузка CPU при генерации — штатный режим, а не повод для санкций, как бывает на контейнерной виртуализации.
Установка Ollama
Сервер выдаётся за 45–60 секунд. Подключаемся по SSH и ставим Ollama официальным скриптом:
curl -fsSL https://ollama.com/install.sh | sh
# Проверяем, что сервис поднялся
systemctl status ollama
ollama --version
Скрипт создаёт systemd-сервис ollama, который слушает 127.0.0.1:11434. По умолчанию API доступен только локально — это правильно, наружу его открывать без аутентификации не стоит.
Полезные переменные окружения задаются через systemd:
systemctl edit ollama
В открывшемся файле:
[Service]
# Сколько моделей держать в памяти одновременно
Environment="OLLAMA_MAX_LOADED_MODELS=1"
# Сколько параллельных запросов обрабатывать
Environment="OLLAMA_NUM_PARALLEL=1"
# Не выгружать модель из RAM 30 минут после запроса
Environment="OLLAMA_KEEP_ALIVE=30m"
На CPU-сервере параллелизм лучше держать равным 1: два одновременных запроса не ускорят друг друга, а замедлят оба. OLLAMA_KEEP_ALIVE избавляет от повторной загрузки модели с диска — первая генерация после простоя иначе будет заметно дольше.
systemctl daemon-reload && systemctl restart ollama
Какие модели брать
Правило для CPU: 4-битное квантование (Q4_K_M — разумный баланс качества и размера) и 3–8 миллиардов параметров. Ориентиры по семействам небольших моделей:
| Модель | Параметры | RAM (квант Q4) | Сильные стороны |
|---|---|---|---|
| llama3.2:3b | 3B | ~3 ГБ | Быстрая, хороший общий уровень |
| phi3:mini | 3.8B | ~3–4 ГБ | Рассуждения, код |
| qwen2.5:7b | 7B | ~5 ГБ | Хорошо работает с русским языком |
| mistral:7b | 7B | ~5 ГБ | Универсальная рабочая лошадка |
| llama3.1:8b | 8B | ~5–6 ГБ | Качество ответов, длинный контекст |
Загружаем и пробуем:
# Скачает квантованную модель (~5 ГБ) и запустит интерактивный чат
ollama run qwen2.5:7b
# Или без чата — просто скачать заранее
ollama pull llama3.2:3b
# Список локальных моделей и занятого места
ollama list
Практический совет: начните с 3B-модели. Если качество ответов устраивает — вы получили в 1,5–2 раза больше скорости бесплатно. Переходите на 7–8B, только когда маленькая модель ощутимо не справляется с вашей задачей.
Работаем через API
Ollama даёт REST API, совместимый по духу с привычными LLM-API. Проверяем из консоли:
curl http://127.0.0.1:11434/api/generate -d '{
"model": "qwen2.5:7b",
"prompt": "Объясни в двух предложениях, что такое реверс-прокси.",
"stream": false
}'
Из Python удобнее официальная библиотека:
# pip install ollama
import ollama
client = ollama.Client(host="http://127.0.0.1:11434")
response = client.chat(
model="qwen2.5:7b",
messages=[
{"role": "system", "content": "Ты лаконичный технический ассистент. Отвечай по-русски."},
{"role": "user", "content": "Напиши bash-однострочник: найти 10 самых больших файлов в /var."},
],
options={
"temperature": 0.3,
"num_ctx": 4096, # длина контекста; больше контекст — больше RAM и медленнее
},
)
print(response["message"]["content"])
Для длинных ответов включайте стриминг — пользователь видит текст по мере генерации, и умеренная скорость CPU ощущается гораздо комфортнее:
stream = client.chat(
model="qwen2.5:7b",
messages=[{"role": "user", "content": "Составь чек-лист переезда сайта на новый сервер."}],
stream=True,
)
for chunk in stream:
print(chunk["message"]["content"], end="", flush=True)
Эта же связка — основа для практических проектов: можно собрать Telegram-бота с ИИ, который отвечает силами локальной модели, или построить RAG-бота по своим документам — тогда модель будет отвечать на вопросы по вашей базе знаний, а не из общих сведений. Для RAG понадобится векторная база — например, Qdrant для векторного поиска, и 32 ГБ RAM тарифа Ultra как раз позволяют разместить всё на одном сервере.
Тюнинг производительности на CPU
Несколько настроек, которые реально влияют на скорость:
# Число потоков генерации — по числу физически доступных ядер
curl http://127.0.0.1:11434/api/generate -d '{
"model": "qwen2.5:7b",
"prompt": "тест",
"options": {"num_thread": 20, "num_ctx": 2048}
}'
- **
num_thread** — по умолчанию Ollama сама выбирает число потоков, но стоит поэкспериментировать: иногда значение чуть меньше числа vCPU даёт лучший результат, потому что системе тоже нужны ресурсы. - **
num_ctx** — не ставьте контекст больше, чем нужно задаче. Контекст 8192 вместо 2048 заметно увеличивает потребление RAM и замедляет обработку промпта. - Квантование — если модель доступна в нескольких квантах, Q4_K_M почти всегда оптимум для CPU. Q8 качественнее, но в полтора-два раза тяжелее и медленнее.
- Одна модель в памяти — не держите загруженными несколько моделей, если RAM впритык: выгрузка в swap убьёт скорость полностью.
Мониторить нагрузку удобно через htop (загрузка ядер при генерации должна быть равномерно высокой) и free -h (следите, чтобы не начался swap).
Частые вопросы
Насколько медленно это будет на самом деле?
На CPU небольшая квантованная модель выдаёт порядка единиц токенов в секунду. Абзац ответа — десятки секунд. Для чат-бота с умеренным потоком сообщений, фоновой суммаризации, классификации и ночных батч-задач это рабочий режим. Для сценариев «ответ нужен мгновенно и многим сразу» CPU-сервер не подойдёт — тут либо GPU, либо облачные API.
Можно ли запустить модель на 13B или 30B параметров?
В 32 ГБ RAM 13B-модель в кванте Q4 формально поместится, но скорость генерации упадёт до уровня, при котором пользоваться ей всерьёз тяжело. 30B+ на CPU — только ради эксперимента. Практический потолок для комфортной работы на процессоре — 7–8B.
Хватит ли тарифа Start или Pro вместо Ultra?
На Start (8 ГБ RAM) уместится только ~3B-модель, и почти без запаса под ваше приложение. Pro (16 ГБ) потянет 7–8B, но впритык, особенно с длинным контекстом. Ultra с 32 ГБ RAM и 20 vCPU — вариант, при котором модель, контекст и ваш сервис (бот, API, база) живут на одном сервере без борьбы за память.
Безопасно ли открывать Ollama API наружу?
По умолчанию API слушает только localhost — и так и должно оставаться. У Ollama нет встроенной аутентификации, поэтому наружу его выставляют только через реверс-прокси (nginx) с авторизацией или используют изнутри сервера — из вашего бота или бэкенда.
Есть ли тестовый период, чтобы проверить скорость на моей задаче?
Триала нет. Но сервер выдаётся за 45–60 секунд, помесячная оплата — можно взять Ultra на месяц, прогнать свои промпты на паре моделей и принять решение на реальных цифрах, а не на чужих бенчмарках.
Запустите свою LLM за пару минут
Ollama на CPU — это честный компромисс: умеренная скорость в обмен на приватность, контроль и фиксированную цену без оплаты за токены. Тариф Ultra за 1500 ₽/мес — 20 vCPU, 32 ГБ RAM и 192 ГБ NVMe на KVM в Москве — комфортно тянет квантованные модели 3–8B вместе с вашим приложением. Выдача сервера за 45–60 секунд. Закажите VPS на https://cheap-host.onl/ — и уже через несколько минут ваша первая локальная модель ответит на первый промпт.