GPU_IVF_PQ

GPU_IVF_PQ索引以IVF_PQ概念為基礎,結合了反向檔案聚類 (inverted file clustering) 與 Product Quantization (PQ),PQ 可將高維向量分解成較小的子空間,並將其量化以進行有效率的相似性搜尋。GPU_IVF_PQ 是專為 GPU 環境所設計,可利用平行處理來加速計算,並有效處理大規模向量資料。有關基礎概念的詳細資訊,請參閱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

nlist

在建立索引時使用 k-means 演算法建立的叢集數目。

類型:整數範圍:[1, 65536]

預設值128

較大的nlist 值會透過建立更精細的叢集來改善回復率,但會增加索引建立時間。根據資料集大小和可用資源進行最佳化。 在大多數情況下,我們建議您設定此範圍內的值:[32, 4096].

PQ

m

在量化過程中,將每個高維向量分割成的子向量(用於量化)數量。

類型:整數範圍:[1, 65536]

預設值:無

較高的m 值可以提高精確度,但也會增加計算複雜度和記憶體使用量。m 必須是向量維度(D) 的除數,以確保正確的分解。一般建議的值是m = D/2

在大多數情況下,我們建議您在這個範圍內設定一個值:[D/8, D]。

nbits

用來以壓縮形式表示每個子向量中心點索引的位元數。每個編碼本將包含2位元的中心點。例如,如果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

搜尋候選人的叢集數。

類型: 整數整數範圍:[1、nlist]

預設值8

較高的值允許搜尋更多的叢集,藉由擴大搜尋範圍來改善召回率,但代價是增加查詢延遲。請將nprobenlist 成比例設定,以平衡速度與精確度。

在大多數情況下,我們建議您設定此範圍內的值:[1, nlist]。

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?