AISAQCompatible with Milvus 2.6.4+
AISAQはディスクベースのベクトルインデックスで、DISKANNを拡張してRAMの制限を超えることなく億単位のデータセットを扱えるようにしたものです。圧縮されたベクトルをメモリ上に保持するDISKANNとは異なり、AISAQはすべてのデータをディスク上に保存し、パフォーマンスとストレージコストのバランスを取るために2つのモードを提供します。
ベクトルデータセットが大きすぎてRAMに快適に収まらない場合や、クエリパフォーマンスをメモリ要件の削減と引き換えにすることでインフラコストを最適化する必要がある場合にAISAQをご利用ください。
AISAQの仕組み
上図は、DISKANN、AISAQ-Performance、AISAQ-Scaleのストレージレイアウトを比較したもので、データ(生ベクトル、エッジリスト、PQコード)がRAMとディスクの間でどのように分配されるかを示しています。
AisaqとDiskannの比較
ファウンデーションDISKANNのまとめ
DISKANNでは、生のベクトルとエッジリストはディスクに保存され、PQ圧縮されたベクトルはメモリ(DRAM)に保存される。
DISKANNがノード(例えば、ベクトル0)にトラバースするとき:
生のベクトル(raw_vector_0)とそのエッジリスト(edgelist_0)をディスクからロードします。
エッジリストは、次に訪問する隣接ノード(この例ではノード2、3、5)を示します。
生ベクトルは、クエリーベクトルとの正確な距離を計算するために使用されます。
メモリ上のPQデータは、次の探索を導くための近似距離フィルタリングに使用される。
PQデータはすでにDRAMにキャッシュされているため、各ノードへのアクセスに必要なディスクI/Oは1回のみであり、適度なメモリ使用量で高いクエリー速度を実現する。
これらのコンポーネントとパラメータの詳細については、DISKANNを参照してください。
AISAQモード
AISAQは2つのディスクベースのストレージ戦略を提供する。主な違いは、PQ圧縮データの保存方法です。
AISAQ-パフォーマンス
AISAQ-performanceは、データのコロケーションと冗長性により低IOPSを維持しながら、PQデータをメモリからディスクに移動することで、完全なディスクベースのストレージを実現します。
このモードでは
各ノードの生ベクトル、エッジ・リスト、および隣接ノードのPQデータは、ディスク上に一緒に保存されます。
このレイアウトにより、あるノード(例:ベクター0)を訪問しても、ディスクI/Oは1回で済みます。
しかし、複数のノードの近傍にPQデータが冗長に格納されるため、インデックスファイルのサイズは大幅に増加し、より多くのディスクスペースを消費します。
AISAQスケール
AISAQ-scaleは、すべてのデータをディスク上に保持しながら、ディスク使用量を削減することに重点を置いています。
このモードでは
PQデータは冗長性を持たせずにディスク上に別々に保存される。
この設計はインデックスサイズを最小化するが、グラフ探索時のI/O操作の増加につながる。
IOPSオーバーヘッドを軽減するために、AISAQは2つの最適化を導入している:
データの局所性を向上させるために、PQベクトルを優先順位でソートするリアレンジ戦略。
頻繁にアクセスされるPQデータをキャッシュするDRAM内のPQキャッシュ(pq_cache_size)。
その結果、AISAQ-scaleはDISKANNやAISAQ-Performanceよりもストレージ効率は向上するが、性能は低下する。
構成例
# milvus.yaml
knowhere:
AISAQ:
build:
max_degree: 56 # Maximum degree of the Vamana graph
pq_code_budget_gb_ratio: 0.125 # Size limit on the PQ code (compared with raw data)
search_list_size: 100 # Size of the candidate list during building graph
search:
beam_width_ratio: 4 # Ratio between the maximum number of IO requests per search iteration and CPU number
AISAQ固有のパラメータ
AISAQはDISKANNから多くのパラメータを継承しています。冗長性を避けるため、以下ではAISAQ固有のパラメータのみを詳述する。max_degree 、pq_code_budget_gb_ratio 、search_list_size 、beam_width_ratio などの共有パラメータの説明については、DISKANN を参照してください。
パラメータ |
説明 |
値の範囲 |
チューニングの提案 |
|---|---|---|---|
|
ノードごとにインラインで保存される PQ ベクトルの数。ストレージレイアウトを決定する(パフォーマンス対スケールモード)。 |
型:整数 範囲:[0, max_degree[0,max_degree] デフォルト値: |
注意:ディスク性能に大きく依存する。限られたディスク帯域幅がボトルネックとなり、全体的なパフォーマンスを低下させる可能性があるからである。 |
|
I/Oの局所性を向上させるために、PQベクトルの優先順位によるソートを有効にする。 |
タイプブール値 範囲:[true, false[true, false] デフォルト値: |
クエリI/Oを減らしますが、インデックス構築時間が長くなります。 |
|
DRAM内のPQキャッシュサイズ(バイト)。 |
型:整数 範囲: [0, 1<<30[0, 1<<30] デフォルト値: |
より大きなキャッシュはクエリーパフォーマンスを向上させるが、DRAM使用量を増加させる。 |
考慮事項
ディスク性能は重要です。AISAQはSSDのIOPSに大きく依存します。ストレージの性能が低いとQPSが低下します。
AISAQ-performanceモード≈DISKANNレイテンシですが、数倍のディスク容量が必要になる場合があります。
AISAQスケールモードは、QPSがそれほど重要でないオフライン検索やデータアーカイブのワークロードに適しています。