0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OllamaのVRAM解放を実測で確認:keep_aliveとollama psの基本

0
Posted at

はじめに

Ollamaでモデルを一度でも走らせると、そのモデルは一定時間GPUメモリ(VRAM)に載ったままになる。動画編集やゲームなど、GPUを他の用途に使いたいときに「いつ解放されるのか」「すぐ解放するにはどうするのか」が気になったので、keep_alive の挙動を実測で確かめた。

環境

  • Windows 11(ビルド 10.0.26200)
  • Ollama 0.40.4(公式アプリ。既定の http://127.0.0.1:11434)
  • モデル: qwen2.5:0.5b(検証用。ロード後のメモリサイズは ollama ps 上936MB)

やったこと

1. まずは既定の挙動を確認

小さなリクエストを1回投げてから、ロード状態を確認する。

$body = @{ model = "qwen2.5:0.5b"; prompt = "ok"; stream = $false; options = @{ num_predict = 3 } } |
  ConvertTo-Json -Depth 5
Invoke-RestMethod -Uri http://127.0.0.1:11434/api/generate -Method Post `
  -Body $body -ContentType "application/json; charset=utf-8" | Out-Null

ollama ps

実行結果:

NAME            ID              SIZE      PROCESSOR    CONTEXT    RUNNER      UNTIL
qwen2.5:0.5b    a8b0c5157701    936 MB    100% GPU     32768      llamacpp    4 minutes from now

UNTIL が「4 minutes from now」。つまり既定では、最後のリクエストから5分間VRAMに残る(表示は残り時間なので4分台に見える。サーバーの起動設定ログにも OLLAMA_KEEP_ALIVE:5m0s と出力される)。

2. keep_alive で保持時間を延ばす

リクエストのJSONに keep_alive を足すと、保持時間を指定できる。

$body = @{ model = "qwen2.5:0.5b"; prompt = "ok"; stream = $false; keep_alive = "30m"; options = @{ num_predict = 3 } } |
  ConvertTo-Json -Depth 5
Invoke-RestMethod -Uri http://127.0.0.1:11434/api/generate -Method Post `
  -Body $body -ContentType "application/json; charset=utf-8" | Out-Null

ollama ps

実行結果:

NAME            ID              SIZE      PROCESSOR    CONTEXT    RUNNER      UNTIL
qwen2.5:0.5b    a8b0c5157701    936 MB    100% GPU     32768      llamacpp    29 minutes from now

UNTIL が30分後に変わった。何度も呼ぶワークロードで毎回ロードし直すのを防ぎたいときに有効だ。

3. keep_alive = "0" で即時解放

逆に「このリクエストの後はすぐ解放してほしい」場合は "0" を指定する。

$body = @{ model = "qwen2.5:0.5b"; prompt = "ok"; stream = $false; keep_alive = "0"; options = @{ num_predict = 3 } } |
  ConvertTo-Json -Depth 5
Invoke-RestMethod -Uri http://127.0.0.1:11434/api/generate -Method Post `
  -Body $body -ContentType "application/json; charset=utf-8" | Out-Null

Start-Sleep -Seconds 2
ollama ps

実行結果:

NAME    ID    SIZE    PROCESSOR    CONTEXT    RUNNER    UNTIL

(ヘッダのみ=ロード中のモデルなし)。リクエスト完了から2秒後にはVRAMから解放されていた。

ハマった点

  1. ollama ps を忘れると状況が分からない。タスクマネージャでGPUメモリの使用量が高止まりしていても、原因がOllamaだと気づきにくい。まず ollama ps を見るのが早い。
  2. UNTIL は「残り時間」表示。既定5分設定でも「4 minutes from now」と表示されるので、一瞬「4分設定?」と混乱した。
  3. 解放はリクエスト完了直後ではなくわずかに遅れる。keep_alive = "0" を指定しても、ps が空になるまで1〜2秒かかった(実測では2秒待って空を確認)。

まとめ

  • 既定では、最後のリクエストから5分間モデルがVRAMに残る(ollama ps で確認可能)。
  • keep_alive = "30m" のように指定すると保持時間を延ばせる。
  • keep_alive = "0" を付けたリクエストを投げれば、バッチ処理の最後に明示的にVRAMを解放できる。
  • GPUを他の作業に譲りたいときは「使い終わりに keep_alive: "0" を1回投げる」を習慣にするとよい。

関連する本

VRAM管理を含む自動運用の全体を一冊にまとめました。第1章・第2章は無料で読めます。

Windowsで動かすローカルLLM自動化:Ollama実測ガイド

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?