インデックス構築レベルの調整
Zilliz Cloud では、build_level というパラメータが導入されており、対象のコレクションについてストレージ容量と検索再現率のバランスを調整できます。利用頻度が低いコレクションや、より多くのストレージ容量が必要なコレクションでは、再現率がわずかに低下することを許容する代わりに、ストレージ容量を大幅に増やすことができ、その逆も可能です。このガイドでは、利用可能なオプションと、それらを使用してコレクションのインデックスを構築する方法について説明します。
この機能は現在 PUBLIC REVIEW 段階であり、以下の条件を満たす Dedicated クラスターにのみ適用されます。
-
クラスターのタイプが Performance-optimized、Capacity-optimized、Tiered-storage のいずれかであること。
-
クラスターが Milvus v2.6.x と互換性があること。
この機能を試すためにクラスターをアップグレードできます。さらに明確化が必要な点があれば、お問い合わせください。
概要
Zilliz Cloud のクラスターは、タイプによって公称ストレージ容量が大きく異なります。performance-optimized クラスター内のコレクションが使用頻度の低い用途向けである場合、または追加のストレージが必要な場合は、そのコレクション内の FLOAT_VECTOR、FLOAT16_VECTOR、BFLOAT16_VECTOR などの浮動小数点ベクトル型のベクトルフィールドにインデックスを作成する際に、build_level を容量優先オプションに設定することを検討してください。これにより再現率がわずかに低下する可能性がありますが、ストレージ容量を 30% ~ 40% 増やすことができます。
build_level パラメータには、Precision-first (2)、Balanced (1)、Capacity-first (0) の 3 つのオプションがあります。
-
Balanced (1)
これはデフォルトのオプションであり、ほとんどのシナリオで検索精度とストレージ容量のバランスを取ります。
-
Precision-first (2)
このオプションは検索性能と高い再現率を優先するもので、高い精度が求められるコレクションに適しています。
-
Capacity-first (0)
このオプションはストレージ容量を重視するもので、追加のストレージ容量が必要なコレクションに最適です。
社内ベンチマークテストで示されているように、デフォルトのオプションはクラスターのタイプに関係なく、すべてのクラスターのストレージ容量を増加させます。performance-optimized クラスターでは、デフォルトのオプションによってストレージ容量が 60% 増加し、パフォーマンス(QPS)も 17% 向上します。
Performance-optimized クラスター
次の表は、build_level の導入前後における performance-optimized クラスターの容量、QPS、再現率を比較したものです。デフォルトのオプションが再現率を維持しつつ、QPS とストレージ容量の両方を増加させていることがわかります。
| 構築レベルオプション | 容量(CU あたり) | QPS | 再現率 |
|---|---|---|---|
| Capacity-first (0) | 500 万件の 768 次元ベクトル | ~ 1,800 | 90% - 95% |
| Balanced (1) | 200 万件の 768 次元ベクトル | ~ 2,800 | 91% - 97% |
| Precison-first (2) | 150 万件の 768 次元ベクトル | ~ 2,900 | 92% - 98% (↑) |
Capacity-optimized クラスター
次の表は、build_level の導入前後における capacity-optimized クラスターの容量、QPS、再現率を比較したものです。デフォルトのオプションが再現率を維持しつつ、QPS とストレージ容量の両方を増加させていることがわかります。
| 構築レベルオプション | 容量(CU あたり) | QPS | 再現率 |
|---|---|---|---|
| Capacity-first (0) | 1,200 万件の 768 次元ベクトル | ~ 200 | 89% - 97% |
| Balanced (1) | 800 万件の 768 次元ベクトル | ~ 300 | 93% - 98% |
| Precision-first (2) | 500 万件の 768 次元ベクトル | ~ 350 | 94% - 98% |
Tiered-storage クラスター
データの大部分が S3 に保存されるため、メモリはもはや主要なボトルネックではありません。その結果、クラスターの最大容量は比較的安定したままとなり、最も大きな影響を受けるのは Recall です。量子化レベルの違いにより、パフォーマンスにもわずかな変動が生じます。
-
Balanced (1): これは現在の状態を表しており、パフォーマンスは既存のベンチマークと整合しています。
-
Precision-first (2): インデックス構築レベルを上げると 再現率が約 3%~4% 向上 しますが、QPS がわずかに低下し、レイテンシが少し増加します。
-
Capacity-first (0): この構成は利点が小さいため、まれになると想定されます。容量は変わらない一方で、QPS とレイテンシのわずかな改善と引き換えに 再現率が 3%~4% 低下 します。
制限事項
操作を開始する前に、以下の制限事項を確認してください。
-
コレクションのインデックスを作成する際は、FLOAT_VECTOR、FLOAT16_VECTOR、BFLOAT16_VECTOR などの浮動小数点ベクトル型のベクトルフィールドにこのパラメータを設定する必要があります。
-
一度設定すると、このパラメータは変更できません。ただし、必要に応じてインデックスを削除し、目的の設定で別のインデックスを作成できます。
-
migration または backup を実行すると、
build_levelの設定は削除されます。migration または復元が完了した後、必要に応じてインデックスを削除し、目的の設定で別のインデックスを作成できます。
手順
ほとんどの場合、build_level を設定する必要はありません。デフォルト設定により、検索性能、精度、ストレージ容量のバランスを取ることができます。
Zilliz Cloud では、build_level をプログラムから設定することも、Zilliz Cloud コンソール上で設定することもできます。
build_level をプログラムから設定する
build_level を設定するには、FLOAT_VECTOR、FLOAT16_VECTOR、BFLOAT16_VECTOR などの浮動小数点型の ベクトルフィールドにインデックスを作成する 際に設定する必要があります。
次の例では、コレクションをすでに作成済みであることを前提としています。build_level を 1 に設定すると、Balanced オプションが適用されることを示します。
# 4. Set up index
# 4.1. Set up the index parameters
index_params = MilvusClient.prepare_index_params()
# 4.2. Add an index on the vector field.
index_params.add_index(
field_name="vector",
metric_type="COSINE",
index_type="AUTOINDEX",
index_name="vector_index",
build_level=1
)
# 4.4. Create an index file
client.create_index(
collection_name="customized_setup",
index_params=index_params
)
# 5. Describe index
res = client.list_indexes(
collection_name="customized_setup"
)
Zilliz Cloud コンソールで build_level を設定する
build_level をプログラムから設定する代わりに、コレクションを作成する際に Zilliz Cloud コンソール上で設定することもできます。
-
対象クラスターの Collection タブで + Create Collection をクリックします。
-
Create Collection ページで、コレクションのスキーマを設定します。
ベクトルフィールドのデータ型が、有効なオプションである FLOAT_VECTOR、FLOAT16_VECTOR、BFLOAT16_VECTOR のいずれかであることを確認してください。
-
Create Index セクションで、Edit Index をクリックします。
-
表示された Edit ベクトル Index フィールドで、Metric Type と Index Build Level を設定できます。