Заметки

Локальные модели: запускаем Ollama на своём сервере

M
Markabus
·22 августа 2026 г.
Открытый корпус компьютера на столе крупным планом: видеокарта с синей подсветкой и радиатором, рядом монитор с терминалом и мини-сервер со светодиодами

Обращение к облачному API — это счёт за каждый токен и чужой сервер, куда уезжают ваши данные. Для части задач это нормально, для части — нет: черновики договоров, переписка клиентов, внутренние регламенты. Ollama решает проблему в лоб: ставит языковую модель на ваше железо и поднимает рядом HTTP-сервер, к которому код обращается так же, как к OpenAI. Ниже — что нужно от машины, как поставить, как обращаться из кода и где локальный запуск честно проигрывает облаку.

Что такое Ollama и зачем она нужна

Ollama — это менеджер локальных языковых моделей. Одной командой она скачивает модель, подбирает под ваше железо параметры запуска и держит фоновый сервис, который слушает порт 11434. Дальше вы либо общаетесь с моделью в терминале, либо шлёте в этот порт обычные HTTP-запросы из своего приложения.

Три причины, по которым это берут в работу:

  • Данные не покидают контур. Ни промпт, ни ответ никуда не уходят. Для персональных данных и коммерческой тайны это часто единственный допустимый вариант — подробнее в заметке о том, как не слить данные через ИИ.
  • Нет счёта за токены. Вы платите за электричество и амортизацию видеокарты, а не за каждый запрос. Массовая обработка — разметка тысяч тикетов, генерация описаний товаров — на локальной модели становится бесплатной по переменным затратам.
  • Нет лимитов и зависимости от доступности. Никаких 429-х ответов и «сервис недоступен в вашем регионе» — можно молотить в несколько потоков всю ночь.

Цена — качество. Модель, которая помещается в потребительскую видеокарту, слабее топовых закрытых моделей: она хуже держит длинные рассуждения, чаще путается в редких фактах и слабее работает с русским языком. Это не «почти то же самое, но бесплатно», это другой инструмент.

Что нужно от железа

Главный ресурс — память, в которую модель загружается целиком. Если она влезает в видеопамять (VRAM), генерация идёт быстро; если приходится частично держать её в оперативной памяти, скорость падает в разы, но работать будет.

Ориентиры для моделей в квантизации Q4 (веса сжаты примерно до 4 бит на параметр — стандартный компромисс между качеством и размером):

  • 3–4B параметров — около 2–3 ГБ. Пойдёт даже на ноутбуке без дискретной видеокарты. Годится для классификации, извлечения полей, простых переформулировок.
  • 7–9B — около 5–6 ГБ. Рабочая лошадка: 8 ГБ VRAM хватает. Уже прилично суммаризирует и пишет код на уровне «черновик, который надо проверить».
  • 20–30B — 14–20 ГБ. Нужна карта на 24 ГБ или Mac с общей памятью. Например, gpt-oss:20b весит около 14 ГБ и, по документации Ollama, стартует на системах от 16 ГБ памяти.
  • 70B и выше — от 40 ГБ. Это уже серверная территория или несколько карт.

Отдельно про Apple Silicon: на маках оперативная и видеопамять общие, поэтому Mac с 32–64 ГБ тянет модели, для которых на PC понадобилась бы дорогая профессиональная карта. Из дискретных карт лучше всего поддержаны NVIDIA (нужны драйверы CUDA, проверяются командой nvidia-smi), AMD работает через ROCm.

Установка

На Linux — один скрипт:

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

Он ставит бинарник, создаёт системного пользователя ollama и регистрирует сервис systemd, который поднимается при старте машины. На macOS и Windows скачивается обычное приложение с сайта — оно делает то же самое и живёт в трее.

Проверить, что сервис жив:

systemctl status ollama
curl http://localhost:11434

Второй запрос должен вернуть строку Ollama is running. Если ставите на удалённый сервер, все команды ниже удобно гонять через SSH — базовый набор разобран в заметке про повседневные команды SSH.

Первый запуск и базовые команды

Скачать модель и сразу начать диалог:

ollama run gemma3:4b

Первый запуск качает несколько гигабайт, дальше модель берётся с диска. Выход из чата — /bye. Остальной повседневный набор:

ollama pull qwen3:8b     # скачать, не запуская
ollama ls                # что уже лежит на диске
ollama ps                # что сейчас загружено в память
ollama stop qwen3:8b     # выгрузить из памяти
ollama rm qwen3:8b       # удалить с диска
ollama show qwen3:8b     # параметры модели и её шаблон промпта

