ディスク上のインデックス
この記事では、DiskANN と名付けられたディスク上のインデックス作成アルゴリズムを紹介する。Vamana グラフに基づき、DiskANN は大規模データセット内の効率的な検索を可能にします。
クエリー性能を向上させるため、各ベクトルフィールドにインデックスタイプを指定することができます。
前提条件
DiskANNを使用するには、以下の点に注意してください。
- DiskANNはデフォルトで無効になっています。オンディスクインデックスよりもインメモリインデックスを好む場合は、より良いパフォーマンスのためにこの機能を無効にすることをお勧めします。
- 無効にするには、milvus設定ファイルの
queryNode.enableDisk
をfalse
に変更してください。 - 再び有効にするには、
queryNode.enableDisk
をtrue
に設定します。
- 無効にするには、milvus設定ファイルの
- 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
PQCodeBugetGBRatio: 0.125
SearchCacheBudgetGBRatio: 0.125
BeamWidthRatio: 4.0
...
パラメータ | 説明 | 値の範囲 | デフォルト値 |
---|---|---|---|
MaxDegree | Vamanaグラフの最大次数。 値を大きくすると想起率が高くなるが、インデックスのサイズと構築時間が増加する。 | [1, 512] | 56 |
SearchListSize | 候補リストのサイズ。 値が大きいほどインデックス構築にかかる時間が長くなるが、高い想起率が得られる。 インデックス構築時間を短縮する必要がない限り、 MaxDegree より小さい値に設定する。 | [1, int32_max] | 100 |
PQCodeBugetGBRatio | 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
に設定することもできる。