を理解するための窓口を コンテキスト
コンテキストウィンドウとは、モデルが一度に処理するトークン数の上限です。システム指示、履歴、添付文書、生成中の回答をすべて合計したものが対象になります。各トークンに対応するエントリがKVキャッシュに保持されるため、メモリを消費します。Ollamaでは、VRAMが24 GiB未満のカードの場合、デフォルト値は4,096トークンです。モデルに読み込ませられる量を制限しているのは、多くの場合、モデル自体ではなく、このコンテキストウィンドウです。
コンテキストウィンドウが小さすぎると、モデルはやり取りの冒頭を忘れたり、文書が途中で切り詰められたりします。大きすぎると、VRAMを使い切り、処理全体が遅くなります。このガイドでは、コンテキストウィンドウに何が含まれるのかを説明し、実際のモデルのアーキテクチャに基づいてメモリ消費量を計算したうえで、思わぬ問題を避けながら調整する方法を紹介します。
#コンテキスト ウィンドウに含まれる内容
Ollamaのドキュメントによると、コンテキスト長とは、モデルがメモリ内で参照できるトークン数の上限です。この一つの枠に、システムメッセージ、会話履歴、貼り付けたファイルや文書の抜粋、直近の質問、そしてモデルが書いている途中の回答がすべて合算されます。推論モデルでは、思考に使うトークンも数に含まれます。合計がコンテキストウィンドウを超えると、何かを削る必要があります。通常、ツールは冒頭部分を切り詰めるか、リクエストを拒否します。モデルはこのウィンドウの外にある情報を記憶していません。ただし、外部の仕組み(要約、RAG)が情報を再び渡す場合は別です。
#トークン:ウィンドウを埋める単位
お使いのマシンで、プライベートかつ無料のChatGPTを1時間で構築 — LM Studio、Ollama、Open WebUI、ご自身のドキュメント、クラウド不要。
- 永久に利用できるオンラインスペース
- PDF + ファイル
- 生涯アップデート
トークンは単語ではありません。モデルのトークナイザーが定義するテキストの断片で、多くの場合、音節やよく使われる単語に相当します。珍しい単語や長い単語は複数のトークンになります。同じ内容でも、フランス語は一般に英語より多くのトークンを消費します。ほとんどのトークナイザーが主に英語で訓練されているためです。正確な比率はモデルごとに異なるので、大まかな目安に頼らず、実際に測定してください。Ollama の API は、リクエストごとにプロンプトのトークン数を prompt_eval_count として返します。
- 経験則
- 高密度のフランス語テキストのA4一枚は、トークナイザーによって異なりますが、約1,000トークンに相当します。ご自身のドキュメントでprompt_eval_countを使用して確認してください。
- 一冊の本
- 数十万トークン:分割しなければ、32,000または64,000トークンのコンテキストウィンドウには収まりません。
- 回答
- 推論モデルは、ユーザーに見える回答を出す前に数千の思考トークンを生成することがあり、これらのトークンもコンテキストウィンドウを消費します。
#どのサイズのコンテキストウィンドウを選ぶべきか
Ollama はビデオメモリに応じてデフォルト値を設定します。VRAM 24 GiB 未満では約 4 000 トークン (4k)、24 GiB から 48 GiB の間では 32k、48 GiB 以上では 256k です。同じページでは、Web 検索、エージェント、コーディングツールなど、大規模なコンテキストを必要とするタスクには少なくとも 64 000 トークンを推奨しています。最近のモデルははるかに高い最大値を謳っています。例えば、QuelLLM のカタログでは Kimi K2.5 が約 256 000 トークン、Kimi K3、DeepSeek V4 Flash、GLM 5.2 が約 100 万トークンと記載されています。しかし、謳われている最大値は、お使いのマシンで利用可能なコンテキストを意味するわけではありません。メモリ、場合によっては品質がそれを妨げます。
| 用途 | コンテキストウィンドウの目安 | 注記 |
|---|---|---|
| 短い会話、質問と回答 | 4,096から8,192トークン | 文書を貼り付けない場合は十分 |
| 記事の要約または分析 | 16,000から32,000トークン | テキストのトークン数を確認してください |
| リポジトリでのコードアシスタント | 64,000トークン以上 | Ollama がコーディングツールに推奨しています |
| ツールとウェブ検索を備えたエージェント | 64,000トークン以上 | 各ツール呼び出しでテキストが再投入されます |
| 非常に大きなコーパス | ウィンドウを表示しないでください | すべてを送るのではなく、RAGを利用してください |
サイズ設定に関する二つの落とし穴が頻繁に起こります。まず、ウィンドウ内に回答を収める必要があります。32,000トークンのうち31,000トークンをドキュメントで埋めると、回答に使える余白がほとんどなくなり、推論モデルは思考の途中で停止してしまいます。次に、会話では履歴がターンごとに増加します。最初のメッセージでは十分なウィンドウでも、20ターン目には飽和状態になる可能性があります。したがって、平均的なケースではなく、使用状況の最悪のケースを見込み、ウィンドウの約5分の1の余裕を確保してください。
#コンテキストはどれだけメモリを消費するか
コンテキストウィンドウ内の各トークンについて、モデルの各層にキーとバリューが作られ、KVキャッシュに保存されます。トークンあたりのメモリ使用量は、アーキテクチャの四つの数値から計算できます。層数、キーバリューヘッド数、ヘッドの次元数、そして一つの数値のサイズ(FP16では2バイト)です。式は、2(キーとバリュー)× 層数 × KVヘッド数 × ヘッドの次元数 × 2バイトです。注意すべきなのは、数えるのがアテンションヘッドではなく、キーバリューヘッドだという点です。最近のモデルでは、複数のアテンションヘッドがキーバリューヘッドを共有するためです(grouped-query attention)。アテンションヘッド数を使って計算すると、以下のモデルではキャッシュ容量を実際の4倍に見積もってしまいます。
Qwen3-8Bを例にとると、公式仕様では36層と8つのクエリ・キー値ヘッド(32ヘッドのクエリヘッドに対比)が記載されており、公開設定ではヘッドの次元を128と定めています。コストは2 × 36 × 8 × 128 × 2 = 147,456バイト/トークンで、144キロバイトです。
| コンテキスト | KVキャッシュ(FP16) | KVキャッシュ(q8_0、約半分) |
|---|---|---|
| 4 096 トークン | 0.56 GiB | 0.28 GiB |
| 8,192トークン | 1.13 GiB | 0.56 GiB |
| 16 384トークン | 2.25 GiB | 1.13 GiB |
| 32 768 トークン | 4.50 GiB | 2.25 GiB |
| 131,072トークン(YaRN使用時、モデルカードによる) | 18.00 GiB | 9.00 GiB |
2つのレバーがキャッシュを縮小します。1つ目はキャッシュの量子化です。OllamaのFAQによると、q8_0タイプはFP16のメモリ消費量の約半分を消費し、劣化は非常にわずかなのですが、q4_0は約4分の1を消費し、大きなコンテキストでは劣化がより顕著になります。これらはFlash Attentionの有効化を必要とします。2つ目は、必要な範囲にウィンドウを縮小することです。KVキャッシュに関する私たちのガイドでは、設定の詳細を説明しています。
#コンテキスト長を設定
#Ollama での設定
Ollamaでは、サーバー起動時にデフォルトの長さを設定したり、セッション用に変更したり、API経由でリクエストごとに指定したりできます。
ロード後、ollama ps を実行してください。CONTEXT フィールドは割り当てられた長さを、PROCESSOR フィールドはGPUとCPU間の割合を表示します。CPUに割り当てられた部分がある場合は、コンテキストの長さを減らすか、より小さなモデルに切り替えましょう。
#LM Studioの場合
LM Studioでは、モデルの読み込み時に、読み込み設定でコンテキスト長を設定します。値を変更するには、モデルを再読み込みする必要があります。確定する前に、表示される推定メモリ使用量を確認してください。
#4段階の調整手順
- 01実際に必要な量を測る普段使うドキュメントや会話履歴を送信し、prompt_eval_countの値を確認してください。そこに想定する回答の長さを加え、モデルが思考内容を生成する場合は、その長さも加えてください。
- 02コンテキストウィンドウを選ぶこの合計に20%の余裕を加えた量が収まる、最小の値を選んでください。エージェントまたはコーディングツールを使用する場合は、Ollamaの推奨どおり、少なくとも64,000トークンを確保してください。
- 03メモリを確認このコンテキストウィンドウの設定でモデルを読み込み、ollama psを実行してください。プロセッサ欄には「100 % GPU」と表示される必要があります。そうでない場合は、コンテキストウィンドウを小さくするか、キャッシュを量子化するか、モデルを変更してください。
- 04情報を思い出せるかテストする長いテキストの中ほどに具体的な事実を入れ、その内容を質問してください。モデルがその事実を見落とす場合、公表されているコンテキストウィンドウは実際に活用できる範囲を超えており、テキストの分割やRAGが必要です。
#コンテキストウィンドウが大きくても、内容を正確に読み取れるとは限りません
2023年の研究「Lost in the Middle」は、コンテキスト内の情報の位置によって、モデルの性能が大きく低下する可能性を示しています。情報が冒頭や末尾にあると性能が良いことが多く、中央にあると低下します。これは、長いコンテキストに対応するとされているモデルでも同様です。2024年に公開されたベンチマークRULERは、さらに踏み込んでいます。テストされたほぼすべてのモデルで、コンテキストが長くなると精度が大きく低下し、32,000トークンで十分な水準を維持したのは半数だけでした。いずれのモデルも32,000トークン以上への対応をうたっていたにもかかわらずです。
これらの研究は当時のモデルを対象としており、2026年のモデルについては何も述べていません。2026年のモデルの中には、長文脈に特化して学習されているものも複数あります。しかし、対応方針は依然として有効です。指示と重要な事実を先頭に配置し、最後に質問を繰り返してください。また、数十万トークンに及ぶとされるウィンドウに頼る前に、ご自身のドキュメントで測定してください。最もシンプルなテストは、ご自身の分野の長いテキストの中央に具体的な情報を挿入し、それを再度質問することです。モデルが毎回その情報を取り出せる場合は、そのウィンドウは用途に利用可能です。取り出せない場合は、送信するテキストを短縮するか、分割処理に切り替えてください。
#内容が収まりきらない場合
- やり取りの進行に合わせて要約する
- 数回のやり取りごとに会話の要約を生成させ、その要約をコンテキストの先頭に置いて再開してください。細部は失われますが、話の流れは保てます。
- ドキュメントを分割する
- 長いPDFはセクションごとに処理し、その後、各部分の回答をまとめます。チャンク分割のガイドでは、適切なサイズを詳しく説明しています。
- RAGに切り替える
- コーパスがコンテキストウィンドウを大幅に超える場合は、すべてを送る代わりに、関連する少数の箇所だけを取得します。
- より大きなコンテキストを持つモデルを選ぶ
- メモリが追いつく場合のみ:ウィンドウを倍にする前に、前述の KV キャッシュの計算を参照してください。
LLMのコンテキストウィンドウとは何か?+
Ollamaのデフォルトのコンテキストウィンドウはどのくらいですか?+
ローカルモデルのコンテキストをどうやって拡張できますか?+
32,000トークンのコンテキストは、どれくらいの VRAM を消費しますか?+
より大きなコンテキストがモデルをより賢くするのですか?+
ドキュメントの分析にはRAGか大きなコンテキストウィンドウが必要ですか?+
#さらに詳しく
- KVキャッシュの量子化:VRAMを節約
- トークンとトークナイズ:LLM が消費するものを知る
- 量子化の選択(Q4、Q5、Q8、FP16)
- RAGとは何か、そしてどのように機能するか
- チャンキング戦略
- VRAM計算機
- 情報源:Ollamaのドキュメント、コンテキスト長
- 出典:Ollama FAQ(KVキャッシュ、Flash Attention)
- ソース:Lost in the Middle (arXiv 2023)
- 出典:RULER、長文コンテキストベンチマーク(arXiv 2024)
ご意見、誤りのご指摘、補足はありますか?ぜひお知らせください。皆さんにとってより良いガイドにするために役立ちます。