← 戻る

DiskANN Explorer:数十億規模のベクトル検索からSSD

DiskANN は、RAM に各ベクトルのPQ で圧縮された小さなコピーを保持し、SSD には完全なベクトルとグラフを保持している。検索は、コストの低いRAM 比較を用いてグラフを走査し、その後、少数のコストの高いディスク読み取り操作を用いて上位の候補を再ランク付けする。

DiskANN が存在する理由:メモリの壁

RAMPQ コード(32 B/vec)3.2 GB
ディスク完全ベクトル + グラフ (3072 B/vec)307.2 GB
100M ベクトル ×768 次元ディスク /RAM ≈ 96×

単一のコモディティ・SSD で、ディスク側の処理は容易にこなせる。RAM 側は、どのノートPCにも収まる。PQ のトリックがなければ、データセットを読み込むだけでも、数百GBのRAM を備えたサーバーが必要になるだろう。

R5
グラフの次数
L8
候補プール
再ランク付け5
ディスク読み取り
速度420ms
各ステップごとに
PQ 比較(RAM) 候補プール内 ディスク再ランク付け top-K 結果
現在のステップ
30 / 30
検索完了。 Top-3: [1, 28, 27].

これまでのコスト

RAM PQ 比較する20≈ 20 µs
SSD 読み込み5≈ 500 µs
総レイテンシ0.52 ms
モデル化に使用したツール PQ ≈ 1 µs、 SSD ≈ 100 µsでモデル化されています。実数はハードウェアに依存します。

検索統計

訪問済み
20 / 36
再ランク付け
5
Top-3
[1, 28, 27]

『DiskANN 』の仕組み

  1. Vamana グラフを構築する:シーケンシャルなディスクレイアウトに最適化された単層kNNグラフ(次数R )。階層構造はなく、単一の大きなグラフである。
  2. ストレージの量子化と分割:各ベクトルには、ごく小さなPQ コード(例:32バイト)が割り当てられます。PQ コードはRAM に格納されています。完全なベクトルとグラフのエッジはSSD に格納されています。
  3. PQ 距離を用いたビームウォーク:固定された開始点(メドイド)から、サイズL の候補ベクトルプールを維持する。最良の候補をポップし、その近傍を拡張し、in-RAM PQ コードのみを使用して距離を推定する。ウォーク中はディスクI/Oを行わない。
  4. ディスク上で最終候補を再ランク付けする:候補プールの上位エントリの距離は、PQ によって近似されていた。ディスクからそれらのベクトル全体を読み込み、正確な距離を再計算して順位を確定する。
  5. top-K を返す。Total disk I/O = 少数のランダム読み取り(通常は20回未満)。

取引

  • スケーラビリティの理由: RAM には圧縮されたコードのみが格納される。32バイトのPQ を持つ1Bベクトルのデータセットには約32 GBが必要となるRAM — これは単一のワークステーションに収まる。
  • HNSW より遅い理由: SSD でのランダム読み取りは、RAM よりも約100倍遅い。読み取りがわずか10回程度であっても、クエリのレイテンシはディスクに大きく左右される。
  • リコール率において、なぜこれがIVF_PQ よりも優れているのか:再ランク付けステップにより、純粋なPQ に基づく手法では修正できない量子化誤差が回復されるためである。

メンタルモデル: PQ は、「この近隣領域は有望か?」という低コストなテストである。ディスク読み取りは、「実際に検証してみよう」という高コストなチェックである。DiskANN は、その作業の大部分をこの低コストなテストでこなしている。

DiskANN とは何ですか?

DiskANN は、RAM に収まらないデータセット向けに設計された、グラフベースの近似最近傍インデックスである。これは、効率的なディスクアクセス用にレイアウトされた単層のVamana グラフを構築し、メモリ内の各ベクトルに対してごく小さな積量子化 (PQ) コードを保持し、全精度のベクトルとグラフのエッジをSSD に格納する。 検索処理では、低コストなRAM PQ による比較を用いてグラフを探索し、ディスクにアクセスするのは、ごく少数の最終候補の順位付けを行う場合のみです。

