キャッシュ拡張生成(CAG)

キャッシュ拡張生成(CAG)は、静的知識をプリロードすることで大規模言語モデルの効率を高め、静的かつ低遅延なタスク向けに遅延を削減しアーキテクチャも簡素化します。

キャッシュ拡張生成(CAG)とは?

キャッシュ拡張生成(CAG)は、大規模言語モデル(LLM)のパフォーマンスと効率を向上させるために、事前計算されたキー・バリュー(KV)キャッシュとして知識をプリロードする新しいアプローチです。

CAGは、推論時に外部知識を動的に取得するRAG(検索拡張生成)とは異なり、推論前に関連する知識をモデルの拡張コンテキストウィンドウにすべて埋め込むことで、取得プロセス自体を排除しています。このプリロード戦略により、LLMは事前計算された情報を使って応答を生成でき、遅延を大きく削減し、システムアーキテクチャも簡素化されます。

知識をキー・バリューキャッシュとして保存することで、モデルがクエリへの回答に必要なコンテキストへ即座にアクセスできるようになります。特に、知識ベースが静的かつ比較的小規模で、低遅延が重視される場面で大きな利点を発揮します。

CAGの仕組み

CAGは主に3つのフェーズから構成されます。

1. 外部知識のプリロード

  • 推論前に、すべての関連ドキュメントやデータセットをモデルのコンテキストウィンドウにプリロードします。

  • プリロードした内容はキー・バリュー(KV)キャッシュへと処理され、モデル内部の知識表現として保持されます。例:

    def preprocess_knowledge(model, tokenizer, prompt):
        input_ids = tokenizer.encode(prompt, return_tensors="pt").to(model.device)
        past_key_values = DynamicCache()
        outputs = model(input_ids=input_ids, past_key_values=past_key_values, use_cache=True)
        return outputs.past_key_values
    

このステップにより、モデルはリアルタイム取得を必要とせず、事前処理された知識へ即座にアクセスできます。

2. 事前計算キャッシュを使った推論

  • クエリが入力されると、事前計算されたKVキャッシュとクエリ入力が結合されます。

  • モデルはキャッシュされた知識とクエリのみをもとに応答を生成し、知識取得の追加計算が不要となります。例:

    def generate_response(model, query, kv_cache):
        input_ids = tokenizer.encode(query, return_tensors="pt").to(model.device)
        output_ids = model(input_ids=input_ids, past_key_values=kv_cache, use_cache=True)
        return tokenizer.decode(output_ids)
    

3. キャッシュ管理

  • 新しいクエリが処理されるごとにキャッシュは拡大します。リセット機構によりキャッシュを元の長さまでトランケートし、パフォーマンスを維持しつつ、以降のクエリも適切なコンテキストで評価できるようにします。キャッシュリセット例:

    def clean_up(kv_cache, original_length):
        for i in range(len(kv_cache.key_cache)):
            kv_cache.key_cache[i] = kv_cache.key_cache[i][:, :, :original_length, :]
            kv_cache.value_cache[i] = kv_cache.value_cache[i][:, :, :original_length, :]
    

CAGの主な利点

  1. 低遅延
    リアルタイム取得が不要なため、CAGはRAGと比べて応答速度が非常に速く、時間が限られる用途に最適です。

  2. 精度向上
    関連ドキュメントをすべてプリロードすることで、モデルが網羅的なデータセットを処理でき、コンテキストの抜けや取得エラーのリスクを低減します。

  3. 簡素化されたアーキテクチャ
    RAGのような複雑な取得パイプラインが不要となり、システム構成や保守の負担が減ります。

  4. スケール効率
    知識のプリロード・キャッシュ後は、同じ知識領域内の繰り返しクエリに対して最小限の計算コストで処理できます。

CAGの制限事項

  1. コンテキストウィンドウのサイズ
    CAGはモデルのコンテキストウィンドウに知識をプリロードします。現状のLLMでは最大128,000トークンまで対応ですが、このサイズが上限となります。

  2. 知識ベースの規模
    静的かつ管理しやすい知識ベースに最適です。大規模または動的なデータセットの場合、すべての情報をコンテキストウィンドウに収めるのは困難です。

  3. 静的知識前提
    推論中に知識ベースが変化しないことを前提としているため、リアルタイム更新や動的知識統合が必要な用途には不向きです。

  4. コスト面の課題
    大きなコンテキストウィンドウはプリロード時の計算コストを増加させるため、頻繁な更新や変更が発生する場合は経済的に不利です。

CAGの活用方法

実用例

