SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-26

Как закрепить модель в памяти Ollama через keep_alive

По умолчанию Ollama выгружает модель через 5 минут простоя, что вызывает задержку при новом запросе. Узнайте, как настроить параметр keep_alive в systemd для постоянной работы.

Почему Ollama выгружает модель через несколько минут?

Ollama удерживает модель в оперативной памяти в течение пяти минут после последнего запроса, после чего освобождает её. Следующий запрос вынуждает систему снова считывать веса с диска и отображать их в RAM или VRAM, из-за чего возникает задержка перед генерацией первого токена. Именно поэтому интерфейс чата или агент для написания кода работают быстро, затем на некоторое время замирают, а при отправке следующего сообщения снова работают медленно. Никакой ошибки нет. Просто истёк таймер простоя.

Этот таймер называется keep_alive. Он настраивается для каждой модели отдельно, и его отсчёт перезапускается после завершения каждого запроса. Модель, которая в данный момент обрабатывает запрос, никогда не выгружается, так как сервер завершает работу только тех моделей, для которых нет активных запросов. По состоянию на август 2026 года значение по умолчанию составляет пять минут, и оно применяется к каждой модели, которую загружает сервер.

Существует два способа задать keep_alive: для отдельного запроса или в качестве значения по умолчанию для всего сервера. Использование drop-in файла systemd позволяет сохранить настройки сервера после перезагрузки. В этом руководстве предполагается, что Ollama уже запущена как служба. Если это не так, начните с установки Ollama на VPS и вернитесь сюда.

Какие модели загружены в данный момент и когда истекает срок их хранения?

ollama ps
NAME        ID              SIZE      PROCESSOR    CONTEXT    UNTIL
qwen3:8b    500a1f067a9f    6.6 GB    100% GPU     4096       4 minutes from now

Пустой вывод означает, что в памяти ничего нет, поэтому следующий запрос потребует полной загрузки. PROCESSOR показывает, где размещены веса. 100% GPU и 100% CPU — это стандартные варианты. Разделение, такое как 25%/75% CPU/GPU, означает, что модель не поместилась в VRAM, поэтому часть её выполняется на процессоре, что замедляет генерацию.

UNTIL — это таймер обратного отсчета, который выводит относительное время, например 4 minutes from now. Он выводит Forever, если модель была загружена с отрицательным значением keep_alive. Он выводит Stopping... в течение короткого промежутка времени, пока сервер выполняет выгрузку.

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

curl -s http://localhost:11434/api/ps

Каждая запись содержит expires_at, абсолютную временную метку, например 2026-08-09T14:38:31.83753Z, и size_vram — часть модели, находящуюся в памяти GPU. Значение size_vram, равное 0, означает, что модель выполняется на CPU.

Реальная стоимость перезагрузки

Не пытайтесь угадать её. Ollama сообщает время загрузки в каждом ответе в поле load_duration, в наносекундах.

sudo apt install -y jq
ollama stop qwen3:8b
curl -s http://localhost:11434/api/generate -d '{"model": "qwen3:8b", "prompt": "hi", "stream": false}' | jq '{load_duration, total_duration}'
curl -s http://localhost:11434/api/generate -d '{"model": "qwen3:8b", "prompt": "hi", "stream": false}' | jq '{load_duration, total_duration}'

Первый вызов загружает модель, поэтому значение load_duration будет большим. Разделите его на 1000000000, чтобы получить время в секундах. Второй вызов выполняется, когда модель уже находится в оперативной памяти, и возвращает гораздо меньшее число. Разница между этими двумя значениями — это то, что платит каждый пользователь после истечения таймера, и именно это является основной причиной изменения keep_alive. Большая часть этой задержки приходится на чтение с диска, поэтому если вы перенесли каталог с моделями на другой том, скорость этого тома определяет минимальное время «холодной» загрузки. Информацию о скорости генерации текста до и после этой паузы см. в разделе как измерить количество токенов в секунду на вашем сервере.

Удержание модели Ollama в оперативной памяти по запросу

Отправьте keep_alive вместе с запросом. Это значение применяется к модели с момента завершения обработки запроса.

curl -s http://localhost:11434/api/chat -d '{
  "model": "qwen3:8b",
  "messages": [{"role": "user", "content": "hello"}],
  "keep_alive": "30m"
}'

Поддерживаются четыре формата значений:

  • строка длительности: "30m", "24h", "90s"
  • обычное число, интерпретируемое как секунды: 3600
  • отрицательное значение, -1 или "-1m", означающее отсутствие тайм-аута простоя
  • 0, означающее выгрузку модели сразу после завершения текущего запроса

Значение, переданное в запросе, переопределяет настройки сервера в обоих направлениях. Это важнее, чем кажется: клиент, отправляющий собственный keep_alive, имеет приоритет над любыми настройками, заданными на сервере.

