GPU_IVF_PQ
GPU_IVF_PQインデックスは、IVF_PQ のコンセプトに基づき、逆ファイルクラスタリングと積量子化 (PQ) を組み合わせたものです。PQ は、高次元ベクトルをより小さな部分空間に分解して量子化し、効率的な類似性検索を実現します。GPU環境専用に設計されたGPU_IVF_PQは、並列処理を活用して計算を高速化し、大規模なベクトルデータを効率的に処理します。基本概念の詳細については、IVF_PQを参照してください。
インデックスの構築
Milvusでベクトル場にGPU_IVF_PQ インデックスを構築するには、add_index() メソッドを使用し、index_type 、metric_type 、インデックスの追加パラメータを指定します。
from pymilvus import MilvusClient
# Prepare index building params
index_params = MilvusClient.prepare_index_params()
index_params.add_index(
field_name="your_vector_field_name", # Name of the vector field to be indexed
index_type="GPU_IVF_PQ", # Type of the index to create
index_name="vector_index", # Name of the index to create
metric_type="L2", # Metric type used to measure similarity
params={
"m": 4, # Number of sub-vectors to split eahc vector into
} # Index building params
)
この設定では
index_type:構築するインデックスのタイプ。この例ではGPU_IVF_PQとします。metric_type:ベクトル間の距離の計算方法。サポートされている値には、COSINE、L2、IPがあります。詳細については、メトリック・タイプを参照してください。params:インデックスを構築するための追加設定オプション。m:ベクトルを分割するサブベクトルの数。
GPU_IVF_PQインデックスで使用可能な構築パラメータの詳細については、インデックス構築パラメータを参照してください。
インデックス・パラメータを構成したら、create_index() メソッドを直接使用するか、create_collection メソッドでインデックス・パラメータを渡してインデックスを作成できます。詳細は、コレクションの作成 を参照してください。
インデックスでの検索
インデックスが構築され、エンティティが挿入されると、インデックス上で類似検索を実行できます。
search_params = {
"params": {
"nprobe": 10, # Number of clusters to search
}
}
res = MilvusClient.search(
collection_name="your_collection_name", # Collection name
anns_field="vector_field", # Vector field name
data=[[0.1, 0.2, 0.3, 0.4, 0.5]], # Query vector
limit=3, # TopK results to return
search_params=search_params
)
この構成では
params:インデックスで検索するための追加構成オプション。nprobe:検索するクラスタの数。
GPU_IVF_PQインデックスで利用可能な検索パラメータについては、インデックス固有の検索パラメータを参照してください。
インデックスパラメータ
このセクションでは、インデックスを構築し、インデックス上で検索を実行する際に使用するパラメータの概要を説明します。
インデックス構築パラメータ
以下の表は、params でインデックスを構築する際に設定できるパラメータの一覧です。
パラメータ |
説明 |
値の範囲 |
チューニングの提案 |
|
|---|---|---|---|---|
IVF |
|
インデックス構築時にk-meansアルゴリズムを使用して作成するクラスタの数。 |
型:整数:[1, 65536] デフォルト値: |
|
PQ |
|
量子化処理時に各高次元ベクトルを分割するサブベクトルの数(量子化に使用)。 |
タイプ:整数:[1, 65536] デフォルト値:なし |
ほとんどの場合、この範囲内の値を設定することをお勧めします:[D/8, D]。 |
|
各サブベクトルの重心インデックスを圧縮形式で表現するためのビット数。各コードブックは2nビットのセントロイドを含む。例えば、 |
タイプ整数:[1, 24] デフォルト値: |
|
|
|
元のデータセットをGPUメモリにキャッシュするかどうかを決定します。設定可能な値:
|
タイプ文字列の範囲:[ デフォルト値: |
|
インデックス固有の検索パラメーター
次の表は、インデックスで検索するときにsearch_params.params で設定できるパラメー タの一覧です。
パラメータ |
説明 |
値の範囲 |
チューニングサジェスチョン |
|
|---|---|---|---|---|
IVF |
|
候補を検索するクラスタの数。 |
型:整数Range:[1,nlist] デフォルト値: |
値を大きくすると、より多くのクラスターを検索できるようになり、検索範囲が広がることでリコールが向上しますが、その代償としてクエリの待ち時間が長くなります。速度と精度のバランスをとるために、 ほとんどの場合、この範囲内の値を設定することをお勧めします:[1, nlist]。 |