CAGは、知識ベースが静的・適度な規模で、低遅延が重要なシナリオでよく活用されます。

  • 顧客サポートチャットボット
    例:ソフトウェア製品のよくあるトラブルシューティング手順をプリロードし、ユーザーに即時回答
    利点:取得エラーを排除し、応答速度を大幅に向上

  • ドキュメント分析
    例:金融機関が四半期レポートや、法律事務所が規制文書を分析
    利点:関連ドキュメントのプリロードにより、一貫性と精度の高い応答を実現

  • ヘルスケアアシスタント
    例:医療ガイドラインをプリロードし、患者の問い合わせに対応
    利点:マルチターンダイアログにおいても一貫性と正確な参照を維持

  • 教育・研修
    例:企業研修プログラムでよくある質問への回答
    利点:デプロイが簡単で、一貫した応答が可能

検索拡張生成(RAG)との比較

特徴CAGRAG
知識の扱いコンテキストウィンドウに知識をプリロード実行時に知識を動的に取得
システムの複雑さ取得パイプライン不要でシンプル取得のための追加コンポーネントが必要
遅延取得ステップがないため低遅延リアルタイム取得処理のため遅延が発生
スケーラビリティコンテキストウィンドウのサイズに制限される大規模・動的なデータセットでも対応可能
エラーリスク取得エラーなし取得・ランキングエラーのリスクあり
最適な用途静的かつ低遅延なタスク動的・大規模・頻繁に更新されるタスク

ユースケース例

CAGの活用例

  1. 人事システム
    企業が従業員向け規定をCAGでプリロード。従業員は特定のガイドラインを問い合わせると、即座に回答が得られる。

  2. 法務アシスタント
    モデルのコンテキストに関連判例をプリロードし、取得システムを使わず迅速に法的質問に回答。

  3. カスタマーサービス
    SaaS製品のチャットボットにFAQやトラブルシューティングガイドをプリロードし、円滑かつ高速な対応を実現。

動的シナリオ向けRAG

  1. ニュース集約
    ニュースアプリが最新記事をRAGで取得・要約し、ユーザーの問い合わせごとに最適な情報を動的に提供。

  2. ECサイト検索
    頻繁に更新される大規模カタログから、RAGで商品詳細や在庫を取得。

  3. 研究プラットフォーム
    科学研究プラットフォームが、外部データベースからRAGで関連論文や研究を取得。

実装例:Pythonによる知識のプリロード

以下は、CAG用に知識をモデルへプリロードするPythonコードの一例です。

def preprocess_knowledge(model, tokenizer, prompt):
    input_ids = tokenizer.encode(prompt, return_tensors="pt").to(model.device)
    past_key_values = DynamicCache()
    outputs = model(input_ids=input_ids, past_key_values=past_key_values, use_cache=True)
    return outputs.past_key_values

このプリロード機構により、モデルは外部取得なしでクエリを処理でき、効率的かつ低遅延なパフォーマンスを実現します。

CAGが適しているタイミング

  1. 静的な知識ベース
    知識ベースが頻繁に変化しない場合に最適です。

  2. 低遅延アプリケーション
    カスタマーサポートや教育、医療システムなど、迅速な応答が求められる用途に向いています。

  3. コスト効率を重視するシナリオ
    プリロードした知識が複数のクエリで一貫して利用されるなら、計算コストも抑えられます。

CAGは、スピード・シンプルさ・一貫性が求められるタスクにおいてRAGの効率的な代替手段となりますが、知識ベースのサイズや静的性による制限もあります。

キャッシュ拡張生成(CAG)に関する研究

1. モバイルエッジ大規模言語モデルサービスのための適応的コンテキストキャッシュ

著者: Guangyuan Liu, Yinqiu Liu, Jiacheng Wang, Hongyang Du, Dusit Niyato, Jiawen Kang, Zehui Xiong

本論文は、モバイルエッジにおけるLLM展開で直面するリソース制約や高取得遅延の課題に取り組んでいます。深層強化学習(DRL)を用いてユーザーコンテキスト・文書類似度・キャッシュミスコストなどを考慮し、キャッシュ置換ポリシーを最適化する適応的コンテキストキャッシュ(ACC)フレームワークを提案。実験では、11回の学習で80%以上のキャッシュヒット率を達成し、従来法に比べ取得遅延を40%削減。ローカルキャッシュ負荷も最大55%削減し、リソース制約環境でのスケーラブルな低遅延LLMサービスに有用であることを示しています。
論文はこちら

2. 保存済みKVキャッシュの再利用によるより経済的なコンテキスト拡張LLM生成へ

著者: Hanchen Li, Yuhan Liu, Yihua Cheng, Kuntai Du, Junchen Jiang

