14. Ollamaにおけるコンテキスト長拡張時のリソースと性能のトレードオフ
LLMの「記憶力」と計算リソースの直接的な関係
LLMの性能を向上させる一つの方法は、より多くの情報を一度に参照させることです。これが「コンテキスト長」の概念です。しかし、この「記憶力」の向上は、単にパラメータを増やすだけでなく、実行時のメモリ(特にVRAM)と計算時間(レイテンシ)に直接的な負荷をかけます。
コンテキスト長(num_ctx)の役割と仕組み
num_ctxは、モデルが一度の推論で参照できるトークン数の上限を定義します。この値が大きくなると、モデルはより長い文脈を保持し、一貫した応答や複雑な指示の理解が可能になります。これは、単にメモリを確保するだけでなく、Attention機構の計算量が増大することを意味します。
メモリと計算負荷の増大メカニズム
コンテキスト長を増やすと、主に以下の2点でリソースが逼迫します。
- KVキャッシュの肥大化: 過去のトークン(プロンプトや履歴)のキー・バリューキャッシュ(KV Cache)がメモリ上に保持されます。コンテキスト長が長くなればなるほど、このキャッシュが大きくなり、VRAMを圧迫します。
- Attention計算量の増加: Attention機構の計算量は、コンテキスト長に対して二次関数的に増加する傾向があります。これにより、推論ステップごとの計算負荷が急激に増大し、応答速度が低下します。
適切なnum_ctx設定のための判断基準
「最大値に設定する」ことが最善策ではありません。以下の判断基準に基づいて、最適な値を決定する必要があります。
| 判断基準 | 推奨されるアクション | 考慮すべきトレードオフ |
|---|---|---|
| タスクの性質 | 短いQ&Aや分類なら、最小限のコンテキスト長で十分な場合が多い | リソース消費を抑え、高速な応答性を優先する |
| 複雑な文書処理 | 文書全体を一度に処理する必要がある場合、可能な限り大きく設定する | VRAMが許す限り大きくし、メモリ不足によるクラッシュを防ぐ |
| 対話履歴の管理 | 履歴を要約し、プロンプトに含める(=コンテキスト長を意図的に短く保つ)ことが最良 | 履歴をそのまま渡すと、トークン数が増えすぎて処理が重くなるため、要約ロジックを組み込む |
まとめ:リソース制約を常に意識した設計が求められる
num_ctxの拡張は、モデルの「記憶容量」を増やす行為ですが、それは同時に「計算コスト」の増大を意味します。常に「このコンテキスト長を維持するために、どれだけのVRAMと時間が必要か」という視点で、必要な最小限のコンテキスト長を特定することが、安定運用における最も重要な設計判断となります。

