GPU_CAGRA
GPU_CAGRAインデックスはGPU用に最適化されたグラフベースのインデックスです。MilvusのGPUバージョンを実行するために推論グレードのGPUを使用することは、高価なトレーニンググレードのGPUを使用することと比較して、費用対効果が高くなります。
インデックスの構築
Milvusでベクトル場のGPU_CAGRA インデックスを構築するには、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_CAGRA", # 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={
"intermediate_graph_degree": 64, # Affects recall and build time by determining the graph’s degree before pruning
"graph_degree": 32, # Affets search performance and recall by setting the graph’s degree after pruning
"build_algo": "IVF_PQ", # Selects the graph generation algorithm before pruning
"cache_dataset_on_device": "true", # Decides whether to cache the original dataset in GPU memory
"adapt_for_cpu": "false", # Decides whether to use GPU for index-building and CPU for search
} # Index building params
)
この構成では
index_type:構築するインデックスのタイプ。この例ではGPU_CAGRAとします。metric_type:ベクトル間の距離の計算方法。詳細については、メトリック・タイプを参照してください。params:インデックスを構築するための追加構成オプション。GPU_CAGRAインデックスで使用可能な構築パラメータについては、インデックス構築パラメータを参照してください。
インデックス・パラメータを構成したら、create_index() メソッドを直接使用するか、create_collection メソッドでインデックス・パラメータを渡してインデックスを作成できます。詳細は、コレクションの作成 を参照してください。
インデックスでの検索
インデックスが構築され、エンティティが挿入されると、インデックス上で類似検索を実行できます。
search_params = {
"params": {
"itopk_size": 16, # Determines the size of intermediate results kept during the search
"search_width": 8, # Specifies the number of entry points into the CAGRA graph during the 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:インデックスで検索するための追加構成オプション。GPU_CAGRAインデックスで使用できる検索パラメータについては、インデックス固有の検索パラメータ を参照してください。
ロード時にCPU検索を有効にするCompatible with Milvus 2.6.4+
ロード時に動的にCPU検索を有効にするには、milvus.yaml で以下の設定を編集します:
# milvus.yaml
knowhere:
GPU_CAGRA:
load:
adapt_for_cpu: true
動作
load.adapt_for_cpuがtrueに設定されている場合、Milvusはロード時にGPU_CAGRAインデックスをCPU実行可能形式(HNSWライク)に変換します。インデックスが元々GPU用に構築されていたとしても、その後の検索操作はCPU上で実行されます。
省略またはfalseの場合、インデックスはGPU上に残り、検索はGPU上で実行される。
GPUリソースがインデックス構築のために予約されているが、検索はCPUで実行されるようなハイブリッドまたはコスト重視の環境では、ロード時CPU適応を使用する。
インデックスパラメータ
このセクションでは、インデックスを構築し、インデックス上で検索を実行するために使用されるパラメータの概要を示します。
インデックス構築パラメータ
次の表は、インデックスを構築する際にparams で設定できるパラメーターの一覧です。
パラメータ |
説明 |
デフォルト値 |
|---|---|---|
|
プルーニングの前にグラフの次数を決定することで、想起と構築時間に影響する。推奨値は |
|
|
プルーニング後のグラフの次数を設定することで、検索パフォーマンスと想起に影響する。この2つの次数の差が大きいほど、構築時間が長くなる。この値は |
|
|
プルーニング前のグラフ生成アルゴリズムを選択する。取り得る値:
|
|
|
元のデータセットをGPUメモリにキャッシュするかどうかを決定します。可能な値:
|
|
|
インデックス構築にGPUを使用し、検索にCPUを使用するかを決定する。 このパラメータを |
|
インデックス固有の検索パラメータ
次の表は、インデックスで検索する際にsearch_params.params で設定できるパラメーターの一覧です。
パラメータ |
説明 |
デフォルト値 |
|---|---|---|
|
検索中に保持する中間結果のサイズを決定する。この値を大きくすると、検索パフォーマンスを犠牲にして再現性が向上する可能性がある。少なくとも最終的な top-k (limit) 値に等しくなければならず、通常は 2 のべき乗 (例: 16, 32, 64, 128) である。 |
空 |
|
検索中に CAGRA グラフに入る点の数を指定する。この値を大きくすると、想起率は向上するが、検索性能に影響を与える可能性がある(例:1, 2, 4, 8, 16, 32)。 |
空 |
|
検索の反復処理を制御する。デフォルトでは |
|
|
GPU でのメトリック距離計算に使用する CUDA スレッド数を指定します。一般的な値は2の累乗から32までです(例:2、4、8、16、32)。これは検索性能に軽微な影響を与えます。デフォルト値は |
|
|
クエリ時間と精度のトレードオフを指定します。 インデックス作成時に |
|