AI・機械学習
Show HN: MemStitch – vLLM向けのゼロコピーコンテキストブリッジング(TTFT速度25倍)
Show HN: MemStitch – Zero-copy context bridging for vLLM (25x TTFT speedup) (github.com)
要約
MemStitch(Context-Stitcher)は、複数のAIエージェントが同じ長いテキストコンテキストを処理する際のGPU推論におけるボトルネックを解消するソリューションです。エージェント間でGPUのKVキャッシュをメモリレベルで共有することで、冗長なプリフィルフェーズを回避し、Time-to-First-Token(TTFT)を大幅に短縮し、GPUメモリ使用量も削減します。
全文翻訳
Context-Stitcher 🪡 マルチエージェントGPU推論のためのゼロコピーコンテキストブリッジングゲートウェイ。
💡 コアバリュープロポジション
マルチエージェントの協調ワークフローでは、別々のエージェントが同じ長いテキストコンテキストを順番に処理することがよくあります。例:
エージェントA(法務監査):200ページの契約書を読み、コンプライアンス分析を実行します(GPU KVキャッシュを生成)。
エージェントB(財務コンプライアンス):同じ200ページの契約書を読み、財務上の負債を監査します。
標準的な推論エンジンでは、エージェントBは高価なプリフィルフェーズを繰り返し、GPUアクティベーションを重複させ、高いTime-to-First-Token(TTFT)レイテンシに苦しむことになります。
Context-Stitcherは、キャッシュをメモリレベルでブリッジすることでこれを解決します:
コンテキストトポロジカルハッシュ:プロンプトを物理的なブロックサイズにセグメント化し、それらを暗号学的フィンガープリント(Merkleチェーン)にマッピングします。
ゼロコピーブロックブリッジング:一致するプレフィックスに対してプリフィルをバイパスし、エージェントBの論理アテンションテーブルをエージェントAのキャッシュブロックの物理GPUメモリアドレスに直接マッピングします。
ゼロトラストセキュアゲート:境界制御リストを強制し、不正なエージェントセッションが共有物理ブロックにアクセスできないようにします。
📊 パフォーマンスプロファイル
以下は、共有された200ページのドキュメントで連続するエージェントを実行した際の、標準的なvLLMコールドプリフィルと比較したContext-Stitcherのベンチマーク分析です:
⚡ TTFTプリフィルレイテンシ(エージェントBの応答時間) — 低いほど良い
ベースライン(vLLMコールド):██████████████████████████████ 1200 ms
Context-Stitcher:█ 48 ms ( 25.0倍のプリフィル速度向上! 🚀 )
💾 GPU物理キャッシュブロック割り当て(合計VRAM) — 低いほど良い
ベースライン(vLLMコールド):██████████████████████████████ 53ブロック(共有なし)
Context-Stitcher:████████████████ 30ブロック( 43.4%のメモリ節約! 📉 )
⚙️ インストールとクイックスタート
1. 依存関係のインストール
pip install -r requirements.txt
2. ゲートウェイとダッシュボードの起動
python run.py
起動後、ゲートウェイのルーティングは http://localhost:8000 でアクティブになります:
APIプロキシゲートウェイ: http://localhost:8000/v1/chat/completions
リアルタイム開発者コンソール: http://localhost:8000 を開いてください。
🖥️ ビジュアル開発者ポータル
Context-Stitcherには、物理キャッシュブロックの状態(アイドル、プライベート割り当て、共有/スティッチされたページ、セキュリティアラーム)をリアルタイムで監視するための応答性の高い開発者ポータルが含まれています。
🛠️ クライアント統合と使用ガイド
Context-Stitcherは、クロスアプリケーション統合のためにPython SDKデコレータとOpenAI互換REST APIをサポートしています:
パターンA:Python SDKデコレータ(Pythonベースのエージェントオーケストレーション用)
エージェントパイプラインがPythonで記述されている場合、StitcherMeshと@stitch_agentデコレータを使用してコンテキストメモリをリンクできます:
from context_stitcher import StitcherMesh, stitch_agent
# 1. ポインタ共有推論制御メッシュを初期化します(参照:vLLM)
mesh = StitcherMesh(backend="vllm", model="meta-llama/Llama-3.1-8B-Instruct")
# セキュアゲートポリシーを設定します:エージェントBがエージェントAのKVキャッシュブロックを読み取ることを許可します
mesh.sg.add_policy("agent_a", "agent_b")
# 2. エージェントワークフローをデコレートします
@stitch_agent(mesh)
def agent_a():
prompt = "[長いドキュメントコンテキスト...]\n知的財産条項を分析してください。"
# 初回実行:キャッシュをプリフィルし、トポロジカルハッシュを登録します
res = mesh.generate(prompt=prompt, fingerprint="legal_doc_v1")
return "legal_doc_v1"
@stitch_agent(mesh)
def agent_b(context_fingerprint):
prompt = "[長いドキュメントコンテキスト...]\n財務コンプライアンスリスクを評価してください。"
# 後続の実行:ブロックを自動的にスティッチし、プリフィルをバイパスします
res = mesh.generate(prompt=prompt, fingerprint=context_fingerprint)
print(f"エージェントBの応答: {res['generated_text']}")
print(f"節約された時間: {res['prefill_time_saved_ms']}ms")
パターンB:OpenAI互換REST API(多言語クライアント、Dify、Flowise用)
ゲートウェイは標準的なOpenAIエンドポイントを公開します。LLMクライアントのベースURLをContext-Stitcherに設定すると、共有がアクティブになります。
1. Python OpenAI SDKクライアント:
from openai import OpenAI
# クライアントをContext-Stitcherプロキシゲートウェイに直接指定します
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
# agent_idメタデータをextra_body内に含めて、標準のcompletionsリクエストを送信します
response = client.chat.completions.create(
model="context-stitcher-sim",
messages=[
{"role": "user", "content": "[長いドキュメントコンテキスト...]\nコンプライアンスリスクを評価してください。"}
],
extra_body={
"agent_id": "AgentB", # 要求しているエージェントを識別します
"session_id": "session_legal_audit" # 共有セッションキャッシュを識別します
}
)
print("生成された出力:", response.choices[0].message.content)
2. 生HTTP cURLリクエスト:
curl -X POST http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{ "model": "context-stitcher-sim", "messages": [ {"role": "user", "content": "[長いドキュメントコンテキスト...]\nコンプライアンスリスクを評価してください。"} ], "agent_id": "AgentB", "session_id": "session_legal_audit" }'
パターンC:API経由のセキュリティルール制御(ゼロトラストゲート)
エージェント間のアクセス承認ルールを動的に検査、追加、または取り消すことができます。
1. アクティブなすべてのポリシールールを取得します:
curl -X GET http://localhost:8000/policies
2. エージェントBにエージェントAのKVキャッシュをスティッチする権限を付与します:
curl -X POST http://localhost:8000/policy \
-H "Content-Type: application/json" \
-d '{"owner_agent": "AgentA", "allowed_reader": "AgentB"}'
3. エージェントBのエージェントAキャッシュ読み取り権限を取り消します:
curl -X DELETE http://localhost:8000/policy \
-H "Content-Type: application/json" \
-d '{"owner_agent": "AgentA", "allowed_reader": "AgentB"}'