Локальные модели на Ubuntu: Ollama без GPU

Ollama · CPU · практика

Поднять локальную языковую модель на обычном VDS без видеокарты можно. Это не замена облачным API для продакшена с нагрузкой, но вполне рабочий вариант для внутренних задач, экспериментов, ботов, которые не должны отправлять данные наружу, или просто чтобы понять, как модель ведёт себя на ограниченном железе. На практике 7–8B модели на CPU отвечают за несколько секунд, а 3B — почти комфортно. Всё, что больше, уже начинает заметно тормозить или требует слишком много памяти.

Что реально нужно по ресурсам

Главное ограничение — оперативная память. Модель должна помещаться в RAM целиком, иначе система уходит в swap и скорость падает до неприемлемой. Примерные ориентиры для квантованных моделей (Q4/Q5):

Процессор влияет на скорость генерации, но не так критично, как память. Четыре ядра — нормальный минимум. Больше ядер помогает, но не линейно. Диск: одна модель 7B занимает 4–5 ГБ. Если планируете держать несколько — закладывайте 20–30 ГБ свободного места. SSD обязателен, на HDD загрузка модели будет долгой.

На практике для большинства задач хватает машины с 8 ГБ RAM и 4 vCPU. На 2 ГБ даже маленькие модели будут страдать. Если VDS совсем слабый, лучше смотреть в сторону облачных API с дешёвыми токенами, чем мучить локальную модель.

Установка Ollama

Официальный скрипт ставит всё необходимое и регистрирует systemd-сервис:

curl -fsSL https://ollama.com/install.sh | sh

После установки проверяем:

systemctl status ollama
ollama --version

Сервис должен быть активен и enabled. Если что-то пошло не так, смотрим логи:

journalctl -u ollama -n 50 --no-pager

Скачать модель:

ollama pull llama3.2:3b
ollama pull qwen2.5:7b
ollama pull mistral:7b

Список доступных моделей и их размеров можно посмотреть на сайте Ollama. Для CPU лучше брать квантованные версии — они и так по умолчанию. После скачивания модель лежит в ~/.ollama/models (или в системной директории, если сервис работает от отдельного пользователя).

Первый запуск и API

Простой интерактивный запуск:

ollama run llama3.2:3b

Или одноразовый запрос:

ollama run llama3.2:3b "Объясни коротко, зачем нужен systemd"

Ollama поднимает HTTP API на порту 11434. По умолчанию слушает только localhost — это правильно. Проверить можно так:

curl http://127.0.0.1:11434/api/tags

Для программного доступа из Python или другого языка используйте официальный клиент или просто HTTP. Пример на Python с библиотекой ollama:

import ollama
response = ollama.chat(model='llama3.2:3b', messages=[
  {'role': 'user', 'content': 'Привет'}
])
print(response['message']['content'])

Если нужно открыть API наружу (например, для другого сервера или локальной машины через туннель), можно переопределить хост. Создаём override для systemd:

mkdir -p /etc/systemd/system/ollama.service.d
cat > /etc/systemd/system/ollama.service.d/override.conf << EOF
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
EOF
systemctl daemon-reload
systemctl restart ollama

После этого API будет доступен по внешнему IP. Делать это стоит только если есть понимание рисков: без авторизации любой может слать запросы и грузить ваш CPU. Варианты защиты — reverse proxy с basic auth, ограничение по IP в firewall, или просто не открывать порт и ходить через SSH-туннель.

Типичные проблемы и как их решать

Модель не загружается или падает с OOM. Не хватает памяти. Смотрим free -h во время попытки запуска. Если swap активно используется — либо уменьшайте размер модели, либо добавляйте RAM. На некоторых VDS swap отключён или очень маленький — тогда процесс просто убивается.

Очень медленные ответы. На CPU это ожидаемо. 7B модель на 4 ядрах может генерировать 5–15 токенов в секунду в зависимости от процессора и длины контекста. Если нужно быстрее — либо меньшая модель (3B), либо облачный API. Параметр num_ctx тоже влияет: чем больше контекст, тем больше памяти и медленнее.

После перезагрузки сервера Ollama не стартует. Проверьте, что сервис enabled: systemctl is-enabled ollama. Если нет — systemctl enable ollama. Иногда мешает отсутствие сети на момент старта; в юните можно добавить After=network-online.target.

Модели занимают слишком много места. Удалить ненужную: ollama rm modelname. Посмотреть размеры можно через ollama list или просто du -sh ~/.ollama.

Нужно несколько моделей одновременно. Ollama держит в памяти ту, которую использовали последней (или несколько, если хватает RAM). При переключении происходит выгрузка/загрузка, что занимает время и память. На слабой машине лучше держать одну рабочую модель.

Когда это имеет смысл, а когда нет

Имеет смысл, если:

Не имеет смысла, если:

На практике я чаще использую локальную модель для вспомогательных задач на сервере (разбор логов, черновики конфигов, внутренние боты), а для всего, что видит пользователь или требует скорости, — внешние API. Комбинация работает лучше, чем попытка заставить CPU тянуть всё.

Дополнительные настройки

Можно задать переменные окружения для тонкой настройки. Например, ограничить количество параллельных запросов или изменить директорию моделей. Полный список есть в документации Ollama. Для большинства случаев дефолтов хватает.

Если планируете использовать вместе с веб-интерфейсом, следующий логичный шаг — Open WebUI. Он даёт нормальные чаты, историю и возможность переключать модели без терминала. Об этом отдельно.

В целом Ollama на CPU — это рабочий инструмент, а не игрушка. Главное — не ожидать от него чудес по скорости и честно оценивать ресурсы машины. На нормальном VDS с 8 ГБ можно спокойно держать одну-две модели и использовать их в своих скриптах и ботах.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

После настройки проверяю автозапуск, доступность логов одной командой и наличие короткой заметки с основными командами. Бэкапы, если используются, должны восстанавливаться. Обновления делаю при возможности проверить результат. Минимальная рабочая конфигурация обычно достаточна для небольших задач и проще в поддержке.

← Все статьи