Вы также можете загрузить модель без генерации ответа. Отправьте только имя модели. Сервер загрузит её и вернёт пустой ответ с кодом "done": true.

curl -s http://localhost:11434/api/generate -d '{"model": "qwen3:8b", "keep_alive": "30m"}'

Эту команду следует выполнять после перезагрузки или после загрузки новой модели, чтобы первый реальный запрос пользователя не тратил время на ожидание загрузки. CLI выполняет ту же задачу с помощью флага:

ollama run --keepalive 30m qwen3:8b "hello"

Настройка постоянной загрузки моделей через OLLAMA_KEEP_ALIVE

Сервер считывает OLLAMA_KEEP_ALIVE при запуске и применяет это значение для всех моделей, у которых не задан собственный параметр. Допускаются те же форматы, что и в поле запроса, поэтому 30m, 3600 и -1 будут работать корректно.

Основная сложность заключается в том, в какой именно среде должна быть задана переменная. Выполнение export OLLAMA_KEEP_ALIVE=30m в вашей SSH-сессии не даст результата, так как пакетная установка запускает сервер как systemd-сервис от имени отдельного пользователя с собственной средой выполнения. Ваша оболочка входа и этот сервис никак не взаимодействуют. Это самая частая причина, по которой настройка кажется проигнорированной.

Обеспечение автозапуска после перезагрузки с помощью systemd drop-in

sudo systemctl edit ollama.service

Редактор откроется с двумя комментариями. Вводите данные между ними: systemd игнорирует всё, что написано после второго маркера.

[Service]
Environment="OLLAMA_KEEP_ALIVE=30m"

Сохранение записывает /etc/systemd/system/ollama.service.d/override.conf. Это drop-in файл, а не изменение поставляемого юнита, поэтому обновление пакета Ollama, которое заменяет ollama.service, не затронет ваши настройки. Если вы впервые работаете с drop-in файлами и файлами юнитов, руководство по сервисам и таймерам systemd описывает принципы их работы.

sudo systemctl daemon-reload
sudo systemctl restart ollama
systemctl show ollama --property=Environment

Последняя команда выводит переменные окружения, с которыми сервис будет запущен фактически. Если OLLAMA_KEEP_ALIVE=30m отсутствует в этой строке, значит, drop-in не применился. Причина почти всегда заключается в отсутствии заголовка [Service] или в том, что строки были введены после маркера. Перезагрузка выгружает все загруженные модели, поэтому следующий запрос будет выполнен с «холодным» стартом. Выполните предварительную загрузку (preload) с помощью команды выше, чтобы подготовить систему.

Цена удержания модели в оперативной памяти

Столбец SIZE в ollama ps показывает объем памяти, занятый в течение всего окна ожидания, а не только во время обработки запроса. Модель размером 8B с 4-битной квантованием занимает около 5–6 GB. С моделью 27B ситуация иная, и расчеты памяти для запуска такой модели на VPS без GPU стоит изучить до того, как вы решите держать её в памяти постоянно. Установив keep_alive в значение -1, вы фактически отдаете приоритет модели перед всеми остальными процессами на сервере. На небольшом VPS это означает прямой конфликт с базой данных, веб-приложением и задачами сборки.

Следите за реальными показателями, а не доверяйте оценкам. Выполните эту команду, пока модель загружена, а затем повторно после ollama stop:

free -h

Столбец available показывает объем памяти, который ядро может выделить новому процессу. На сервере с NVIDIA GPU команда nvidia-smi демонстрирует аналогичную картину для VRAM. Если память заканчивается, ядро принудительно завершает процесс для её освобождения:

sudo dmesg -T | grep -i "out of memory"

Строка с упоминанием ollama означает, что сервер модели стал жертвой. Если в строке указана ваша база данных, значит, модель «победила», а важный для вас сервис был остановлен. Оба результата — следствие одного решения: слишком длинное окно keep-alive на сервере без запаса ресурсов.

Есть два скрытых расхода, которые легко упустить. Увеличение длины контекста резервирует больший KV-кэш (key value cache, состояние внимания для каждого токена, которое модель хранит во время генерации), и этот кэш является частью резидентного объема памяти. Его размер зависит от num_ctx, поэтому увеличение окна контекста повышает объем памяти, удерживаемый моделью в течение всего периода простоя, а не только во время генерации ответа. Значение OLLAMA_NUM_PARALLEL выше 1 резервирует этот кэш для каждого параллельного слота. Если вы планируете обслуживать нескольких пользователей одной моделью, рассчитывайте память с учетом количества слотов, а не только весов модели.

Разумный стандарт: одна модель на сервере с запасом ресурсов может использовать -1. На сервере общего назначения лучше использовать окно, покрывающее паузы между запросами, например 30m, чтобы память освобождалась, когда вы прекращаете работу.

Немедленная выгрузка модели

ollama stop qwen3:8b

