# Ollama keep_alive: загрузка, удержание и выгрузка модели

Источник: https://modelium.tech/zhurnal/ollama-keep-alive/

Параметр keep_alive в запросах Ollama /api/generate и /api/chat определяет, сколько модель остаётся загруженной после ответа: по умолчанию пять минут, 0 означает выгрузку, отрицательное значение — удержание без таймера. Для предзагрузки отправьте пустой запрос, затем проверьте точный тег через /api/ps; при нехватке памяти удержание не гарантирует постоянного присутствия модели.

**Источники: Git-ревизия Ollama **`**42e911b**`**, проверена 4 октября 2026 года.** Команды ниже — документированный сценарий для вашего компьютера; Modelium не запускал модель и не измерял память или задержку. Изменения Ollama после этой ревизии требуют новой проверки [s1](#src-s1)[s5](#src-s5).

## Что меняет keep_alive и когда он нужен?

При обращении к локальной модели Ollama запускает её вычислительный процесс. По умолчанию после ответа модель остаётся загруженной **пять минут**; это позволяет следующим запросам избежать повторной загрузки, если ресурсов достаточно. `keep_alive` управляет временем удержания **после запроса**, а не длиной контекста и не хранением истории чата. Для одного рабочего потока с долгими паузами имеет смысл сначала измерить стоимость повторной загрузки; для ограниченной памяти — настроить своевременную выгрузку. При дефиците ресурсов сервер может вытеснить загруженную модель ради другой, поэтому `-1` не резервирует RAM/VRAM навечно [s1](#src-s1)[s6](#src-s6)[s7](#src-s7).

Маршрут задачи: ваш локальный запрос → конкретный установленный тег модели → доступная RAM/VRAM и число одновременных клиентов → Ollama → ответ и запись в `/api/ps`. Если модель ещё не установлена или сервер не отвечает, начните с [установки Ollama](/zapusk/ollama/) и [проверки API](/zhurnal/ollama-healthcheck/). Размер файла весов не равен минимуму памяти процесса, а ускорение от удержания нужно измерять на собственном устройстве [s1](#src-s1)[s3](#src-s3).

## Какие значения действуют и что важнее: запрос или сервер?

В `/api/generate` и `/api/chat` параметр `keep_alive` может быть строкой длительности (`"10m"`, `"24h"`), числом секунд, **нулём** для выгрузки после ответа или отрицательным значением для удержания без таймера. Если параметр опущен, применяется `OLLAMA_KEEP_ALIVE` сервера; без настройки значение по умолчанию — `5m`. Явный параметр запроса переопределяет переменную сервера. Не смешивайте `"0"` как строку и `0` как число при копировании примеров: здесь используем именно JSON-число `0` [s1](#src-s1)[s3](#src-s3)[s7](#src-s7).

Серверный `OLLAMA_KEEP_ALIVE` меняет стандартную политику для запросов без индивидуального значения; чтобы изменить окружение уже работающего приложения или systemd-сервиса, его нужно корректно сконфигурировать и перезапустить. В документации Ollama есть разные инструкции для macOS, Linux systemd и Windows: редактирование окружения текущего shell **само по себе** не меняет уже запущенный сервер. Прежде чем задавать длительное удержание сразу всем моделям, оцените рабочую конкуренцию и бюджет памяти [s1](#src-s1)[s7](#src-s7).

Длительность не означает гарантию точного момента исчезновения из `/api/ps`. В закреплённом планировщике отсчёт таймера идёт, когда завершившийся запрос делает runner простаивающим; при новых запросах таймер может сбрасываться, а при нехватке ресурсов модель может быть вытеснена раньше. Поэтому фиксируйте время последнего ответа и смотрите фактическое состояние, а не используйте один таймер как SLA [s6](#src-s6).

## Как предзагрузить модель и увидеть её в памяти?

Сначала убедитесь, что Ollama работает на вашем локальном `127.0.0.1:11434`, а выбранный тег уже установлен. Подставьте вместо `ВАШ_ТЕГ` **реальный локальный тег** из `ollama ls`; не указывайте случайную модель, чтобы не запускать незапланированную загрузку весов. Документация Ollama разрешает пустой запрос для предзагрузки через generate или chat. Для короткого разогрева по описанному API отправьте со своей машины: `curl -fsS --max-time 120 http://127.0.0.1:11434/api/generate -d '{"model":"ВАШ_ТЕГ","keep_alive":"10m","stream":false}'`. Тайм-аут клиента 120 секунд — лишь редакционный пример, он может оказаться слишком коротким для вашей машины. Команда не исполнялась Modelium [s1](#src-s1)[s2](#src-s2)[s4](#src-s4).

Теперь выполните `curl -fsS --max-time 10 http://127.0.0.1:11434/api/ps`. В объекте `models` найдите точное имя тега, а также `expires_at` и, если нужен аудит размещения, `size_vram`. Альтернативно `ollama ps` показывает загруженные модели и их процессор; `/api/ps` — список **сейчас загруженных**, а не список установленных тегов. Значение `size_vram` — наблюдение текущего размещения, не минимальное требование видеопамяти. Отсутствие записи после долгого ожидания может быть следствием срока удержания или вытеснения, не доказательством поломки inference [s1](#src-s1)[s2](#src-s2)[s3](#src-s3)[s4](#src-s4)[s6](#src-s6).

Для проверки именно ответа модели пошлите на `/api/generate` короткий запрос с реальным prompt и `"stream":false`, сохранив `keep_alive`, например `curl -fsS --max-time 120 http://127.0.0.1:11434/api/generate -d '{"model":"ВАШ_ТЕГ","prompt":"Ответь одним словом: готово","stream":false,"keep_alive":"10m"}'`. Сверьте поле `done` и текст `response`; метрика `load_duration` в ответе измеряется наносекундами, но её значение без одинаковой нагрузки и серии повторов не является обещанием выигрыша. На используемых модели и железе Modelium таких запросов не делал [s2](#src-s2)[s3](#src-s3).

## Как выгрузить одну модель и проверить результат?

Документированный API-путь — пустой `prompt` плюс `keep_alive: 0` у **точного выбранного тега**: `curl -fsS --max-time 120 http://127.0.0.1:11434/api/generate -d '{"model":"ВАШ_ТЕГ","prompt":"","keep_alive":0}'`. Это команда на выгрузку, а не сброс всех моделей и не удаление файлов. В исходном коде специальная ветка вызывает `expireRunner` для пустого prompt и нулевой длительности; альтернативная команда CLI — `ollama stop ВАШ_ТЕГ`. Не используйте `ollama rm`, если намеревались лишь освободить занятую память: `rm` удаляет установленную модель с диска [s1](#src-s1)[s2](#src-s2)[s4](#src-s4)[s5](#src-s5).

Повторите `GET /api/ps` и проверьте, что **тот же тег** больше не присутствует в `models`. При параллельном активном запросе выгрузка может ожидать завершения работы runner; проверьте список ещё раз спустя короткую паузу и убедитесь, что другое приложение не отправило новый запрос на тот же тег. Сам по себе успешный HTTP-ответ команды на выгрузку не измеряет освобождённые байты RAM/VRAM: при необходимости снимайте системные показатели до и после, сохранив имена процессов и другую нагрузку [s2](#src-s2)[s3](#src-s3)[s6](#src-s6).

## Что делать, если модель неожиданно загружается снова или не выгружается?

- **В **`**/api/ps**`** снова появился тег:** проверьте клиентов, фоновые задачи и реальные повторные запросы. Параметр `keep_alive` отдельного клиента может переопределить настройку сервера; вы не «зафиксировали» модель на всех клиентов одним запросом [s1](#src-s1)[s6](#src-s6).

- **Долгое удержание не работает:** посмотрите установленный `OLLAMA_KEEP_ALIVE`, значение в самом API-запросе, момент последнего ответа и доступные ресурсы. При необходимости планировщик вытесняет idle runner ради другой модели; отрицательное значение — отсутствие обычного таймера, не запрет на вытеснение [s1](#src-s1)[s6](#src-s6)[s7](#src-s7).

- **Освободилась не вся память:** изучите `/api/ps` по остальным моделям и системные показатели. `size_vram` одного runner и файл весов не описывают все буферы приложения и память других процессов. Не объявляйте уменьшение VRAM по одному исчезнувшему имени без измерения [s3](#src-s3)[s6](#src-s6).

- **Повторный ответ медленный:** сравните `load_duration` на одинаковых запросах с холодным и тёплым запуском, а также состояние `/api/ps` до каждого вызова. Параллельная очередь и ограничение памяти могут влиять на задержку независимо от TTL; [гайд о параллельных запросах](/zhurnal/ollama-parallelnye-zaprosy/) помогает отделить эти причины [s1](#src-s1)[s2](#src-s2)[s3](#src-s3).

## Какой следующий шаг подтверждает рабочую настройку?

Сохраните тег и версию Ollama, выбранное значение `keep_alive`, способ запуска сервера, время тестового запроса, результат `/api/ps` до и после выгрузки, а также фактический ответ модели. Для приложения перед передачей реальной нагрузки нужна [проверка готовности Ollama](/zhurnal/ollama-healthcheck/): запись в `/api/ps` подтверждает состояние загрузки, но не качество и не успешность inference. Если модель постоянно вытесняется, пересмотрите одновременное число моделей, контекст и ресурсы вместо обещания, что `-1` решит нехватку RAM/VRAM. Это план проверки читателем, а не результат теста Modelium [s1](#src-s1)[s2](#src-s2)[s3](#src-s3)[s6](#src-s6).

## Источники

1. [Ollama FAQ: предзагрузка, keep_alive, очереди и конфигурация](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/docs/faq.mdx) — получено 2026-10-04
2. [Ollama API: generate, chat, unload и список запущенных моделей](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/docs/api.md) — получено 2026-10-04
3. [Ollama OpenAPI: keep_alive, ps, expires_at и load_duration](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/docs/openapi.yaml) — получено 2026-10-04
4. [Ollama CLI: ps, stop, serve и загрузка модели](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/docs/cli.mdx) — получено 2026-10-04
5. [Ollama server/routes.go: специальный запрос на выгрузку](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/server/routes.go) — получено 2026-10-04
6. [Ollama server/sched.go: таймер простоя и вытеснение runner](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/server/sched.go) — получено 2026-10-04
7. [Ollama envconfig/config.go: настройка и значение KeepAlive](https://github.com/ollama/ollama/blob/42e911bc3d05798cad729cb474bf62f378cb2e26/envconfig/config.go) — получено 2026-10-04
