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

GPU_IVF_PQ

GPU_IVF_PQインデックスは、IVF_PQ のコンセプトに基づき、逆ファイルクラスタリングと積量子化 (PQ) を組み合わせたものです。PQ は、高次元ベクトルをより小さな部分空間に分解して量子化し、効率的な類似性検索を実現します。GPU環境専用に設計されたGPU_IVF_PQは、並列処理を活用して計算を高速化し、大規模なベクトルデータを効率的に処理します。基本概念の詳細については、IVF_PQを参照してください。

インデックスの構築

Milvusでベクトル場にGPU_IVF_PQ インデックスを構築するには、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_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:ベクトル間の距離の計算方法。サポートされている値には、COSINEL2IP があります。詳細については、メトリック・タイプを参照してください。

  • 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

nlist

インデックス構築時にk-meansアルゴリズムを使用して作成するクラスタの数。

:整数[1, 65536]

デフォルト値128

nlist の値を大きくすると、より洗練されたクラスターを作成することでリコールが向上しますが、インデックス構築時間が長くなります。ほとんどの場合、この範囲内の値を設定することを推奨する:[32, 4096].

PQ

m

量子化処理時に各高次元ベクトルを分割するサブベクトルの数(量子化に使用)。

タイプ:整数[1, 65536]

デフォルト値:なし

m の値を大きくすると精度が向上するが、計算の複雑さとメモリ使用量も増加する。m は、適切な分解を保証するために、ベクトル次元(D)の約数でなければならない。一般的に推奨される値はm = D/2 です。

ほとんどの場合、この範囲内の値を設定することをお勧めします:[D/8, D]。

nbits

各サブベクトルの重心インデックスを圧縮形式で表現するためのビット数。各コードブックは2nビットのセントロイドを含む。例えば、nbits が 8 に設定された場合、各サブベクトルは 8 ビットのセントロイドのインデックスで表現される。これにより、そのサブベクタのコードブックには28個(256個)のセントロイドの可能性がある。

タイプ整数[1, 24]

デフォルト値8

nbits の値を大きくすると、コードブックが大きくなり、元のベクトルをより正確に表現できる可能性がある。ほとんどの場合、この範囲内の値を設定することを推奨します:[1, 16].

cache_dataset_on_device

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

  • "true":元のデータセットをキャッシュし、検索結果を絞り込んで再現性を高めます。

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

タイプ文字列の範囲:["true","false"]。

デフォルト値"false"

"true" に設定すると、検索結果を絞り込むことで再現性を高めるが、より多くのGPUメモリを使用する。"false" に設定するとGPUメモリを節約します。

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

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

パラメータ

説明

値の範囲

チューニングサジェスチョン

IVF

nprobe

候補を検索するクラスタの数。

:整数Range:[1,nlist]

デフォルト値8

値を大きくすると、より多くのクラスターを検索できるようになり、検索範囲が広がることでリコールが向上しますが、その代償としてクエリの待ち時間が長くなります。速度と精度のバランスをとるために、nlist に比例してnprobe を設定します。

ほとんどの場合、この範囲内の値を設定することをお勧めします:[1, nlist]。

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
フィードバック

このページは役に立ちましたか ?