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?

セマンティックキャッシュ

0
Posted at

韓国の有名な中古交換プラットフォーム「ダングン(당근)」の技術チームから出た本『最近ダングンAI』という本で目を引く内容はいくつかあるが、その一つが「セマンティックキャッシュ」の適用だ。今日はこの内容をまとめてみます。

ダングンアプリではチャットで「AIおすすめメッセージ」という機能があります。

image.png

以前は最後のメッセージをLLMに投げて推薦文を受けたそうです。これにより、2つの問題が発生します。

  1. LLMの応答を待たなければならない点(速度が遅い)
  2. LLM使用トークン費用

特にトークン費用を推定してみたが、ダングンシステムでは1年に約1000万件のメッセージが来ており、そのための推奨トークン費用を推定してみると約8000万~9000万円程度に達します。

これらの問題点を緩和するためにこの開発チームが考えたのがまさに**「セマンティックキャッシュ(Symantic cache)」**ということです。

推奨文をキャッシュしておいてLLMに投げる前にキャッシュを先に後ろにキャッシュにヒットすると、その結果として示す概念です。

image.png

セマンティックキャッシングの基本原理は、マッチング基準を「類似度」と判断するということです。この目的のためにセマンティックキャッシュに使用されるリポジトリはベクトルDBを使用します。執筆者はchromem_goをメモリに載せて使用したが、ベクトルDBの中のオンメモリで使用可能なものであれば何でも構いません。

キャッシング構造なら1番目の速度問題解決には役に立つようだ。それでは、2番目目の費用の問題はどのくらい役に立ちますか?

ダングンアプリで行き来するチャットメッセージが約1000万件程度に想定してキャッシュ未使用時に一日に入る使用費を計算しました。

9000万円(年間LLM予想費用)÷365日=246,500円

キャッシュを使用してキャッシュヒット率が100%だと想定すると、入る費用は… 140円程度で予測されました。

image.png

システムで現実的に「キャッシュヒット100%」が出るのは難しい。キャッシュヒット率に基づいて概略的なコストを計算してみると次のようです。

表:「ヒット率によるコスト削減効果」

キャッシュヒット率 コスト削減率 年間コスト削減 適用後の見積費用
25% 24%削減 2160万円 6840万円
50% 48%削減 4320万円 4680万円
75% 72%削減 6480万円 2520万円

セマンティックキャッシュ構成は次のようです。

image.png

メインサーバーとは分離したアドオン(Add On)形で、通信はgRPCを使ったそうです。

ベクトルDBに文1000個を保存してもメモリは6MBに過ぎず、これに対する全数探索時平均2㎳以内でした。性能面では悪くないが、埋め込み生成過程でボトルネックが発生したそうです。

  • 平均かかった時間400~800㎳
  • これに対応するためにk8sでリプリカを作って水平拡張戦略を使う
  • リプリカが毎秒100〜120件を処理し、ある程度スピードアップ

埋め込みモデルサービスでも問題があった。 1つの文が1500以上の高次元ベクトルで表現される場合があり、これは埋め込み過程でボトルネックが発生したそうです。

これを解決するために、このチームでは 「主成分分析」 という次元縮小技術を活用し、1500個の次元を50個に減らしてこれを解決しました。

他の難しい点は、ベクトル間の分布クラスタリング時に通常K-meansが多く使用されているが、このキャッシュシステムではk値をあらかじめ知ることができないため適用することが難しかったということです。だからこのチームはDBSCAN技術を選んだ。群集の本数をあらかじめ知ることができないからであり、ノイズに強いという利点もあります。

このサービスの成果はどうなりますか?

チームではまず類似度の基準をとった。サンプリングで取引チャット50個中1000個の発話を抽出して類似度しきい値を変更していきながらヒット率を調べたところ。当然、しきい値が低いほどヒット率は上昇しました。しきい値を0.65としたときのヒット率が29.55%程度であり、この値が最も合理的なものと判断ました。

これを実際のユーザーにテスト配布し、キャッシュヒット率を調査した。当初は20%程度を予想したが、結果は25%に近づきました。また、場合によってはセマンティックキャッシングが文脈を理解できず、混乱を与える場合も発生しました。

表「ヒット率によるコスト削減効果」を見ると、25%のときに約2160万円の節約が予想される。結局、このサービスのコストパフォーマンスは2160万円になります。

LLMを直接使うよりセマンティックキャッシュを適用することは明らかにコスト的にも速度面でも利益になります。しかし、類似候補推薦で一部の文脈を理解できなかった部分は、このチームで改善すべき宿題のようです。

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?