Ollamaのモデルがすぐアンロードされる原因とkeep_alive設定手順

Ollamaのモデルがすぐアンロードされる原因とkeep_alive設定手順

※本記事にはプロモーション(広告・アフィリエイトリンク)を含みます。

ローカルで Ollama を使っていると、少し席を外しただけでモデルがメモリから降り、次のリクエストでまた数十秒の読み込みが走る——そんな「すぐアンロードされる」問題を keep_alive の指定で止めるための手順です。
まず原因を切り分け、そのうえで API・環境変数・systemd それぞれでの設定方法を、公式仕様の値とコマンドでまとめます。対象は Linux/macOS でローカルの Ollama サーバーを動かしている人です。

まず現状を確認する(デフォルトは何分か)

Ollama の公式ドキュメントによると、モデルがメモリに留まる時間(keep_alive)のデフォルトは「5分」です(執筆時点)。素の状態なら、最後のリクエストから5分間は常駐するはずです。

もし30秒ほどで降りているなら、どこかで keep_alive が短い値に上書きされているか、VRAM 側の都合で押し出されている可能性が高いと考えられます。まずは現状を見ます。

ollama ps

UNTIL 列に「あと何分で降りるか」が表示されます。ここが極端に短い、あるいは PROCESSOR が GPU ではなく CPU になっているなら、設定や VRAM を疑います。

30秒で降りるときに疑う3つの原因

原因 確認する場所
keep_alive に短い値が設定されている OLLAMA_KEEP_ALIVE 環境変数
呼び出し側アプリが keep_alive を送っている Open WebUI・LangChain などのリクエスト設定
VRAM 不足で別モデルに押し出される ollama ps の PROCESSOR・nvidia-smi

とくに2番目は見落としやすい点です。公式ドキュメントによると、API の keep_alive パラメータは OLLAMA_KEEP_ALIVE 環境変数より優先されます。環境変数を長く設定しても、アプリ側が短い値を送っていればそちらが勝ちます。

3番目は環境によって異なります。GPU を1枚で複数モデルや他アプリと共有している場合、別のモデルがロードされた時点で先のモデルが降りることがある、と考えられます。

設定方法1:リクエストごとに指定する

/api/generate や /api/chat に keep_alive を渡します。1回のリクエストだけ挙動を変えたいときに使います。

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "テスト",
  "keep_alive": "30m"
}'

指定できる値は公式仕様で次のとおりです。

keep_alive の値 意味
"5m" 5分間保持(デフォルト、執筆時点)
"30m" / "24h" 分・時間で指定
3600 秒数で指定(この例は1時間)
0 応答後すぐにアンロード
-1 無期限で常駐

プロンプトを空にして送ると、生成せずにモデルの読み込みだけを先に済ませられます(プリロード)。常駐させたいモデルを起動直後に温めておく用途に使えます。

curl http://localhost:11434/api/generate -d '{"model":"llama3","keep_alive":-1}'

設定方法2:サーバー全体のデフォルトを変える

サーバー全体の既定値は OLLAMA_KEEP_ALIVE 環境変数で決めます。ollama serve のプロセスに渡す必要がある点に注意してください。

手動で起動している場合:

export OLLAMA_KEEP_ALIVE=24h
ollama serve

systemd で常駐させている場合(Linux)は、サービスの上書き設定に書きます。

sudo systemctl edit ollama.service

開いたファイルに次を追記します。

[Service]
Environment="OLLAMA_KEEP_ALIVE=24h"

保存したら反映します。

sudo systemctl daemon-reload
sudo systemctl restart ollama

再起動後にもう一度 ollama ps を叩き、UNTIL が意図どおり伸びているか確認します。ここが変わらないときは、前述のとおりアプリ側が keep_alive を送っていないか(API パラメータが優先される)を疑ってください。

まとめ:次にやる1アクション

まず ollama ps で UNTIL を確認してください。そのうえで常駐させたいなら、OLLAMA_KEEP_ALIVE を -1(無期限)か 24h に設定して Ollama を再起動する——これが最初の一手です。それでも降りる場合は、呼び出し側アプリが送る keep_alive と、nvidia-smi で VRAM の空きを順に確認していくと原因にたどり着きやすくなります。

よくある質問

OllamaのモデルがアンロードされるまでのデフォルトのTTLは?

公式ドキュメントによると、最後のリクエストから5分間メモリに保持されるのがデフォルトです(執筆時点)。30秒ほどで降りる場合は、どこかで短い値に上書きされている可能性が高いです。

環境変数を設定したのに反映されないのはなぜ?

APIの keep_alive パラメータは OLLAMA_KEEP_ALIVE 環境変数より優先されます。Open WebUIなど呼び出し側アプリが短い値を送っていると、環境変数を長くしてもそちらが勝ちます。

モデルをずっとメモリに常駐させたいときは?

keep_alive に -1 を指定すると無期限で常駐します。サーバー全体なら OLLAMA_KEEP_ALIVE=-1、リクエスト単位なら JSON に "keep_alive": -1 を渡します。ただしVRAMの空き次第で押し出されることがあります。