PR

RTX 5080でOllamaのVRAMが空かない?XServer VPSでkeep_alive 0秒・5分を実測

【PR】この記事にはA8.netのアフィリエイト広告を含みます。

先に結論:Ollamaのモデルをすぐ解放したい単発処理では、APIリクエストにkeep_alive: 0を明示するのが有効でした。XServer VPSQwen3 0.6Bを実測すると、0秒条件は応答直後にモデル0件、5分条件は約1.0GiBを保持し、300秒では常駐、302秒で解放されました。一方、常駐中の2回目は総所要時間が約5.5倍速くなります。RTX 5080VRAMを直接検証したわけではないため、判定は一部解決です。

2026年9月1日、XServer VPS 4GBプランにOllama 0.33.2の隔離コンテナを起動し、keep_alive=0s5mだけを変えて比較しました。/api/psDocker cgroupmemory.current、ホストのMemAvailable、APIのロード時間を満了まで記録しています。

RTX 5080でもOllamaVRAMが空かないのはなぜ?

使い終わったモデルがkeep-alive期間中に常駐しているか、別のアプリや定期処理が期限前にモデルを再呼び出している可能性があります。Ollamaはモデルを既定で5分間メモリに保持するため、プロセスが正常でも次の大きなモデル用の空きが少なく見えることがあります。

ただし、VRAM不足の原因はkeep-aliveだけではありません。モデル本体、コンテキスト、KVキャッシュ、複数モデル、他のGPUアプリも確認が必要です。

ZennRTX 5080実例では何が起きた?

Zennの「OLLAMA_KEEP_ALIVEが正しくても、VRAMは空かないことがある|Windowsでの実例」では、RTX 5080の総VRAM 16.3GBに対し、使用13.6GB、空き2.3GBだったと報告されています。ollama psでは3モデル合計9.6GBが残り、2分おきの画面監視などが5分の期限前に再呼び出ししていました。

同記事では、単発バッチにkeep_alive: 0を明示した結果、VRAM使用量が13.6GBから2.5GBへ減ったとしています。これは同記事のWindows 11・RTX 5080環境での結果であり、今回のVPS測定値とは混ぜません。

RedditではRTX 508016GB VRAMにどんな悩みがある?

Redditr/ollamaには「16GB VRAM for mode agent」という相談があります。投稿者はCursorのようなローカル開発支援を期待したものの、16GB VRAMで使えるモデル選びに悩んでいます。コメントには、RTX 5080128GB RAM・Windows 11でQwen3 14Bを使う例もあります。

別の「How to keep ollama from unloading model out of memory」では、逆にモデルを常駐させて冷間ロードを避けたい悩みが共有されています。つまりkeep-aliveは、短ければ常に正解ではありません。

[PR]
VPSでいろいろ試すなら『XServer VPS』

Ollama公式のkeep_alive仕様は?

Ollama公式FAQによると、モデルは既定で5分間メモリに保持されます。APIのkeep_aliveには期間文字列、秒数、負数、0を指定でき、0は応答生成後に即時アンロード、負数は常駐です。

設定例 意味 向く処理
0 / 0s 応答後に解放 低頻度の単発バッチ
60s 1分保持 短い連続処理
5m 5分保持 対話・頻繁な呼び出し
-1 常駐 専用機で常用するモデル

APIのkeep_aliveはサーバー環境変数OLLAMA_KEEP_ALIVEより優先されます。全ジョブを一律にせず、呼び出し側が用途に合わせて指定できます。

XServer VPSRTX 5080VRAM問題を再現できる?

VRAM問題そのものは再現できません。今回のXServer VPSにはNVIDIA GPUがなく、DockerGPU DeviceRequestsnullです。測定したのはCPU推論時のRAMです。

一方、モデルの常駐・期限延長・アンロード・次回初動というOllamaのライフサイクルは同じAPIで観察できます。高価なGPU PCを買う前に、制御方法、ログ項目、ジョブ設計を小さなモデルで確認する用途には使えます。

実験前のXServer VPS状態

項目 実験前
契約構成 4 vCPU / 4GB RAM / 150GB NVMe SSD
RAM 627MB used / 3.47GB available
swap 131MB / 2.15GB
ストレージ 15.52GB / 154.99GB(11%)
公開API database=ok、artifact_storage=ok

Dockerはどのように隔離した?

設定
コンテナ llmo-exp-08-keepalive
Ollama / モデル 0.33.2 / qwen3:0.6b Q4_K_M
CPU 2 vCPU上限
RAM 2GiB上限、追加swapなし
pids 256上限
API 127.0.0.1:11441のみ
モデル保存 既存Docker volumeを再利用

公開中のCaddyFastAPIPostgreSQLは停止せず、検証用コンテナだけを追加しました。Ollamaのポートは外部公開していません。

比較条件はどうそろえた?

同じ英語プロンプト、temperature 0seed 42、最大128トークン、context 4096、2スレッド、thinking無効、非ストリーミングに固定しました。変更したのはkeep_aliveだけです。

測定対象 方法
モデル常駐 GET /api/psmodels件数とexpires_at
コンテナRAM cgroupのmemory.current
VPS空きRAM /proc/meminfoのMemAvailable
初動 APIのload_duration
総所要時間 APIのtotal_duration

keep_alive 0秒と5分の実測結果