Команда выполняется без вывода, и модель исчезает из ollama ps. Если указать имя модели, которая не была загружена, вернется couldn't find model "qwen3:8b" to stop. API-запрос выполняется без параметра prompt, а keep_alive устанавливается в 0:

curl -s http://localhost:11434/api/chat -d '{"model": "qwen3:8b", "messages": [], "keep_alive": 0}'

Ответ содержит "done_reason": "unload". Используйте этот метод вместо перезапуска сервиса. systemctl restart ollama также освобождает память, но при этом выгружает все остальные модели и прерывает выполнение всех текущих запросов.

Запуск нескольких моделей на одном сервере

OLLAMA_MAX_LOADED_MODELS ограничивает количество моделей, одновременно находящихся в памяти. По состоянию на август 2026 года значение по умолчанию составляет три модели на GPU или три на сервере без GPU. Лимит учитывает количество моделей, однако реальным ограничением является объем памяти, поэтому в загрузке второй крупной модели может быть отказано задолго до достижения лимита в три единицы.

Когда поступает запрос на новую модель, а свободной памяти недостаточно, планировщик выгружает одну из уже загруженных моделей, чтобы освободить место. Приоритет отдается модели, для которой нет активных запросов. Планировщик может вытеснить даже ту модель, таймер которой еще не истек, включая модель, загруженную с параметром -1. Таким образом, отрицательное значение keep_alive означает отсутствие тайм-аута простоя. Это не закрепляет веса модели в памяти при поступлении запроса к другой модели.

Это решение фиксируется в логах на уровне debug. Добавьте вторую строку Environment="OLLAMA_DEBUG=1" в тот же файл конфигурации (drop-in), перезапустите службу и отслеживайте вывод:

sudo journalctl -u ollama -f

Строка о выгрузке исполнителя (runner) для освобождения места, расположенная рядом с запросом, который вызвал это действие, означает, что эти две модели не могут одновременно разместиться на данном оборудовании. Решение заключается в уменьшении количества моделей на этом сервере, либо в установке длительного окна ожидания для модели, которая должна отвечать быстро, и использовании 0 для модели, к которой вы обращаетесь редко.

Рекомендации, актуальные после обновления

Ollama выпускает обновления часто, и значения по умолчанию меняются. Проверяйте текущую сборку, а не полагайтесь на запомненные цифры:

ollama --version
ollama serve --help

ollama serve --help содержит список переменных окружения, которые считывает данная сборка, включая OLLAMA_KEEP_ALIVE. Два правила остаются неизменными во всех версиях, на них можно опираться. Значение в запросе имеет приоритет над значением по умолчанию на сервере. А ollama ps — это достоверный источник информации о том, что именно загружено, независимо от того, что указано в конфигурационном файле.

Если вашим сервером управляет редактор или агент, проверьте, что именно отправляет клиент, прежде чем винить сервер. В разделе Настройка агента для работы с вашим сервером Ollama описано, где именно хранятся эти параметры запросов.

FAQ

Почему Ollama выгружает мою модель через 5 минут?

Пять минут — это значение по умолчанию для keep_alive, таймера простоя, который Ollama запускает после завершения запроса. По истечении этого времени сервер освобождает веса модели, поэтому следующий запрос вызывает их повторную загрузку с диска, что и создает ощутимую задержку. Увеличьте это время для одного запроса, передав "keep_alive": "30m" в теле JSON, или для всего сервера с помощью переменной окружения OLLAMA_KEEP_ALIVE.

Как постоянно держать модель Ollama в оперативной памяти?

Используйте отрицательное значение: "keep_alive": -1 в запросе или OLLAMA_KEEP_ALIVE=-1 для сервера. После этого ollama ps будет отображать Forever в столбце UNTIL. Это действие отключает таймер простоя, но не более того. Если поступит запрос на другую модель, а свободной памяти будет недостаточно, планировщик всё равно выгрузит текущую модель, чтобы освободить место.

Почему параметр OLLAMA_KEEP_ALIVE игнорируется?

Проверьте, где именно вы его задали. Выполните systemctl show ollama --property=Environment. Если переменной нет в выводе, значит, сервер её не получил, так как переменная, экспортированная в вашей оболочке, не передается в systemd-сервис. Установите её через sudo systemctl edit ollama.service, затем выполните sudo systemctl daemon-reload и sudo systemctl restart ollama. Другая причина — клиент, который отправляет собственный параметр keep_alive в запросе, что переопределяет настройки сервера по умолчанию.

Как освободить память без перезапуска Ollama?

ollama stop qwen3:8b немедленно выгружает конкретную модель, оставляя сервер и все остальные загруженные модели в рабочем состоянии. Через API отправьте запрос без промпта и с "keep_alive": 0; в ответ придет "done_reason": "unload". Проверьте результат с помощью ollama ps — модель больше не должна присутствовать в списке.