背景
皆さんこんにちは、皆さんはどんかGPUでLLM動かしてますか?A100?H100?H200?
私はそんなお金ないので4070tisuperです。
どうやったら弱いグラボでもLLMを動かせるか考えました。
小手先で解決できる内容ではなかったので、推論の仕組みから再検討してみました。
本職はSREエンジニアなので、思ったような進捗は出ないと思いますが少しずつ取り組んでみたいと思います。
“Attentionの計算結果を共有すべき” を実現するP2Pキャッシュ構想
⚠️ 本記事は構想段階のドラフトです。
評価指標やベンチマークは未検証の仮値です。
実装・検証が完了次第、随時アップデート予定です。
• LLMが同じ入力に何度もAttentionを払う無駄を減らしたい
• 隠れ層・デコーダ出力をP2Pで共有・再利用するキャッシュネットワークを構想
• ローカル → ベクトルDB → P2P という多層キャッシュ構造により推論コストの削減と再現性の向上を目指す
• まずはローカルPoC(llama.cpp + FAISS)から着手中
⸻
背景:「Attentionは何度も計算しない」
現在のLLM(例:GPT系)は、ユーザーが似たようなプロンプトを入力しても毎回Attention計算→デコード処理を再実行しています。
これは次のような課題を生み出しています:
• 不必要な再計算によるリソース浪費
• 再現性の低さ(特にトップkによる揺らぎ)
• 同じプロンプトでも知識の再利用ができない
⸻
提案:Open Transformer DB (OTD)
OTDは、Transformerの中間状態をキャッシュとして再利用し、階層的に問い合わせることで再計算を避けることを目的とした構想です。
システム構成(案)
User
└─→ L₀: ローカルKVキャッシュ(完全一致)
└─→ L₁: セマンティック類似検索(FAISSなど)
└─→ L₂: 他ノード(P2P)への問い合わせ
└─→ L₃: 新規にモデルを推論
⸻
キャッシュスキーマ(簡易)
{
"input_sha256": "abc123…",
"model_hash": "sha256(weights+quant)",
"cache_level": "decoder_final",
"embedding": [0.123, ...],
"privacy_flag": false,
"inserted_at": "2025-05-10T12:34:56Z",
"hits": 0
}
• embedding:プロンプトベクトル(類似検索用)
• privacy_flag:共有可否
• model_hash:モデル差異による出力の混在を防止
⸻
開発フェーズ(予定)
フェーズ 内容
Phase 0 ローカルPoC(キャッシュヒットの検証)
Phase 1 類似度判定(FAISS + τ制御)
Phase 2 疑似P2P共有(gRPCやHTTPで模擬ノード間通信)
Phase 3 libp2p実装(Gossip + 暗号化 + reputation)
Phase 4 公開ノード対応 + 評価・プライバシ制御強化
⸻
現在の進捗
• ローカルでのPoCを構築中(llama.cpp + FAISS)
• 同一入力 → SHA256 → キャッシュ参照
• 今後、ベクトル類似検索(cos類似度)を加えて再利用の範囲を広げる予定
⸻
今後について
• まずは Phase 0〜1 の結果をもとに再利用率・品質を定量化
• 将来的には分散キャッシュ共有ネットワークとしてのプロトタイプを公開予定