GPU_IVF_PQ

El índice GPU_IVF_PQ se basa en el concepto IVF_PQ combinando la agrupación de archivos invertida con la cuantificación de productos (PQ), que descompone los vectores de alta dimensión en subespacios más pequeños y los cuantiza para realizar búsquedas de similitud eficientes. Diseñado exclusivamente para entornos de GPU, GPU_IVF_PQ aprovecha el procesamiento paralelo para acelerar los cálculos y manejar con eficacia datos vectoriales a gran escala. Para obtener más información sobre los conceptos básicos, consulte IVF_PQ.

Crear un índice

Para construir un índice GPU_IVF_PQ en un campo vectorial en Milvus, utilice el método add_index(), especificando los parámetros index_type, metric_type, y adicionales para el índice.

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
)

En esta configuración:

  • index_type: El tipo de índice a construir. En este ejemplo, establezca el valor GPU_IVF_PQ.

  • metric_type: El método utilizado para calcular la distancia entre vectores. Los valores soportados incluyen COSINE, L2, y IP. Para más detalles, consulte Tipos de métricas.

  • params: Opciones de configuración adicionales para construir el índice.

    • m: Número de subvectores en los que se divide el vector.

    Para conocer más parámetros de construcción disponibles para el índice GPU_IVF_PQ, consulte Parámetros de construcción del índice.

Una vez configurados los parámetros del índice, puede crear el índice utilizando directamente el método create_index() o pasando los parámetros del índice al método create_collection. Para más detalles, consulte Crear colección.

Búsqueda en el índice

Una vez creado el índice e insertadas las entidades, puede realizar búsquedas de similitud en el índice.

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
)

En esta configuración:

  • params: Opciones de configuración adicionales para la búsqueda en el índice.

    • nprobe: Número de clusters a buscar.

    Para conocer más parámetros de búsqueda disponibles para el índice GPU_IVF_PQ, consulte Parámetros de búsqueda específicos del índice.

Parámetros del índice

En esta sección se ofrece una descripción general de los parámetros utilizados para crear un índice y realizar búsquedas en él.

Parámetros de creación de índices

La siguiente tabla enumera los parámetros que pueden configurarse en params al crear un índice.

Parámetro

Descripción

Rango de valores

Sugerencia de ajuste

IVF

nlist

El número de clusters a crear usando el algoritmo k-means durante la construcción del índice.

Tipo: Entero Rango: [1, 65536]

Valor por defecto: 128

Los valores mayores de nlist mejoran la recuperación al crear clusters más refinados, pero aumentan el tiempo de creación del índice. Optimice en función del tamaño del conjunto de datos y de los recursos disponibles. En la mayoría de los casos, se recomienda establecer un valor dentro de este intervalo: [32, 4096].

PQ

m

Número de subvectores (utilizados para la cuantificación) en los que se dividirá cada vector de alta dimensión durante el proceso de cuantificación.

Tipo: Entero Rango: [1, 65536]

Valor por defecto: Ninguno

Un valor más alto de m puede mejorar la precisión, pero también aumenta la complejidad computacional y el uso de memoria. m debe ser un divisor de la dimensión del vector(D) para garantizar una descomposición adecuada. Un valor comúnmente recomendado es m = D/2.

En la mayoría de los casos, se recomienda establecer un valor dentro de este rango: [D/8, D].

nbits

El número de bits utilizados para representar el índice del centroide de cada subvector en la forma comprimida. Determina directamente el tamaño de cada libro de códigos. Cada libro de códigos contendrá centroides de 2nbits. Por ejemplo, si nbits se establece en 8, cada subvector estará representado por un índice centroide de 8 bits. Esto permite28 (256) centroides posibles en el libro de códigos para ese subvector.

Tipo: Entero Rango: [1, 24]

Valor por defecto: 8

Un valor más alto de nbits permite libros de códigos más grandes, lo que potencialmente conduce a representaciones más precisas de los vectores originales. Sin embargo, también implica el uso de más bits para almacenar cada índice, lo que se traduce en una menor compresión. En la mayoría de los casos, se recomienda establecer un valor dentro de este rango: [1, 16].

cache_dataset_on_device

Decide si almacenar en caché el conjunto de datos original en la memoria de la GPU. Valores posibles:

  • "true": Almacena en caché el conjunto de datos original para mejorar la recuperación refinando los resultados de búsqueda.

  • "false": No almacena en caché el conjunto de datos original para ahorrar memoria de la GPU.

Tipo: Cadena Rango: ["true", "false"]

Valor por defecto: "false"

Si se establece en "true", se mejora la recuperación al refinar los resultados de búsqueda, pero se utiliza más memoria de GPU. Si se establece en "false", se conserva la memoria de la GPU.

Parámetros de búsqueda específicos del índice

En la siguiente tabla se enumeran los parámetros que pueden configurarse en search_params.params cuando se realizan búsquedas en el índice.

Parámetro

Descripción

Rango de valores

Sugerencia de ajuste

IVF

nprobe

El número de clusters para buscar candidatos.

Tipo: Entero Rango: [1, nlist]

Valor por defecto: 8

Los valores más altos permiten buscar en más conglomerados, lo que mejora la recuperación al ampliar el alcance de la búsqueda, pero a costa de aumentar la latencia de la consulta. Establezca nprobe proporcionalmente a nlist para equilibrar la velocidad y la precisión.

En la mayoría de los casos, se recomienda establecer un valor dentro de este rango: [1, nlist].

Try Managed Milvus for Free

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

Get Started
Feedback

¿Fue útil esta página?