インデックス構築レベルの調整
Zilliz Cloud では、build_level というパラメータを導入しています。これにより、ユーザーは対象コレクションのストレージ容量と検索再現率のバランスを取ることができます。あまり使用されないコレクションや、より多くのストレージ容量が必要なコレクションでは、わずかな再現率の低下を犠牲にして、ストレージ容量を大幅に増加させることができ、その逆も可能です。このガイドでは、利用可能なオプションと、それらを使用してコレクションのインデックスを構築する方法について説明します。
この機能は現在パブリックレビュー中であり、以下の条件を満たす専用クラスターでのみ適用されます:
クラスターがパフォーマンス最適化済み、容量最適化済み、および階層型ストレージタイプであること、および
クラスターがMilvus v2.6.xと互換性があること。
この機能をテストするためにクラスターをアップグレードできます。さらに説明が必要な事項がある場合は、お問い合わせください。
概要
Zilliz Cloud の異なるタイプのクラスターは、謳われているストレージ容量に大きな差があります。パフォーマンス最適化済みクラスター内のコレクションがあまり使用されない場合や、追加のストレージが必要な場合は、コレクション内の FLOAT_VECTOR、FLOAT16_VECTOR、BFLOAT16_VECTOR などの浮動小数点ベクトル型のベクトルフィールドにインデックスを作成する際に、build_level を容量優先オプションに設定することを検討してください。これにより再現率がわずかに低下する可能性がありますが、ストレージ容量を 30% から 40% 向上させることができます。
build_level パラメータには 3 つのオプションがあります: 精度優先 (2)、バランス (1)、容量優先 (0)。
-
バランス (1)
これはデフォルトのオプションで、ほとんどのシナリオで検索精度とストレージ容量のバランスを取ります。
-
精度優先 (2)
このオプションは検索パフォーマンスと高い再現率を優先し、高い精度が必要なコレクションに適しています。
-
容量優先 (0)
このオプションはストレージ容量を重視し、追加のストレージ容量が必要なコレクションに最適です。
内部ベンチマークテストで示されているように、デフォルトのオプションはクラスターのタイプに関わらず、すべてのクラスターのストレージ容量を増加させます。パフォーマンス最適化済みクラスターの場合、デフォルトのオプションはストレージ容量を 60% 向上させ、パフォーマンス(QPS)を 17% 改善させることさえあります。
パフォーマンス最適化済みクラスター
以下の表は、build_level の導入前後におけるパフォーマンス最適化済みクラスターの容量、QPS、および再現率を比較したものです。デフォルトのオプションは再現率を維持し、QPS とストレージ容量の両方を増加させることがわかります。
構築レベルオプション | 容量 | QPS | 再現率 |
|---|---|---|---|
容量優先 (0) | 210 万個の 768 次元ベクトル | ~ 2,850 | 90% - 95% |
バランス (1) | 150 万個の 768 次元ベクトル | ~ 3,500 | 91% - 97% |
精度優先 (2) | 100 万個の 768 次元ベクトル | ~ 3,000 | 92% - 98% (↑) |
容量最適化済みクラスター
以下の表は、build_level の導入前後における容量最適化済みクラスターの容量、QPS、および再現率を比較したものです。デフォルトのオプションは再現率を維持し、QPS とストレージ容量の両方を増加させることがわかります。
構築レベルオプション | 容量 | QPS | 再現率 |
|---|---|---|---|
容量優先 (0) | 700 万個の 768 次元ベクトル | ~ 300 | 89% - 97% |
バランス (1) | 500 万個の 768 次元ベクトル | ~ 350 | 93% - 98% |
精度優先 (2) | 300 万個の 768 次元ベクトル | ~ 345 | 94% - 98% |
階層型ストレージクラスター
データの大部分が S3 に保存されるため、メモリはもはや主要なボトルネックではありません。その結果、クラスターの最大容量は比較的安定したままとなります。最も大きな影響は再現率に及び、異なる量子化レベルによるパフォーマンスのわずかな変動が見られます。
-
バランス (1): これは現在の状態を表し、パフォーマンスは既存のベンチマークと一致したままです。
-
精度優先 (2): 構築レベルを上げると、再現率が約 3%–4% 改善されますが、QPS がわずかに低下し、レイテンシがわずかに増加します。
-
容量優先 (0): メリットが最小限であるため、この構成は稀であると予想されます。容量は変わりませんが、QPS とレイテンシのわずかな改善と引き換えに、再現率が 3%–4% 低下します。
制限
操作を開始する前に、以下の制限を確認してください:
-
パフォーマンス最適化済みまたは容量最適化済みタイプの Milvus 2.6.x 互換の専用クラスターのみ、この設定を許可します。
-
コレクションにインデックスを作成する際、FLOAT_VECTOR、FLOAT16_VECTOR、BFLOAT16_VECTOR を含む浮動小数点ベクトル型のベクトルフィールドにこのパラメータを設定する必要があります。
-
一度設定すると、このパラメータは変更できません。ただし、必要に応じてインデックスを削除し、希望の設定で新しいインデックスを作成することができます。
-
マイグレーションまたはバックアップにより、
build_levelの設定は削除されます。マイグレーションまたは復元が完了した後、必要に応じてインデックスを削除し、希望の設定で新しいインデックスを作成することができます。
手順
ほとんどの場合、build_level を設定する必要はありません。デフォルトの設定により、検索パフォーマンス、精度、およびストレージ容量のバランスを取ることができます。
Zilliz Cloud では、build_level をプログラムで、または Zilliz Cloud コンソール上で設定できます。
build_level をプログラムで設定する
build_level を設定するには、FLOAT_VECTOR、FLOAT16_VECTOR、BFLOAT16_VECTOR などの浮動小数点型のベクトルフィールドにインデックスを作成する際に行う必要があります。
以下の例では、準備の手順を完了していることを前提としています。build_level を 1 に設定すると、バランス オプションが適用されることを示します。
# 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 Vector Index フィールドで、メトリックタイプ と Index Build Level を設定できます。