Команда ollama ps — самая полезная при отладке: она показывает, уехала модель в GPU или осталась в оперативной памяти. Если видите «100% CPU», ждать быстрых ответов не стоит.

HTTP API: как обращаться из кода

Ровно за это Ollama и любят: у неё сразу есть локальный REST API на http://localhost:11434. Простейший запрос на генерацию:

curl http://localhost:11434/api/chat -d '{
  "model": "qwen3:8b",
  "messages": [
    {"role": "system", "content": "Отвечай кратко, по-русски."},
    {"role": "user", "content": "Что делает команда chmod 644?"}
  ],
  "stream": false
}'

С "stream": true ответ придёт потоком построчных JSON-объектов — так работают чаты, где текст печатается по мере генерации. Есть и /api/generate для одиночного промпта без истории, и /api/embed для получения векторов текста — то, что нужно, если строите поиск по своим документам поверх RAG.

OpenAI-совместимый режим

Если код уже написан под OpenAI, переписывать ничего не надо. Ollama отдаёт совместимый интерфейс на /v1/: достаточно подменить базовый URL, а ключ передать любой — он игнорируется.

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1/",
    api_key="ollama",   # значение не проверяется
)

response = client.chat.completions.create(
    model="gpt-oss:20b",
    messages=[{"role": "user", "content": "Привет"}],
)
print(response.choices[0].message.content)

Поддержаны /v1/chat/completions, /v1/completions, /v1/embeddings и /v1/models. Работают стриминг, вызов инструментов и режим JSON — так что структурированный вывод можно получать и от локальной модели, хотя схему она держит менее аккуратно, чем большие облачные.

Настройки, которые понадобятся сразу

Поведение сервиса задаётся переменными окружения. На Linux их прописывают в override для systemd — sudo systemctl edit ollama — в секцию [Service]:

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_MODELS=/mnt/data/ollama"
Environment="OLLAMA_KEEP_ALIVE=-1"
Environment="OLLAMA_CONTEXT_LENGTH=8192"

Что они делают:

  • OLLAMA_HOST — адрес прослушивания. По умолчанию 127.0.0.1, то есть снаружи сервер недоступен. Меняйте, только если понимаете последствия (см. ниже).
  • OLLAMA_MODELS — куда складывать веса. По умолчанию на Linux это /usr/share/ollama/.ollama/models, и системный раздел кончается быстро — модели удобнее держать на отдельном диске.
  • OLLAMA_KEEP_ALIVE — сколько держать модель в памяти после последнего запроса. По умолчанию 5 минут; -1 означает «не выгружать никогда». Для сервиса, к которому обращаются редко, но ждать 20 секунд загрузки не хотят, это ключевая настройка.
  • OLLAMA_CONTEXT_LENGTH — размер контекстного окна, по умолчанию 4096 токенов. Больше контекст — больше памяти под кеш; как это считается, разобрано в заметке про токены и лимиты.

После правки — sudo systemctl restart ollama.

Не выставляйте порт в интернет

У Ollama нет ни аутентификации, ни ограничения запросов: кто дотянулся до порта, тот и хозяин модели. Прописать OLLAMA_HOST=0.0.0.0 и открыть 11434 наружу — значит подарить вычислительные мощности первому же сканеру. Правильный путь: закрыть порт файрволом и пускать трафик через nginx с TLS и проверкой токена, либо оставить сервис на 127.0.0.1, а с рабочей машины ходить через SSH-туннель.

Какую модель взять

Библиотека на ollama.com большая, и выбирать проще по задаче, чем по рейтингам:

  • Универсальный чат и суммаризация — линейки Gemma, Qwen, Llama в размере 7–9B. Qwen заметно лучше остальных ведёт себя на русском.
  • Код — специализированные code-варианты тех же семейств; они обучены на репозиториях и лучше держат синтаксис.
  • Рассуждения — модели с «reasoning»-режимом вроде DeepSeek-R1 и gpt-oss. Отвечают медленнее, потому что сначала генерируют цепочку рассуждений.
  • Эмбеддинги — отдельные маленькие модели, например nomic-embed-text; они не разговаривают, а превращают текст в вектор.

Практичная стратегия — начать с 7–9B и подниматься выше, только если качество не устраивает на реальных примерах. Разница между 8B и 30B на простой классификации часто нулевая, а памяти вторая съедает втрое больше.

Свой пресет через Modelfile

Чтобы не таскать системный промпт в каждый запрос, соберите свою версию модели. Файл Modelfile:

FROM qwen3:8b
PARAMETER temperature 0.3
PARAMETER num_ctx 8192
SYSTEM """Ты технический редактор. Отвечай на русском,
без вводных фраз, только по существу."""

