1.index_file_size
Milvus設定のベストプラクティスでは、Milvus 0.6.0設定のベストプラクティスを紹介しました。今回は、Milvusクライアントにおいて、テーブルの作成、インデックスの作成、検索などの操作を行う際の主要なパラメータを設定する際のベストプラクティスについても紹介します。これらのパラメータは検索性能に影響を与えます。
1.index_file_size
テーブルを作成する際、index_file_sizeパラメータを使用して、データ格納用の単一ファイルのサイズをMB単位で指定します。デフォルトは1024です。ベクターデータをインポートする際、Milvusはデータをインクリメンタルにファイルに結合します。ファイルサイズがindex_file_sizeに達すると、このファイルは新しいデータを受け付けず、Milvusは新しいデータを別のファイルに保存します。これらはすべて生データファイルである。インデックスが作成されると、Milvusは各rawデータファイルに対してインデックスファイルを生成します。IVFLATインデックスタイプの場合、インデックスファイルのサイズは対応する生データファイルのサイズにほぼ等しくなります。SQ8インデックスの場合、インデックスファイルのサイズは対応する生データファイルの約30%である。
検索中、Milvusは各インデックスファイルを1つずつ検索します。我々の経験では、index_file_sizeを1024から2048に変更すると、検索性能は30%から50%向上する。しかし、この値が大きすぎると、大きなファイルをGPUメモリ(あるいはCPUメモリ)にロードできないことがあります。たとえば、GPU メモリが 2 GB で index_file_size が 3 GB の場合、インデックス・ファイルは GPU メモリにロードできません。通常、index_file_size を 1024 MB または 2048 MB に設定します。
次の表は、index_file_size に sift50m を使用したテストです。インデックス・タイプはSQ8です。
1-sift50m-テスト結果-milvus.png
CPUモードでもGPUモードでも、index_file_sizeが1024 MBの代わりに2048 MBになると、検索パフォーマンスが大幅に向上することがわかる。
2.nlist
と nprobe
nlist
パラメーターはインデックス作成に使用され、nprobe
パラメーターは検索に使用されます。IVFLATとSQ8はどちらもクラスタリング・アルゴリズムを使って大量のベクトルをクラスタ(バケット)に分割します。nlist
はクラスタリング中のバケットの数です。
インデックスを使って検索する場合、最初のステップはターゲット・ベクトルに最も近いバケットを一定数見つけることであり、2番目のステップはバケットからベクトル距離によって最も類似したk個のベクトルを見つけることである。nprobe
はステップ1におけるバケット数である。
一般的に、nlist
を増やすとバケット数が増え、クラスタリング中のバケット内のベクトル数が少なくなる。その結果、計算負荷が減少し、検索性能が向上する。しかし、類似度比較のためのベクトルが少なくなると、正しい結果が見落とされる可能性があります。
nprobe
を増やすと、検索するバケットが増える。その結果、計算負荷は増加し、検索性能は悪化するが、検索精度は向上する。分布の異なるデータセットごとに状況は異なるかもしれない。nlist
とnprobe
を設定する際には,データセットのサイズも考慮する必要がある.一般に,nlist
は4 * sqrt(n)
とすることが推奨される.ここで n はベクトルの総数である.nprobe
については、精度と効率のトレードオフを行う必要があり、試行錯誤を繰り返して値を決定するのが最良の方法である。
次の表は、nlist
とnprobe
に対して sift50m を使用したテストです。インデックス・タイプはSQ8である。
sq8-index-test-sift50m.png
この表は、nlist
/nprobe
の異なる値を使用して、検索性能と精度を比較したものです。 CPU と GPU のテストが同様の結果を示したため、GPU の結果のみが表示されています。このテストでは、nlist
/nprobe
の値が同じ割合で増加すると、検索精度も増加します。nlist
= 4096、nprobe
が 128 のとき、Milvus は最高の検索性能を発揮します。結論として、nlist
とnprobe
の値を決定する際には、異なるデータセットと要件を考慮して、性能と精度のトレードオフを行う必要がある。
まとめ
index_file_size
:データサイズがindex_file_size
より大きい場合、index_file_size
の値が大きいほど、検索性能は向上する。nlist
とnprobe
:性能と精度のトレードオフを行う必要がある。
- 2.nlist と nprobe
- まとめ
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word