ScaNN インデックス リファレンス

このページでは、ScaNN インデックスのリファレンス マテリアルについて説明します。

調整パラメータ

次のインデックス パラメータとデータベース フラグを組み合わせて使用することで、再現率と QPS の適切なバランスを見つけることができます。

チューニング パラメータ 説明 オプションの種類
max_num_levels K 平均法クラスタリング ツリーの重心レベルの最大数。
  • 2 レベルのツリー インデックス: 2 レベルのツリー(1 つの中心点レベルと下位リーフレベル)の場合は、デフォルトで 1 に設定されます。
  • 3 レベルのツリー インデックス: 3 レベルのツリー(2 つの重心レベルと下位リーフレベル)の場合は、デフォルトで 2 に設定されます。
  • ベクトルの行数が 1 億行を超える場合は、値を 2 に設定します。
  • ベクトル行数が 1,000 万行未満の場合は、値を 1 に設定します。
  • ベクトル行数が 1,000 万~ 1 億行の場合は、1 または 2 に設定して、インデックスの構築時間を最適化(2 に設定)するか、検索レコールを最適化(1 に設定)します。
インデックスの作成
(省略可)
num_leaves このインデックスに適用するパーティションの数。インデックスの作成時に適用するパーティションの数は、インデックスのパフォーマンスに影響します。設定された数のベクトルのパーティションを増やすと、よりきめ細かいインデックスが作成され、再現率とクエリのパフォーマンスが向上します。ただし、インデックスの作成時間が長くなるというデメリットがあります。

3 レベルのツリーは 2 レベルのツリーよりも構築が速いため、3 レベルのツリー インデックスを作成するときに num_leaves_value を増やすと、パフォーマンスを向上させることができます。
  • 2 レベル インデックス: この値は、11048576 の範囲で任意の値に設定します。

    インデックスの高速ビルドと優れた検索パフォーマンスのバランスを取るインデックスの場合は、sqrt(ROWS) を開始点として使用します。ここで、ROWS はベクトル行の数です。各パーティションが保持するベクトルの数は、
    ROWS/sqrt(ROWS) = sqrt(ROWS) で計算されます。

    2 レベルのツリー インデックスは、ベクトル行数が 1,000 万未満のデータセットに作成できるため、各パーティションは sqrt(10M) 未満のベクトル(3200 ベクトル)を保持します。ベクトル検索の品質を最適化するには、各パーティション内のベクトルの数を最小限に抑えることをおすすめします。推奨されるパーティション サイズはパーティションあたり約 100 個のベクトルであるため、num_leavesROWS/100 に設定します。ベクトルが 1,000 万個ある場合は、num_leaves を 100,000 に設定します。
  • 3 レベル インデックス: この値は、11048576 の範囲内の任意の値に設定します。

    正確な値を選択できない場合は、power(ROWS, 2/3) を開始点として使用します。ここで、ROWS はベクトル行の数です。各パーティションが保持するベクトル数は
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3) で計算されます。

    3 レベルのツリー インデックスは、ベクトル行数が 1 億を超えるデータセットに作成できるため、各パーティションは
    power(100M, 1/3))を超えるベクトル(465 ベクトル)を保持します。ベクトル検索の品質を最適化するには、各パーティション内のベクトルの数を最小限に抑えることをおすすめします。推奨されるパーティション サイズはパーティションあたり約 100 個のベクトルであるため、num_leavesROWS/100 に設定します。1 億個のベクトルがある場合は、num_leaves を 100 万に設定します。
インデックスの作成
(必須)
quantizer K 平均法ツリーに使用する量子化ツールのタイプ。デフォルト値は SQ8 に設定されています。これにより、再現率の損失を最小限に抑えながら(通常は 1 ~ 2% 未満)、クエリのパフォーマンスを向上させることができます。

再現率が 99% 以上必要な場合は、FLAT に設定します。
インデックスの作成
(省略可)
scann.enable_pca 主成分分析(PCA)を有効にします。これは、可能な場合はエンベディングのサイズを自動的に縮小するために使用される次元削減手法です。このオプションはデフォルトで有効になっています。

再現率の低下が観測された場合は、false に設定します。
インデックスの作成
(省略可)
scann.num_leaves_to_search このデータベース フラグは、検索するリーフまたはパーティションの絶対数を制御します。これにより、レジュールと QPS をトレードオフできます。デフォルト値は、num_leaves で設定された値の 1% です。

値を大きくすると再現率は高くなりますが、QPS は低くなります。同様に、値を小さくすると、再現率は低下しますが QPS は高くなります。
クエリ ランタイム
(省略可)
scann.pre_reordering_num_neighbors データベース フラグを設定すると、最初の検索で候補のセットが特定された後の並べ替えステージで検討する近傍候補の数を指定できます。このパラメータは、クエリで返される近傍の数よりも大きい値に設定します。

値を大きくすると再現率は高くなりますが、QPS は低くなります。並べ替えを無効にするには、この値を 0 に設定します。インデックスの作成時に PCA が有効になっていない場合、デフォルトは 0 です。それ以外の場合、デフォルトは 50 x K です。ここで、K はクエリで指定された LIMIT です。
クエリ ランタイム
(省略可)
scann.num_search_threads マルチスレッド検索の検索スレッド数。これにより、レイテンシに敏感なアプリケーションで ScaNN ANN 検索に複数のスレッドを使用することで、単一クエリのレイテンシを短縮できます。データベースがすでに CPU バウンドになっている場合、この設定では単一クエリのレイテンシは改善されません。デフォルト値は 2 です。 クエリ ランタイム
(省略可)

次のステップ