Сборка и запуск:

ollama create redactor -f Modelfile
ollama run redactor

Дальше redactor — обычное имя модели, его можно указывать в API. Удобно, когда одну базовую модель используют несколько сервисов с разными ролями.

Когда локальная модель не подходит

Честный список ограничений: сложные многошаговые рассуждения, работа с длинным контекстом на сотни тысяч токенов, задачи, где ошибка дорого стоит, и качественный перевод на редкие языки — здесь закрытые облачные модели по-прежнему сильно впереди. Если вы выбираете между вариантами, есть сравнение Gemini, Claude и OpenAI.

Разумный компромисс — гибрид: дешёвая массовая работа (классификация, извлечение полей, черновики, эмбеддинги) идёт на локальной модели, а редкие сложные запросы уходят в облако. Ollama такому сценарию не мешает: раз интерфейс совместим с OpenAI, переключение между локальным и облачным провайдером — это смена базового URL и имени модели. В самой Ollama для этого есть и облачные модели с суффиксом :cloud — команды те же, но вычисления уезжают на её серверы; данные при этом покидают ваш контур, так что главного преимущества локального запуска в этом режиме уже нет.

Итог

Ollama превращает «поднять свою модель» из проекта на выходные в три команды: установить, скачать модель, отправить запрос на localhost:11434. Дальше всё решает память — от неё зависит, какую модель вы потяните и с какой скоростью. Начните с 7–9B и OpenAI-совместимого эндпоинта, проверьте на реальных задачах и уже по результату решайте, нужна ли модель побольше, карта помощнее или облако для самых трудных запросов.

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

Q.Сколько оперативной памяти нужно для Ollama?

Зависит от размера модели. В квантизации Q4 модель на 3–4B занимает около 2–3 ГБ, на 7–9B — 5–6 ГБ, на 20–30B — 14–20 ГБ. Например, gpt-oss:20b весит примерно 14 ГБ и, по документации Ollama, стартует на системах от 16 ГБ памяти. Быстрее всего работа идёт, когда модель целиком помещается в видеопамять; проверить это можно командой ollama ps.

Q.Можно ли использовать Ollama вместо OpenAI API без переписывания кода?

Да. Ollama отдаёт OpenAI-совместимый интерфейс на http://localhost:11434/v1/ — достаточно подменить base_url, а ключ передать любой (он игнорируется, обычно пишут 'ollama'). Поддержаны /v1/chat/completions, /v1/completions, /v1/embeddings и /v1/models, работают стриминг, вызов инструментов и JSON-режим.

Q.Безопасно ли открыть порт Ollama наружу?

Нет. У сервиса нет ни аутентификации, ни ограничения числа запросов, поэтому любой, кто дотянулся до порта 11434, сможет использовать вашу модель и посмотреть список установленных. Оставьте сервис на 127.0.0.1 и ходите через SSH-туннель либо поставьте перед ним nginx с TLS и проверкой токена.

Q.Локальная модель заменит ChatGPT или Claude?

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

Источники

Предыдущая
Remote MCP: подключаем сервер по OAuth своими руками

Читайте также

Крупный план рабочего стола разработчика: на экране ноутбука открыто окно OAuth-согласия с запросом разрешений, позади — второй монитор с терминалом и JSON-документом; тёмная графитовая комната, синее свечение только от экранов.Заметки
22 августа 2026 г.

Remote MCP: подключаем сервер по OAuth своими руками

Локальному MCP-серверу хватает ключа в переменной окружения, удалённому — нет. Разбираем, что именно нужно реализовать на своей стороне: метаданные защищённого ресурса, корректные 401 и 403, проверку аудитории токена и новый способ регистрации клиентов CIMD.

Читать →
Монитор на рабочем столе с очередью обращений в поддержку, где каждая заявка помечена цветным ярлыком категорииЗаметки
21 августа 2026 г.

Классификация заявок и обращений с помощью ИИ

Языковая модель раскидывает входящие тикеты по категориям и очередям без разметки датасетов. Разбираем таксономию, промпт, структурированный вывод, порог уверенности, метрики и реальную стоимость обработки.

Читать →
Распечатанный документ с зачёркнутыми чёрным маркером строками лежит на столе перед монитором с открытым чат-интерфейсом и таблицейЗаметки
20 августа 2026 г.

Как не слить данные через ИИ: правила для бизнеса

Самая частая утечка через ИИ — это не взлом, а обычная вставка клиентской базы в чат. Разбираем четыре канала риска, политику обучения на данных у OpenAI, Anthropic и Google, список запрещённого к отправке и семь шагов, которые закрывают вопрос за неделю.

Читать →