条件 応答後モデル 応答後memory.current 解放
0秒 0件 32,976,896 bytes 応答直後に確認
0秒・2秒後 0件 26,255,360 bytes(25.04MiB) 解放済み
5分・常駐直後 1件 1,079,316,480 bytes(1.005GiB) 未解放
5分・300秒 1件 1,067,704,320 bytes 未解放
5分・302秒 0件 15,261,696 bytes 解放を確認

常駐時から302秒時点までに1,003.69MiB、98.57%減りました。ホストのMemAvailableは約1,030.89MiB増えています。監視間隔が2秒のため、解放は300秒超〜302秒以内です。

5分の間、モデルは本当に残り続けた?

30、60、90、120、150、180、210、240、270、285秒でモデル1件を確認しました。expires_atは全測定で同じ値のままで、300秒でも1件、302秒で0件になりました。

経過 models container RAMの目安
0秒 1 約1.005GiB
150秒 1 約1.00GiB
285秒 1 約1.00GiB
300秒 1 約1.00GiB
302秒 0 約14.55MiB

この実験中は別プロセスから呼び出していないため、期限は延長されませんでした。定期エージェントが5分より短い間隔で呼ぶ運用では、期限が毎回更新されて事実上常駐し続けます。

モデルを残すと次の応答はどれだけ速い?

状態 load_duration total_duration
5分・初回 1.314875秒 1.818051秒
5分・常駐中の2回目 0.000847秒 0.330410秒
満了後の再実行 1.565753秒 2.063675秒

2回目のロード時間は99.94%短く、約1,552倍の差でした。総所要時間も81.83%短く、約5.50倍です。keep-aliveを0にするとメモリは空きますが、次回はモデルを再ロードします。

AIエージェントではkeep_aliveをどう設計する?

ジョブ 推奨の考え方 理由
1時間おきの料金調査 0 待ち時間より解放を優先
数枚のスクリーンショット解析 30〜60秒 連続処理中だけ再利用
対話型の調査補助 5分前後 次の指示へ素早く応答
専用機の常用モデル -1を検討 冷間ロードを避ける

VPSを司令塔にする場合、ジョブ定義へmodelkeep_alive、開始・終了時刻、load_duration、処理後の/api/psを保存すると、メモリが空かない原因を後から追えます。

初心者が迷いやすいポイントは?

迷いやすい点 確認方法
環境変数を変えたのに挙動が違う APIリクエストのkeep_aliveが上書きしていないか確認
5分待っても解放されない ollama psを複数回見てUNTILが延びていないか確認
モデルサイズだけならVRAMへ載るはず コンテキスト、KVキャッシュ、他モデル、他アプリも測る
OSの空きメモリだけ見て判断 /api/psとGPUならnvidia-smiも併用
keep_alive=0なら最速になる 次回ロード時間との交換条件を測る

実験中に起きた問題と解決方法

実験前のポート確認で、Windows PowerShellからSSHへ渡したawk式の$4がローカル側で展開され、awkの構文エラーになりました。ssの結果をgrep ':11441 'で確認する方法へ切り替え、11441番が空いていることを確認してから起動しました。

測定そのものではAPIエラー、OOM、コンテナ再起動は発生していません。

XServer VPSで便利だった点・分かりにくかった点

観点 実体験
便利 既存サービスを止めず、CPURAM・ポートを制限したDocker実験を追加できた
便利 5分間の無人監視をSSHで継続し、時系列ログを取れた
便利 モデル用volumeを再利用し、毎回ダウンロードせず比較できた
分かりにくい GPUがないためVRAMの結論へ読み替えてはいけない
分かりにくい LinuxコマンドをPowerShell経由で渡すと$や引用符の解釈が増える

既存のAI調査基盤に影響はなかった?

実験中も公開ヘルスチェックはdatabase=okartifact_storage=okでした。CaddyFastAPIPostgreSQLhealthy、検証コンテナのOOMKilledfalseです。

終了後、検証専用コンテナとVPS上の一時スクリプトを削除しました。再現用のQwen3モデルvolumeは残しています。実験後のVPSRAM 611MB used3.48GB available、ストレージ使用率11%でした。

よくある質問

OLLAMA_KEEP_ALIVE=0だけで十分?

サーバー全体の既定値にはなりますが、APIリクエストのkeep_aliveが優先されます。単発ジョブ側にも明示すると意図を記録しやすくなります。

5分より短い値も使える?

60sなどの期間文字列や秒数を指定できます。複数回の連続処理では、処理間隔より少し長い値が候補です。

XServer VPSRTX 5080の代わりになる?

GPU性能やVRAM実測の代わりにはなりません。エージェントの司令塔、API設計、モデル常駐制御、ログ収集、CPUで動く小型モデルの検証に向きます。

[PR]
VPSでいろいろ試すなら『XServer VPS』

XServer VPSでこの悩みはどこまで解決する?

判定は一部解決です。RTX 5080VRAMを直接空けた実験ではありませんが、同じOllama APIで0秒なら応答直後にモデル0件、5分なら302秒まで約1.0GiB常駐することを確認できました。さらに、常駐は次回初動を大幅に短縮するため、無条件に0へ変えるのではなくジョブ単位で設計すべきだと分かりました。

AIによる実機スマホ調査システムでは、定期バッチは0、連続画像解析は短時間、対話セッションは5分というように役割を分けます。VPS側で/api/psと呼び出し元を記録すれば、「誰がモデルを起こし続けたか」まで一次情報として残せます。

コメント

タイトルとURLをコピーしました