LM Studioはエージェント用途に向かない理由|100枚の画像処理で見えた“隠れ状態”の正体

LM Studioはエージェント用途に向かない理由|100枚の画像処理で見えた“隠れ状態”の正体 TECH

ローカルLLMを使って画像を100枚処理した。
やっていることは単純だ。

1枚ずつ画像を送り、結果を受け取る。

それだけのはずだった。

しかし途中から、メモリが異様な挙動を見せ始める。
そして最終的に行き着いた結論は、少し意外なものだった。

「APIはステートレスでも、推論エンジンはステートレスではない」

タスクマネージャで[メモリ使用量]が徐々に積み上がっていく様子
タスクマネージャで[メモリ使用量]が徐々に積み上がっていく様子

起きた問題|“ステートレスなはず”の処理でメモリが膨らむ

・画像を1枚ずつ送る単純ループ
・会話履歴は送っていない
・毎回独立リクエスト

それにも関わらず、

・LM Studioのメモリ使用量が増え続ける
・一定数で不安定化
・モデルをオフロードすると一気に解放

つまり、

内部で何かが保持されている


検証で分かったこと|設定では完全には止まらない

試したこと:

・Context長を削減
・Unified KV Cache OFF
・GPUオフロードOFF

結果:

・増加は緩やかになる
・しかし完全には止まらない

さらに、

Contextを2048にした場合は安定したが、実際は

推論が失敗していただけ(トークン不足)


原因の正体|KVキャッシュと内部バッファ

ログから見える事実:

request (3002 tokens) exceeds context

つまり画像1枚で数千トークンを消費している。

ここで重要なのは、

・KV cache(注意機構の中間状態)
・画像埋め込み
・推論バッファ

これらが

リクエスト単位で完全に解放されていない

可能性が高いという点だ。


なぜUIでは問題が起きないのか

LM StudioのUIでは、

・New Chat
・Clear Context

で問題が起きない。

これは内部的に

セッション(slot)をリセットしている

ためと考えられる。

しかしAPIでは、

・同じモデルインスタンス
・同じslotの再利用

が行われている可能性が高い。


APIはステートレスでも、実装はステートフル

ここが今回の核心。

API設計 → ステートレス
実装 → ステートフル

これは矛盾ではなく、

高速化のためのキャッシュ戦略

としては正しい。

ただし、

・対話用途 → 有利
・バッチ処理 → 不利

というトレードオフがある。


エージェンティックAIとの相性問題

エージェント的な処理では、

・長時間稼働
・多数の独立タスク
・完全な状態リセット

が必要になる。

つまり必要なのは

「毎回クリーンな推論環境」

しかしLM Studioは

「状態を内部で最適化して使い回す設計」

このズレが今回の問題の正体。


対策|どう使うべきか

実用的な解:

・一定件数ごとにモデルをリセット
・処理を分割して実行
・もしくは別プロセスで分離

あるいは、

・llama.cpp server
・vLLM

など、

状態制御が可能なランタイムを使う

vLLM
High-throughput and memory-efficient inference and serving engine for Large Language Models. Deploy AI faster with state…

結論|問題はLMではなく“実行環境”

今回の結論はシンプルだ。

LM Studioは優れたツールだが、用途を選ぶ

・対話 → 非常に優秀
・検証 → 十分便利
・エージェント処理 → 不向き

これは欠点というより、

設計思想の違いだ。


設計原則|ローカルLLMを“安全に”使うための3つの前提

今回の検証から見えてきたのは、単なるツールの相性ではない。
ローカルLLMを扱う上での、基本的な設計原則だ。

1. 推論は「関数」ではなく「プロセス」である

呼べば消える存在ではない

内部には、

・キャッシュ
・バッファ
・状態

が存在する。

そのため、長時間の連続処理では、必ず何かが蓄積する。


2. 状態は“外で持つ”

エージェント設計では、

状態をモデルに持たせない

これが重要になる。

・履歴 → DB
・進捗 → ログ
・中間結果 → ストレージ

モデルはあくまで「1回の推論」に閉じ込める。


3. 推論環境は「使い捨て」を前提にする

最も重要な考え方がこれだ。

長時間動かし続ける前提にしない

・一定件数で再起動
・プロセス分離
・セッションリセット

これを前提に設計することで、安定性は一気に上がる。

まとめ

ローカルLLMは「関数」ではない。
単に呼べば消える存在ではない。

その裏には、

・状態
・キャッシュ
・最適化

が存在している。

そしてエージェント時代に求められるのは、

モデルの賢さではなく、状態の制御能力

なのかもしれない。


Claude Codeはなぜ重いのか ─ エージェント時代の“見えないコスト”の正体
Claude Codeのコンテキスト消費はなぜ異常に速いのか。エージェント構造・Cache read・Transformerの特性から「見えないコスト」の正体を解説。ローカルAIやCodex型との違いも踏まえ、最適な使い方を考える。
Claude Codeごっこは成立するのか ─ LM Studio × Gemma4で試したローカルAIの現実
Claude Codeはローカルで再現できるのか?LM StudioとGemma4を使い、WSL環境から接続して実験。Markdownエディタは成功、ブロック崩しは未完成。ローカルAIの限界と可能性を検証する。