本研究は、LLMアプリケーションにおいて特に繰り返し入力の際のプリフィル遅延を削減するためのキー・バリュー(KV)キャッシュ再利用を探究しています。また、パブリッククラウドサービス利用時の計算・ストレージ・ネットワークコストも分析。著者らはワークロード条件のもとでKVキャッシュの保存・再利用コストを評価する解析モデルを提案し、ロングコンテキストのワークロードで遅延とクラウドコストの両方が削減されることを示しました。
論文はこちら

3. MPIC: 効率的なMLLM提供のための位置非依存マルチモーダルコンテキストキャッシュシステム

著者: Shiju Zhao, Junhao Hu, Rongxiao Huang, Jiaqi Zheng, Guihai Chen

本論文は、マルチモーダルLLM(MLLM)の推論効率を向上させるための位置非依存型キャッシュシステムMPICを提案します。従来のシステムは、わずかなコンテキスト差でもKVキャッシュ全体を再計算する非効率がありました。MPICはKVキャッシュをローカル・リモートに保存し、推論時にキャッシュ計算とロードを並列化。再利用・再計算メカニズムも統合し、既存手法に比べ最大54%の応答時間短縮を達成しています。マルチモーダルLLM提供のさらなる効率化に寄与する研究です。
論文はこちら

よくある質問

キャッシュ拡張生成(CAG)とは何ですか?

キャッシュ拡張生成(CAG)は、静的知識を事前に計算したキー・バリュー(KV)キャッシュにプリロードすることで、大規模言語モデル(LLM)の性能を向上させる手法です。推論時に外部知識を取得するRAG(検索拡張生成)とは異なり、CAGは関連情報をすべて事前に埋め込むことで、遅延を削減しAIシステムのアーキテクチャを簡素化します。

CAGはRAGとどのように異なりますか?

CAGは推論前に必要な知識をすべてモデルのコンテキストウィンドウにプリロードし、リアルタイムの取得を不要にすることで低遅延を実現します。一方RAGは、実行時に関連情報を動的に取得するため、取得エラーや高遅延の可能性がありますが、動的または頻繁に更新される知識ベースには適しています。

CAGを使用する利点は何ですか?

主な利点は、低遅延、包括的なプリロードによる精度向上、シンプルなシステムアーキテクチャ、静的知識領域での繰り返しクエリに対する効率性です。

CAGの制限は何ですか?

CAGはモデルのコンテキストウィンドウ(現状で最大128,000トークン)という上限に制約され、静的かつ管理しやすい知識ベースに最適です。動的データセットや頻繁な更新が必要なシナリオには向いていません。大きなコンテキストウィンドウはプリロード時の計算コストも増加させます。

CAGはどこで最も有用ですか?

CAGは、顧客サポートチャットボット、ドキュメント分析、ヘルスケアアシスタント、教育のFAQ、社内規定の問い合わせ、法務アシスタントなど、知識ベースが頻繁に変化せず即時応答が求められる静的かつ低遅延なアプリケーションに最適です。

効率的なAIワークフローの構築を始めましょう

CAGや他のAIツールの力をFlowHuntで体験しましょう。低遅延かつキャッシュ拡張型のソリューションが、あなたのビジネスをどのように変革できるか、デモをご予約ください。

詳細はこちら

リトリーバル拡張生成(RAG)とキャッシュ拡張生成(CAG)の違い
リトリーバル拡張生成(RAG)とキャッシュ拡張生成(CAG)の違い

リトリーバル拡張生成(RAG)とキャッシュ拡張生成(CAG)の違い

リトリーバル拡張生成(RAG)とキャッシュ拡張生成(CAG)のAIにおける主な違いを解説します。RAGはリアルタイム情報を動的に取得し、柔軟かつ正確な応答を実現。一方CAGは事前キャッシュされたデータを活用し、高速かつ一貫した出力を提供します。プロジェクトのニーズに合った手法の選び方や、実用例、強みと制約を紹介します。...

1 分で読める
RAG CAG +5
検索拡張生成(RAG)
検索拡張生成(RAG)

検索拡張生成(RAG)

検索拡張生成(RAG)は、従来の情報検索システムと生成型大規模言語モデル(LLM)を組み合わせた先進的なAIフレームワークであり、外部知識を統合することで、より正確で最新かつ文脈に即したテキスト生成を可能にします。...

1 分で読める
RAG AI +4
ドキュメントリトリーバー
ドキュメントリトリーバー

ドキュメントリトリーバー

FlowHuntのドキュメントリトリーバーは、生成AIモデルをあなた自身の最新ドキュメントやURLへ接続し、Retrieval-Augmented Generation(RAG)を通じて信頼性と関連性の高い回答を実現します。...

1 分で読める
AI Document Retrieval +3