SSD Nodes Learn 🎉 VPS от $5.50/мес
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-10

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

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

Почему 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 только с CPU стоит изучить до того, как вы решите держать её постоянно загруженной. Установив keep_alive в значение -1, вы фактически заявляете, что модель важнее всех остальных процессов на сервере. На небольшом VPS это означает прямую конкуренцию с базой данных, веб-приложением и задачами сборки.

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

free -h

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

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

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

Два фактора затрат легко упустить из виду. Увеличенная длина контекста требует большего объема KV cache (кэш ключей и значений — состояние внимания для каждого токена, которое модель хранит при генерации), и этот кэш является частью резидентного объема памяти. Значение 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 — модель больше не должна присутствовать в списке.