オンディスク インデックス
この記事では、ディスクに最適化されたベクトル検索用のオンディスク インデキシング アルゴリズムである DiskANN を紹介する。Vamana グラフに基づく DiskANN は、大規模データセット内の効率的なディスク上ベクトル検索を可能にします。
クエリー性能を向上させるために、各ベクトルフィールドにインデックスタイプを指定することができます。
前提条件
MilvusでDiskANNを使用するには、以下の点に注意してください。
- 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設定
DiskANNは調整可能である。${MILVUS_ROOT_PATH}/configs/milvus.yaml 、DiskANN関連のパラメータを変更して性能を向上させることができます。
...
DiskIndex:
MaxDegree: 56
SearchListSize: 100
PQCodeBudgetGBRatio: 0.125
SearchCacheBudgetGBRatio: 0.125
BeamWidthRatio: 4.0
...
| パラメータ | 説明 | 値の範囲 | デフォルト値 |
|---|---|---|---|
MaxDegree | Vamanaグラフの最大次数。 値を大きくすると想起率が高くなるが、インデックスのサイズと構築時間が増加する。 | [1, 512] | 56 |
SearchListSize | 候補リストのサイズ。 値が大きいほどインデックス構築にかかる時間が長くなるが、高い想起率が得られる。 インデックス構築時間を短縮する必要がない限り、 MaxDegree より小さい値に設定する。 | [1, int32_max] | 100 |
PQCodeBudgetGBRatio | PQコードのサイズ制限。 値を大きくすると想起率が高くなるが、メモリ使用量が増加する。 | (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に設定することもできる。