• Milvusについて
  • スタート
  • コンセプト
  • ユーザーガイド
  • データインポート
  • AIツール
  • 管理ガイド
  • ツール
  • 統合
  • チュートリアル
  • よくあるご質問
  • API Reference

GPU_CAGRA

GPU_CAGRAインデックスはGPU用に最適化されたグラフベースのインデックスです。MilvusのGPUバージョンを実行するために推論グレードのGPUを使用することは、高価なトレーニンググレードのGPUを使用することと比較して、費用対効果が高くなります。

インデックスの構築

Milvusでベクトル場のGPU_CAGRA インデックスを構築するには、add_index() メソッドを使用し、index_typemetric_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_cputrue に設定されている場合、Milvusはロード時にGPU_CAGRAインデックスをCPU実行可能形式(HNSWライク)に変換します。

  • インデックスが元々GPU用に構築されていたとしても、その後の検索操作はCPU上で実行されます。

  • 省略またはfalseの場合、インデックスはGPU上に残り、検索はGPU上で実行される。

GPUリソースがインデックス構築のために予約されているが、検索はCPUで実行されるようなハイブリッドまたはコスト重視の環境では、ロード時CPU適応を使用する。

インデックスパラメータ

このセクションでは、インデックスを構築し、インデックス上で検索を実行するために使用されるパラメータの概要を示します。

インデックス構築パラメータ

次の表は、インデックスを構築する際にparams で設定できるパラメーターの一覧です。

パラメータ

説明

デフォルト値

intermediate_graph_degree

プルーニングの前にグラフの次数を決定することで、想起と構築時間に影響する。推奨値は32 または64

128

graph_degree

プルーニング後のグラフの次数を設定することで、検索パフォーマンスと想起に影響する。この2つの次数の差が大きいほど、構築時間が長くなる。この値はintermediate_graph_degree の値より小さくなければならない。

64

build_algo

プルーニング前のグラフ生成アルゴリズムを選択する。取り得る値:

  • IVF_PQ:より高い品質を提供するが、構築時間は遅くなる。

  • NN_DESCENT:リコールは低くなる可能性があるが、迅速なビルドを提供する。

IVF_PQ

cache_dataset_on_device

元のデータセットをGPUメモリにキャッシュするかどうかを決定します。可能な値:

  • "true":元のデータセットをキャッシュし、検索結果を精緻化することでリコールを向上させる。

  • "false":GPUメモリを節約するため、元のデータセットをキャッシュしない。

"false"

adapt_for_cpu

インデックス構築にGPUを使用し、検索にCPUを使用するかを決定する。

このパラメータを"true" に設定するには、検索リクエストにef パラメータが存在する必要がある。

"false"

インデックス固有の検索パラメータ

次の表は、インデックスで検索する際にsearch_params.params で設定できるパラメーターの一覧です。

パラメータ

説明

デフォルト値

itopk_size

検索中に保持する中間結果のサイズを決定する。この値を大きくすると、検索パフォーマンスを犠牲にして再現性が向上する可能性がある。少なくとも最終的な top-k (limit) 値に等しくなければならず、通常は 2 のべき乗 (例: 16, 32, 64, 128) である。

search_width

検索中に CAGRA グラフに入る点の数を指定する。この値を大きくすると、想起率は向上するが、検索性能に影響を与える可能性がある(例:1, 2, 4, 8, 16, 32)。

min_iterations /max_iterations

検索の反復処理を制御する。デフォルトでは0 に設定されており、CAGRA はitopk_sizesearch_width に基づいて自動的に反復回数を決定する。これらの値を手動で調整することで、性能と精度のバランスをとることができます。

0

team_size

GPU でのメトリック距離計算に使用する CUDA スレッド数を指定します。一般的な値は2の累乗から32までです(例:2、4、8、16、32)。これは検索性能に軽微な影響を与えます。デフォルト値は0 で、milvus はベクトル次元に基づいて自動的にteam_size を選択します。

0

ef

クエリ時間と精度のトレードオフを指定します。ef の値を高くすると、検索精度は高くなりますが、検索速度は遅くなります。

インデックス作成時にadapt_for_cputrue に設定した場合、このパラメータは必須です。

[top_k, int_max]