SSD Nodes Learn 🎉 VPS від $5.50/міс
Посібники Matt ConnorВід Matt Connor · Оновлено 2026-08-13

Як не вивантажувати модель Ollama з пам’яті

Ollama вивантажує модель після 5 хвилин бездіяльності. Дізнайтеся, як налаштувати keep_alive, щоб уникнути повторного завантаження навіть після перезапуску.

Чому Ollama вивантажує модель через кілька хвилин?

Ollama зберігає модель у пам’яті протягом п’яти хвилин після останнього запиту, а потім звільняє пам’ять. Під час наступного запиту ваги потрібно знову зчитати з диска та відобразити в RAM або VRAM, тому перед появою першого токена виникає затримка. Через це chat UI або coding agent спочатку працює швидко, потім деякий час неактивний, а наступне повідомлення знову обробляється повільно. Це не помилка. Завершився таймер бездіяльності.

Таймер називається keep_alive. Він діє окремо для кожної моделі та запускається знову після завершення кожного запиту. Модель, яка зараз обробляє запит, ніколи не вивантажується, оскільки сервер видаляє з пам’яті лише модель без активних запитів. Станом на August 2026 значення за замовчуванням становить п’ять хвилин і застосовується до кожної моделі, яку завантажує цей сервер.

Є два способи налаштувати keep_alive: для окремого запиту або як значення за замовчуванням для сервера. Саме systemd drop-in дає змогу зберегти серверне значення за замовчуванням після перезапуску. У цьому посібнику передбачається, що Ollama вже запущено як service. Якщо це не так, спочатку виконайте інструкції зі встановлення 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 від імені окремого користувача з власним середовищем. Середовище вашої оболонки входу та середовище цієї служби не перетинаються. Це найпоширеніша причина, через яку здається, що параметр не працює.

Збережіть налаштування після перезапуску за допомогою drop-in для systemd

sudo systemctl edit ollama.service

Редактор відкривається з двома маркерами коментарів. Вводьте текст між ними: systemd відкидає все, що записано нижче другого маркера.

[Service]
Environment="OLLAMA_KEEP_ALIVE=30m"

Під час збереження створюється /etc/systemd/system/ollama.service.d/override.conf. Це drop-in, а не редагування встановленого unit-файла, тому оновлення пакета Ollama, яке замінює ollama.service, не змінить ваше налаштування. Якщо drop-in і unit-файли для вас нові, посібник із сервісів і таймерів systemd пояснює принцип їхньої роботи.

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

Остання команда виводить середовище, з яким сервіс фактично запуститься. Якщо OLLAMA_KEEP_ALIVE=30m відсутній у цьому рядку, drop-in не застосовано. Майже завжди причина полягає у відсутньому заголовку [Service] або в рядках, введених нижче маркера. Сам перезапуск вивантажує всі завантажені моделі, тому наступний запит завантажить модель із нуля. Виконайте попередній виклик попереднього завантаження, щоб прогріти модель.

Скільки коштує постійно утримувати модель у пам’яті

Стовпчик SIZE у ollama ps показує пам’ять, зайняту протягом усього періоду простою, а не лише під час обробки запиту. Модель 8B із 4-бітним квантуванням займає приблизно 5–6 GB. Модель 27B — це вже інший масштаб, тому розрахунок пам’яті для запуску моделі на VPS лише з CPU варто виконати до рішення постійно утримувати її в пам’яті. Установивши keep_alive у значення -1, ви назавжди вирішуєте, що модель важливіша за все інше на сервері. На невеликому VPS це безпосередньо зменшує ресурси, доступні базі даних, вебзастосунку та завданням збірки.

Перевіряйте фактичні значення, а не покладайтеся на оцінку. Виконайте цю команду, коли модель завантажена, а потім ще раз після ollama stop:

free -h

Стовпчик available показує обсяг пам’яті, який kernel ще може виділити новому процесу. На сервері з GPU NVIDIA nvidia-smi показує таку саму ситуацію у VRAM. Якщо на сервері закінчується пам’ять, kernel завершує процес, щоб звільнити ресурси:

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

Рядок із назвою ollama означає, що жертвою став сервер моделі. Рядок із назвою вашої бази даних означає, що модель отримала ресурси, а важливий для вас процес було завершено. Обидва результати спричиняє те саме рішення: тривалий період утримання моделі в пам’яті на сервері без запасу ресурсів.

Є дві витрати, які легко не врахувати. Більша довжина контексту резервує більший KV cache (key value cache — стан уваги для кожного токена, який модель зберігає під час генерації), і цей кеш входить до обсягу постійно зайнятої пам’яті. Значення OLLAMA_NUM_PARALLEL понад 1 резервує цей кеш окремо для кожного паралельного слоту. Якщо ви плануєте обслуговувати кількох користувачів однією моделлю, розраховуйте пам’ять для слотів, а не лише для ваг моделі.

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

Негайне вивантаження моделі

ollama stop qwen3:8b

Команда завершується без виводу, а модель зникає з ollama ps. Для імені, яке не завантажене, повертається couldn't find model "qwen3:8b" to stop. У API це запит без промпту, у якому 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 обмежує кількість моделей, які можуть одночасно залишатися завантаженими. Станом на August 2026 значення за замовчуванням становить три моделі на GPU або три моделі на сервері лише з CPU. Обмеження рахує моделі, але фактичним лімітом є пам’ять, тому другій великій моделі може не вистачити місця задовго до досягнення значення три.

Якщо запитується нова модель і для неї недостатньо пам’яті, планувальник вивантажує одну з уже завантажених моделей, щоб звільнити місце. Він надає перевагу моделі без активного запиту та може витіснити модель, у якої ще не завершився таймер, зокрема модель, завантажену з -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 показує, що саме завантажено, незалежно від того, що має бути завантажено згідно з конфігураційним файлом.

Якщо редактор або агент керує вашим сервером, перевірте, що саме надсилає цей клієнт, перш ніж звинувачувати сервер. Підключення coding agent до власного сервера 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 надішліть запит без prompt із параметром "keep_alive": 0. У відповіді буде "done_reason": "unload". Перевірте результат за допомогою ollama ps: модель більше не має відображатися у списку.