GPU_CAGRA

El índice GPU_CAGRA es un índice basado en grafos optimizado para GPU. El uso de GPUs de grado inferencia para ejecutar la versión Milvus GPU puede ser más rentable en comparación con el uso de GPUs caras de grado entrenamiento.

Construir el índice

Para construir un índice GPU_CAGRA sobre un campo vectorial en Milvus, utilice el método add_index(), especificando el index_type, metric_type, y parámetros 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_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
)

En esta configuración:

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

  • metric_type: El método utilizado para calcular la distancia entre vectores. Para más detalles, consulte Tipos métricos.

  • params: Opciones de configuración adicionales para construir el índice. Para conocer más parámetros de construcción disponibles para el índice GPU_CAGRA, 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 en el 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": {
        "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
)

En esta configuración:

Habilitar la búsqueda de CPU en tiempo de cargaCompatible with Milvus 2.6.4+

Para habilitar la búsqueda de CPU dinámicamente en tiempo de carga, edite la siguiente configuración en milvus.yaml:

# milvus.yaml
knowhere:
  GPU_CAGRA:
    load: 
      adapt_for_cpu: true

Comportamiento

  • Cuando load.adapt_for_cpu se establece en true, Milvus convierte el índice GPU_CAGRA en un formato ejecutable por la CPU (tipo HNSW) durante la carga.

  • Las operaciones de búsqueda posteriores se ejecutan en la CPU, incluso si el índice se construyó originalmente para la GPU.

  • Si se omite o es falso, el índice permanece en la GPU y las búsquedas se ejecutan en la GPU.

Utilice la adaptación a la CPU durante la carga en entornos híbridos o sensibles a los costes en los que los recursos de la GPU se reservan para la creación de índices pero las búsquedas se ejecutan en la CPU.

Parámetros del índice

Esta sección proporciona una visión general de los parámetros utilizados para construir 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 cuando se construye un índice.

Parámetro

Descripción

Valor predeterminado

intermediate_graph_degree

Afecta a la recuperación y al tiempo de construcción al determinar el grado del gráfico antes de la poda. Los valores recomendados son 32 o 64.

128

graph_degree

Afecta al rendimiento de la búsqueda y a la recuperación estableciendo el grado del gráfico después de la poda. Una mayor diferencia entre estos dos grados se traduce en un mayor tiempo de construcción. Su valor debe ser menor que el de intermediate_graph_degree.

64

build_algo

Selecciona el algoritmo de generación del grafo antes de la poda. Valores posibles:

  • IVF_PQ: Ofrece mayor calidad pero menor tiempo de construcción.

  • NN_DESCENT: Proporciona una construcción más rápida con una recuperación potencialmente menor.

IVF_PQ

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 la búsqueda.

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

"false"

adapt_for_cpu

Decide si se utiliza la GPU para la creación de índices y la CPU para la búsqueda.

Si se establece este parámetro en "true", se requiere la presencia del parámetro ef en las solicitudes de búsqueda.

"false"

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

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

Parámetro

Descripción

Valor por defecto

itopk_size

Determina el tamaño de los resultados intermedios conservados durante la búsqueda. Un valor mayor puede mejorar la recuperación a expensas del rendimiento de la búsqueda. Debe ser al menos igual al valor final top-k (límite) y suele ser una potencia de 2 (por ejemplo, 16, 32, 64, 128).

Vacío

search_width

Especifica el número de puntos de entrada en el gráfico CAGRA durante la búsqueda. Aumentar este valor puede mejorar la recuperación, pero puede afectar al rendimiento de la búsqueda (por ejemplo, 1, 2, 4, 8, 16, 32).

Vacío

min_iterations / max_iterations

Controla el proceso de iteración de la búsqueda. Por defecto, se establecen en 0, y CAGRA determina automáticamente el número de iteraciones basándose en itopk_size y search_width. Ajustar estos valores manualmente puede ayudar a equilibrar el rendimiento y la precisión.

0

team_size

Especifica el número de subprocesos CUDA utilizados para calcular la distancia métrica en la GPU. Los valores habituales son una potencia de 2 hasta 32 (por ejemplo, 2, 4, 8, 16, 32). Tiene un impacto menor en el rendimiento de la búsqueda. El valor por defecto es 0, donde Milvus selecciona automáticamente team_size basándose en la dimensión del vector.

0

ef

Especifica el compromiso entre tiempo de búsqueda y precisión. Un valor más alto de ef conduce a una búsqueda más precisa pero más lenta.

Este parámetro es obligatorio si establece adapt_for_cpu en true cuando construye el índice.

[top_k, int_max]