milvus-logo
LFAI
フロントページへ
  • コンセプト

ディスク上のインデックス

この記事では、DiskANN と名付けられたディスク上のインデックス作成アルゴリズムを紹介する。Vamana グラフに基づき、DiskANN は大規模データセット内の効率的な検索を可能にします。

クエリー性能を向上させるため、各ベクトルフィールドにインデックスタイプを指定することができます。

現在、ベクトルフィールドは1つのインデックスタイプしかサポートしていません。Milvusはインデックスタイプを切り替えると、古いインデックスを自動的に削除します。

前提条件

DiskANNを使用するには、以下の点に注意してください。

  • DiskANNはデフォルトで無効になっています。オンディスクインデックスよりもインメモリインデックスを好む場合は、より良いパフォーマンスのためにこの機能を無効にすることをお勧めします。
    • 無効にするには、milvus設定ファイルのqueryNode.enableDiskfalse に変更してください。
    • 再び有効にするには、queryNode.enableDisktrue に設定します。
  • milvusインスタンスはUbuntu 18.04.6またはそれ以降のリリースで動作します。
  • MilvusデータパスはNVMe SSDにマウントしてください:
    • Milvusスタンドアロンインスタンスの場合、データパスはインスタンスが動作するコンテナ内の/var/lib/milvus/dataにする必要があります。
    • Milvusクラスタインスタンスの場合、データパスはQueryNodesおよびIndexNodesが実行されるコンテナ内の/var/lib/milvus/dataである必要があります。

制限

DiskANNを使用するには、以下を確認してください。

  • データに少なくとも 1 次元の浮動小数点ベクトルだけを使用する。
  • ベクトル間の距離の測定にはユークリッド距離 (L2)、内積 (IP)、または COSINE のみを使用する。

インデックスと検索の設定

  • インデックス構築パラメータ

    DiskANNインデックスを構築する場合、DISKANN をインデックスタイプとして使用します。インデックスパラメータは必要ありません。

  • 検索パラメータ

    パラメータ説明範囲デフォルト値
    search_list候補リストのサイズ。サイズが大きいほど、性能は低下するが、より高い想起率を提供する。[topk, int32_max] を指定する。16

DiskANNは調整可能である。${MILVUS_ROOT_PATH}/configs/milvus.yaml 、DiskANN関連のパラメータを変更して性能を向上させることができます。

...
DiskIndex:
  MaxDegree: 56
  SearchListSize: 100
  PQCodeBugetGBRatio: 0.125
  SearchCacheBudgetGBRatio: 0.125
  BeamWidthRatio: 4.0
...
パラメータ説明値の範囲デフォルト値
MaxDegreeVamanaグラフの最大次数。
値を大きくすると想起率が高くなるが、インデックスのサイズと構築時間が増加する。
[1, 512]56
SearchListSize候補リストのサイズ。
値が大きいほどインデックス構築にかかる時間が長くなるが、高い想起率が得られる。
インデックス構築時間を短縮する必要がない限り、MaxDegree より小さい値に設定する。
[1, int32_max]100
PQCodeBugetGBRatioPQコードのサイズ制限。
値を大きくすると想起率が高くなるが、メモリ使用量が増加する。
(0.0, 0.25]0.125
SearchCacheBudgetGBRatio生データに対するキャッシュされたノード番号の比率。
値を大きくするとインデックス構築性能が向上するが、メモリ使用量は増加する。
[0.0, 0.3)0.10
BeamWidthRatio検索反復あたりの最大 IO リクエスト数と CPU 数との比率。[1, max(128 / CPU数, 16)] を指定する。4.0

トラブルシューティング

  • io_setup() failed; returned -11, errno=11:Resource temporarily unavailable エラーの対処法は?

    Linuxカーネルは非同期ノンブロッキングI/O(Asynchronous non-blocking I/O: AIO)機能を提供しており、プロセスが複数のI/O操作を同時に開始しても、そのいずれかが完了するのを待つ必要はありません。これは、処理とI/Oが重複するアプリケーションのパフォーマンスを向上させるのに役立ちます。

    この性能は、proc ファイルシステム内の/proc/sys/fs/aio-max-nr 仮想ファイルを使用して調整できる。aio-max-nr パラメーターは、許容される同時リクエストの最大数を決定する。

    aio-max-nr のデフォルトは65535 であるが、10485760 に設定することもできる。

翻訳DeepL

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
フィードバック

このページは役に立ちましたか ?