Як не вивантажувати модель Ollama з пам’яті
Ollama вивантажує модель після 5 хвилин бездіяльності. Дізнайтеся, як налаштувати keep_alive для окремого запиту або сервера, зокрема через systemd.
Чому Ollama вивантажує модель через кілька хвилин?
Ollama зберігає модель у пам’яті протягом п’яти хвилин після останнього запиту, а потім звільняє пам’ять. Наступний запит має знову прочитати ваги з диска та відобразити їх у RAM або VRAM, тому перед появою першого токена виникає затримка. Саме тому chat UI або coding agent спочатку працює швидко, потім певний час неактивний, а наступне повідомлення знову обробляється повільно. Нічого не зламано. Таймер бездіяльності завершився.
Таймер називається keep_alive. Він діє окремо для кожної моделі та запускається знову після завершення кожного запиту. Модель, яка наразі відповідає на запит, не вивантажується, оскільки сервер завершує термін зберігання лише для моделі без активних запитів. Станом на August 2026 значення за замовчуванням становить п’ять хвилин і застосовується до кожної моделі, яку завантажує цей сервер.
keep_alive можна налаштувати у двох місцях: для окремого запиту або як значення за замовчуванням для сервера. Саме systemd drop-in дає змогу зберегти серверне значення за замовчуванням після перезапуску. У цьому посібнику передбачається, що Ollama вже працює як сервіс. Якщо це не так, почніть з встановлення Ollama на VPS і поверніться до цього посібника.
Які моделі зараз завантажені та коли вони вивантажаться?
ollama psNAME 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-файли для вас нові, у посібнику з service і timer для 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 показує обсяг пам’яті, який kernel ще може виділити новому процесу. На сервері з NVIDIA GPU nvidia-smi показує аналогічну ситуацію у VRAM. Якщо на сервері закінчується пам’ять, kernel завершує процес, щоб звільнити ресурси:
sudo dmesg -T | grep -i "out of memory"Рядок із назвою ollama означає, що жертвою став сервер моделі. Рядок із назвою вашої бази даних означає, що модель перемогла, а важливий для вас процес було завершено. Обидва результати спричинені одним рішенням: тривалим періодом утримання моделі на сервері без запасу ресурсів.
Тут легко не врахувати дві витрати. Більша довжина контексту резервує більший KV cache (key value cache, стан уваги для кожного токена, який модель зберігає під час генерації), і цей cache входить до обсягу пам’яті, зайнятого моделлю. Його розмір залежить від num_ctx, тому збільшення вікна контексту збільшує обсяг пам’яті, який модель займає протягом усього періоду простою, а не лише під час формування відповіді. Значення OLLAMA_NUM_PARALLEL понад 1 резервує цей cache окремо для кожного паралельного слота. Якщо ви плануєте обслуговувати кількох користувачів однією моделлю, розраховуйте обсяг пам’яті для всіх слотів, а не лише для ваг моделі.
Практичне значення за замовчуванням: одна модель на сервері із запасом ресурсів може використовувати -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 значення за замовчуванням становить three для кожного GPU або three на системі лише з CPU. Обмеження рахує моделі, але фактичним лімітом є пам’ять. Тому друга велика модель може не завантажитися задовго до досягнення значення three.
Якщо запитується нова модель, а вільної пам’яті для неї недостатньо, планувальник вивантажує одну з уже завантажених моделей, щоб звільнити місце. Він надає перевагу моделі без активного запиту та може вивантажити модель, для якої таймер ще не завершився, зокрема модель, завантажену з -1. Отже, від’ємне значення keep_alive означає відсутність тайм-ауту бездіяльності. Воно не закріплює ваги моделі від запитів іншої моделі.
Це рішення записується в журнал на рівні debug. Додайте другий рядок Environment="OLLAMA_DEBUG=1" до того самого drop-in-файлу, перезапустіть сервіс і стежте за журналом:
sudo journalctl -u ollama -fРядок про вивантаження runner для звільнення місця, розташований поруч із запитом, який це спричинив, означає, що ці дві моделі не можуть одночасно працювати на цьому комп’ютері. Рішення — використовувати менше моделей на цьому сервері або встановити довгий інтервал для моделі, яка має швидко відповідати, і 0 для моделі, яку ви викликаєте рідко.
Настанови, актуальні й після наступного релізу
Ollama часто випускає нові версії, а значення за замовчуванням змінюються. Тому перевіряйте збірку перед собою, а не запам’ятовуйте номери:
ollama --version
ollama serve --helpollama 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 надішліть запит без промпту та з "keep_alive": 0. У відповіді буде "done_reason": "unload". Перевірте результат за допомогою ollama ps: ця модель більше не має відображатися у списку.