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のコンテキストサイズを制するものはローカルLLMを制する

0
Posted at

はじめに

Ollamaを使えばClaude CodeやCodexをローカルLLMで動かせる!という情報に心躍らせ、期待を打ち砕かれた人たちに告ぐ。「コンテキストサイズを見直してみなさい!」と。

自分のことかと思った人は以下をお読み下さい。

Ollamaのコンテキストサイズについて

コンテキストサイズとは、モデルが次のトークンを生成するときに参照できる最大トークン数のこと。文章量そのものではなくトークン数で数えるため、日本語・英語・コード・記号の混ざり方によって同じ文字数でも消費トークン数は変わる。

Ollamaでは、この設定は主に num_ctx として扱われる。値を大きくすると、モデルが一度に参照できる情報量が増える。

コンテキストサイズを大きくするメリット:

  • 長い資料や記事をまとめて入力しやすくなる
  • 長い会話履歴を保ったまま回答しやすくなる
  • 複数ファイルのコードや長いログを読ませやすくなる
  • RAG、Web検索、コーディングエージェントなど、大量の文脈を扱う用途で有利になる

コンテキストサイズを大きくするデメリット:

  • 必要なメモリ、特にVRAMの使用量が増える
  • プロンプト処理に時間がかかりやすくなる
  • VRAMに収まらない場合、CPUへオフロードされて大幅に遅くなることがある
  • モデル自体の最大コンテキスト長を超える設定にしても効果は期待しにくい

Ollama公式ドキュメントでは、VRAMに応じたデフォルトの目安として次の値が示されている。

  • 24 GiB未満のVRAM: 4k context
  • 24から48 GiBのVRAM: 32k context
  • 48 GiB以上のVRAM: 256k context

また、Web検索、エージェント、コーディングツールのように大きな文脈を必要とする用途では、少なくとも64,000トークン以上に設定することが推奨されている。

ただし、これは「常に64k以上にすべき」という意味ではない。短いチャットや軽い質問では、4kや8kのほうが速く、安定して動く場合がある。コンテキストサイズは、用途とハードウェアに合わせて調整する性能チューニング項目として扱う。

コンテキストサイズの変更方法

Ollamaのコンテキストサイズは、利用方法に応じて複数の方法で変更できる。

Ollama CLIの実行中に変更する

Ollama CLIを使っている場合は、利用中にsetコマンドで変更する。

/set parameter num_ctx 8192

向いているケース:

  • まず試しに設定を変えたい
  • 用途ごとに大まかな値を切り替えたい

サーバ起動時に環境変数で指定する

Ollamaを ollama serve で起動する場合は、OLLAMA_CONTEXT_LENGTH 環境変数でコンテキストサイズを指定できる。

OLLAMA_CONTEXT_LENGTH=64000 ollama serve

この方法は、Ollamaサーバ全体の動作としてコンテキスト長を変えたい場合に向いている。

向いているケース:

  • 常に大きめのコンテキストでOllamaを起動したい
  • 外部ツールやエージェントからOllamaを使う
  • App側で変更できない、または設定を固定したい

Modelfileでモデルごとに指定する

モデルごとにコンテキストサイズを固定したい場合は、ModelfilePARAMETER num_ctx を書く。

FROM llama3.2
PARAMETER num_ctx 4096

作成したModelfileから、専用のモデル名で作成する。

ollama create llama3.2-4k -f ./Modelfile
ollama run llama3.2-4k

用途別にモデル名を分ける例:

llama3.2-4k   短いチャット用
llama3.2-32k  長文要約用
llama3.2-64k  コード読解やエージェント用

向いているケース:

  • 用途ごとに設定済みモデルを作りたい
  • 毎回設定を変更したくない
  • チーム内で同じ設定を共有したい

APIリクエストごとに指定する

Ollama APIを直接使う場合は、optionsnum_ctx を渡せる。

/api/generate の例:

curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt": "この文章を要約してください",
  "stream": false,
  "options": {
    "num_ctx": 8192
  }
}'

/api/chat でも同様に、optionsnum_ctx を指定できる。

向いているケース:

  • アプリケーション側でリクエストごとに調整したい
  • 短い質問と長文処理で設定を切り替えたい
  • 検証用に複数の値を比較したい

現在の割り当てを確認する

設定後は、ollama ps で実際に割り当てられているコンテキストサイズと、モデルがGPU/CPUのどちらで処理されているかを確認する。

ollama ps

確認する列:

  • CONTEXT: 実際に割り当てられたコンテキストサイズ
  • PROCESSOR: GPUで処理されているか、CPUへオフロードされているか

コンテキストサイズを上げた結果、PROCESSOR がCPU寄りになった場合は、応答速度が大きく落ちる可能性がある。その場合は、num_ctx を下げる、より小さいモデルを使う、量子化が軽いモデルを選ぶなどの調整が必要になる。

その他

設定値の目安

まずは小さい値から段階的に試す。

  • 4k: 短いチャット、軽い質問、速度重視
  • 8k: 通常のチャット、少し長めの文章
  • 16k: 長文の要約、まとまったコード片
  • 32k: 長い資料、複数ファイルのコード、長い会話
  • 64k以上: RAG、Web検索、コーディングエージェント、大量の文脈を使う処理

実用上は、最初から最大値にするよりも、4k、8k、16k、32k、64kの順に試し、必要な品質が出る最小値を探すほうがよい。

比較するときの観点

同じモデル、同じプロンプトで次の点を比較する。

  • 回答に必要な情報を最後まで参照できているか
  • 長文の後半にある情報を見落としていないか
  • 回答開始までの時間が許容範囲か
  • 生成速度が遅くなりすぎていないか
  • ollama ps でCPUオフロードが増えていないか
  • メモリ不足やクラッシュが起きないか

注意点

  • コンテキストサイズを大きくしても、モデルの推論能力そのものが上がるわけではない
  • 入力が整理されていない場合、大きなコンテキストでも回答品質は安定しない
  • 長い文脈を入れるほど、重要情報が埋もれることがある
  • モデルごとに得意な最大コンテキスト長や実用的な性能は異なる
  • クラウドモデルとローカルモデルでは、利用できるメモリ条件が大きく違う
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?