『Milvus 』において、DiskANN はディスク上インデックスオプションの基盤となっている。これにより、数十ギガバイト(数百ギガバイトではない)のRAM を搭載したマシン上で、数十億規模のコレクションを検索可能にし、ディスク再ランク付けステップによって、リコール率をインメモリグラフインデックスと同等の水準に維持している。

各ノブが制御する機能

  • R (グラフの次数、構築時間): Vamana グラフにおけるノードあたりの辺の最大数。Rの値が大きいほど、接続性とリコール率は向上するが、その代償としてディスク上のグラフサイズが大きくなり、構築時間が長くなる。
  • L /search_list (クエリ時間):ビーム検索中に維持される候補プール。リコールとレイテンシを調整する主要なパラメータであり、HNSW のef に相当する。この値は、少なくともtop-K 以上でなければならない。
  • 再ランク付け予算:正確なスコアリングのために、SSD から完全なベクトルが取得されるファイナリストの数。それぞれがランダムなディスク読み取りとなるため、ここにクエリのレイテンシが発生する——また、PQ による近似誤差が修正されるのもここである。

DiskANN vsHNSW vsIVF

データセット(またはメモリ使用量)がRAM の処理能力を超える場合は、DiskANN を選択してください。これは、SSD の読み取りが主因となるミリ秒レベルのレイテンシを代償として、わずかなメモリ使用量で高リコール率のクエリに対応します。すべてがメモリに余裕を持って収まる場合は、HNSW の方が高速に回答します。ディスクを使用せずに高速なインデックス構築や適度なメモリ節約が必要な場合は、IVF のバリエーションが中間的な選択肢となります。

よくある質問

HNSW の代わりにDiskANN をいつ使用すべきですか?

ベクトルがRAM に収まらなくなった場合、あるいはそれらを格納するためのRAM のコストが許容範囲を超える場合。10億個の768次元浮動小数点ベクトルは、HNSW では約3 TBのメモリを必要とするが、RAM では数十GBのみ、さらにSSD とDiskANN を組み合わせれば収まる。データセットがメモリに余裕を持って収まる場合、HNSW は依然として低レイテンシの選択肢となる。

DiskANN にはどのようなハードウェアが必要ですか?

高速なNVMe (SSD )が重要な要件である。クエリのレイテンシは、ごく少数のランダムディスク読み取り(各約100 µs)によって支配されているためである。RAM の要件は控えめで、PQ のコード(例:ベクトルあたり32~64バイト)に作業用バッファを加えた程度である。

DiskANN は、HNSW のようなインメモリインデックスよりも処理速度が遅いのでしょうか?

クエリごとの処理時間については、はい――通常、メモリ内HNSW ではサブミリ秒であるのに対し、ディスク上の再ランク付けは1ミリ秒未満の低単一桁ミリ秒です。これは、ディスク上の再ランク付けがRAM へのアクセスに比べて約100倍遅いからです。その代償として、DiskANN は、リコール率を90~95%以上に維持しつつ、同じデータセットに対して1桁少ないRAM で処理を行います。

『DiskANN 』は、PQ による圧縮にもかかわらず、どのようにして高いリコール率を維持しているのでしょうか?

PQ コードはグラフ探索を制御するためにのみ使用され、最終スコアを算出するためのものではない。結果を返す前に、DiskANN はSSD から上位候補のフルプレシジョンベクトルを読み込み、それらを正確に再ランク付けする。これにより、IVF_PQ のような純粋なPQ ベースのインデックスでは修正できない量子化誤差が補正される。

さらに詳しく知りたい場合は、セットアップ要件については『DiskANN 』のドキュメントを参照するか、完全な決定ガイドについては『Index Explained』を参照してください。

探索を続けてください