AlloyDB の ScaNN ベクトル インデックスのご紹介: Google の 12 年間にわたる研究の成果によりベクトル検索をスピードアップ
Google Cloud Japan Team
※この投稿は米国時間 2024 年 4 月 11 日に、Google Cloud blog に投稿されたものの抄訳です。
昨年、ベクトル データベースの人気が急速に高まり、新しいセマンティック検索や生成 AI 機能を支える中心的な存在となりました。デベロッパーは、商品のレコメンデーション、画像検索、検索拡張生成(RAG)による LLM を活用した chatbot の強化など、さまざまな用途でベクトル検索を利用しています。
PostgreSQL は市場で最も広く利用されているオペレーショナル データベースの一つです。Stack Overflow が 2023 年に実施した調査によると、デベロッパーの 49% が使用しており、ますます広がりを見せています。そのため、PostgreSQL でベクトル検索に最も使用されている拡張機能 pgvector が、市場で最も人気のベクトル データベースの一つとなったのは自然な流れでした。そこで Google は昨年 7 月、Cloud SQL for PostgreSQL と AlloyDB for PostgreSQL における pgvector のサポートを開始し、AlloyDB AI にパフォーマンス最適化のためのいくつかの機能強化を行いました。
その後も PostgreSQL コミュニティは大きな進歩をもたらし、人気のある多くのデータベースで使用されている最先端のグラフベース アルゴリズムである HNSW アルゴリズムがサポートされるようになりました。HNSW は、AlloyDB と Cloud SQL の両方でサポートされています。HNSW により、多くのベクトル ワークロードにおいて良好なクエリ パフォーマンスを実現できます。一方で、現実のユースケースに必ずしも適合しないと話すお客様もおられました。大規模なコーパスを使用する場合に、インデックス構築時間が長く、メモリ使用量も多くなるという問題があるほか、より高速なリアルタイムでのインデックス更新や、より高いベクトルクエリ パフォーマンスが必要な場合もありました。
そこで Google は今週、AlloyDB 向けの新しい ScaNN インデックスを発表しました。これにより、12 年間にわたる近似最近傍アルゴリズムに関する Google の研究とイノベーションの成果が AlloyDB に組み込まれることになりました。この新しいインデックスでは最も人気の高い Google のサービスの一部で使用されているものと同じテクノロジーを使用することで、標準的な PostgreSQL の HNSW インデックスと比較してベクトルクエリ速度を最大 4 倍高速化し、インデックス構築時間を最短で 8 分の 1 に短縮するほか、メモリ使用量を一般的に 3~4 分の 1 に抑えます。また、標準的な PostgreSQL の HNSW インデックスと比較して最大 10 倍の書き込みスループットを実現します。
この新しい ScaNN インデックスは AlloyDB Omni でテクノロジー プレビュー版として提供されているほか、近日中に Google Cloud の AlloyDB for PostgreSQL マネージド サービスでも提供される予定です。
ANN アルゴリズムを使用したベクトル インデックス
ベクトルの最も一般的なユースケースとして、類似のデータや関連性のあるデータの検索があります。このような検索では、距離指標に関してクエリベクトルに最も近い k 個のベクトルをデータベースにクエリすることにより、求めているデータが取得されます。距離指標としては、内積、コサイン類似度、ユークリッド距離などが使用されます。このようなクエリは「k 最近傍」(KNN)クエリと呼ばれます。
しかし残念なことに、KNN クエリはスケーラビリティを備えていません。そこで役立つのが近似最近傍(ANN)探索です。ANN では、精度を若干犠牲にして大きな速度向上を実現します(具体的には再現率が低下するため、実際の最近傍データを検出できないことがあります)。多くのユースケースでは、このようなトレードオフにメリットがあります。たとえば、ユーザーが検索エンジンを使う場合を考えてみてください。検索に何時間、あるいは何日もかかるよりも、完璧ではなくてもおおよそ関連性の高い結果が一瞬で 10 件表示された方がはるかにメリットがあります。
データベース内における ANN 探索では、ベクトル インデックスが使用されます。データベースのパフォーマンスは多くの要素に左右されますが、基盤となる ANN インデックスはインデックス構築時間、クエリ パフォーマンス、メモリ使用量に大きな影響を与えます。また、再現率(精度)とレイテンシの間にはどうしてもトレードオフが生じますが、トレードオフの程度も ANN インデックスにより決まります。
よく使用される ANN インデックスとして、グラフベースと木量子化ベースの 2 種類があります。グラフベースのアルゴリズムでは、類似性に基づきエッジにより接続されたノードのネットワークが構築されます。pgvector の HNSW インデックスでは、多くの人気のベクトル データベースで使用されている、最先端の Hierarchical Navigable Small Worlds(HNSW)グラフ アルゴリズムが実装されています。このアルゴリズムは階層型のグラフを使用して、非常に効率的にグラフを走査し、最近傍を検索します。このようなアルゴリズムは、特にデータセットが小規模な場合に良好なパフォーマンスを発揮しますが、木量子化ベースのアルゴリズムと比較してメモリ使用量が多く、インデックス構築時間が長くなります。
木量子化ベースのベクトル インデックスでは、大まかに説明すると、近傍のベクトルのクラスタをグループ化し、適切に圧縮(量子化)する形でデータが構造化されます。木量子化インデックスは、グラフベースの ANN インデックスよりもメモリ使用量が少なく、インデックス構築時間も短いのが特長です。Google の ScaNN(スケーラブルな最近傍探索)は、優れたクエリ パフォーマンスを犠牲にすることなくこれらのメリットを実現する探索方法であり、(a)ジオメトリの認識によるスマートなクラスタリングと冗長性、および(b)最新の CPU ハードウェアに関する主要なイノベーションの成果によるものです。
AlloyDB の ScaNN インデックスにより、Google の最先端の ScaNN が AlloyDB でサポートされます。インデックスと AlloyDB クエリ実行エンジンのより緊密なインテグレーション、そして AlloyDB の階層化されたキャッシュ アーキテクチャにより、さらなるパフォーマンス向上が実現されています。Google の ScaNN アルゴリズム、およびその PostgreSQL と AlloyDB における実装方法について詳しくは、AlloyDB 向け ScaNN に関するホワイトペーパーをご覧ください。
ScaNN インデックスの主なメリット
端的に言うと、AlloyDB 向けの新しい ScaNN イデックスでは、pgvector のあらゆるメリットを享受できることに加えて、最先端のベクトル インデックスを利用できます。
-
少ないメモリ使用量: AlloyDB AI では、ScaNN インデックスを使用することにより、標準的な PostgreSQL の HNSW インデックスと比較してメモリ使用量を一般的に 3~4 分の 1 に抑えることができます。つまり、小さなマシンでも、大規模なワークロードでインメモリのパフォーマンスを提供できます。また、トランザクション ワークロード用のバッファのキャッシュなど、他のデータベース アクティビティに、より多くのメモリを振り分けることができます。
-
インデックス構築時間の短縮: AlloyDB AI の ScaNN インデックスは、標準的な PostgreSQL の HNSW インデックスと比べて、インデックス構築時間を最短で 8 分の 1 に短縮できます。特にコーパスのサイズが大きい場合や、デベロッパーが複数のインデックス構成やエンベディング モデルをテストする必要がある場合、生産性向上のためには時間の短縮が重要となります。
-
高い書き込みスループット: 標準的な PostgreSQL の HNSW インデックスよりも 10 倍高い書き込みスループットを備えているため、より多くのリアルタイム更新処理をこなすことができます。
-
高速なベクトルクエリ: AlloyDB AI は、標準的な PostgreSQL の HNSW インデックスと比べて最大 4 倍高速なベクトルクエリを実現します。
-
PostgreSQL との完全な互換性: AlloyDB の ScaNN インデックスは pgvector と互換性があるため、既存のベクトル エンベディングやクエリ構文をそのまま使用できます。既存のインデックスを置き換える新しいインデックスとして使用することも、既存の HNSW インデックスの補完として使用することも容易です。
-
SQL による優れたデベロッパー エクスペリエンス: セマンティック検索や生成 AI アプリケーションを構築するデベロッパーは、すでに身に付けているベクトル類似性検索についての SQL のスキルセットをそのまま使用できるとともに、結合やフィルタなどのあらゆる PostgreSQL クエリ機能を利用できます。また、運用中のデータに対して直接ベクトルクエリを実行できるので、技術スタックがシンプルになるほか、パフォーマンスを犠牲にすることなく、リアルタイムのデータを利用して最も有意義で関連性の高いエクスペリエンスを作り上げることができます。
「株式会社AbemaTVでは、AlloyDB AI のエンべディング生成およびベクトル検索を活用し、「ABEMA」の動画レコメンデーションを行っています。AlloyDB のモデルサポートやベクトル機能の迅速な拡張に期待しており、新たに提供されるモデルカタログを活用して、Gemini Pro のような最新エンベディングモデルを手軽に活用したいと考えています。また、新たに発表された ScaNN index によるベクトル検索の高速化を試すことを楽しみにしています。」- 株式会社AbemaTV, Engineering Manager, 菅 俊弥 氏
使ってみる
pgvector のグラフベースの HNSW インデックス、そして木量子化に基づく pgvector と互換性のある AlloyDB 向け ScaNN インデックスの両方を提供する AlloyDB によって、SQL データベースで最も豊富なネイティブ ベクトル検索オプションが利用可能になりました。
AlloyDB 向け ScaNN は、ダウンロード可能な AlloyDB Omni を介してテクノロジー プレビュー版として今すぐご利用いただけます。GCP の VM、ご自身のサーバーやノートパソコン、または任意のクラウド上に AlloyDB Omni をデプロイする方法については、クイックスタート ガイドをご覧ください。こちらのドキュメントを参考にすると、短時間で簡単にベクトルクエリの利用を開始できます。
-AlloyDB、グループ プロダクト マネージャー Sandy Ghai