GPU_CAGRA

El índice GPU_CAGRA es un índice basado en grafos optimizado para GPU. Utilizar GPU de inferencia para ejecutar la versión para GPU de Milvus puede resultar más rentable que utilizar costosas GPU de entrenamiento.

Crear índice

Para crear un índice « GPU_CAGRA » en un campo vectorial en Milvus, utiliza el método « add_index() », especificando « index_type », « metric_type » y los 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 que se va a crear. En este ejemplo, establezca el valor en « GPU_CAGRA ».

  • metric_type: El método utilizado para calcular la distancia entre vectores. Para obtener más detalles, consulta Tipos de métricas.

  • params: Opciones de configuración adicionales para la creación del índice. Para obtener más información sobre los parámetros de creación disponibles para el índice « GPU_CAGRA », consulte «Parámetros de creación de índices».

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 obtener más información, 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:

  • params: Opciones de configuración adicionales para la búsqueda en el índice. Para obtener más información sobre los parámetros de búsqueda disponibles para el índice « GPU_CAGRA », consulta «Parámetros de búsqueda específicos del índice».

Habilitar la búsqueda por CPU en el momento de la cargaCompatible with Milvus 2.6.4+

Para habilitar la búsqueda por CPU de forma dinámica en el momento de la carga, edita la siguiente configuración en milvus.yaml:

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

Comportamiento

  • Cuando « load.adapt_for_cpu » está configurado en « true », Milvus convierte el índice GPU_CAGRA a un formato ejecutable en CPU (similar a HNSW) durante la carga.

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

  • Si se omite o se establece en «false», el índice permanece en la GPU y las búsquedas se ejecutan en la GPU.

Utiliza la adaptación a la CPU en tiempo de carga en entornos híbridos o sensibles al coste, 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 ofrece una visió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 se pueden configurar en params al crear un índice.

Parámetro

Descripción

Valor por defecto

intermediate_graph_degree

Influye en la recuperación y en el tiempo de creación al determinar el grado del grafo 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 al establecer el grado del grafo tras la poda. Una mayor diferencia entre estos dos grados da lugar a un tiempo de creación más largo. Su valor debe ser menor que el valor 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 un tiempo de construcción más lento.

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

IVF_PQ

cache_dataset_on_device

Decide si se almacena 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 mediante el refinamiento de los resultados de búsqueda.

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

"false"

adapt_for_cpu

Determina 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" », es necesario que el parámetro « ef » esté presente en las solicitudes de búsqueda.

"false"

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

La siguiente tabla enumera los parámetros que se pueden configurar en search_params.params al realizar búsquedas en el índice.

Parámetro

Descripción

Valor por defecto

itopk_size

Determina el tamaño de los resultados intermedios que se conservan durante la búsqueda. Un valor mayor puede mejorar la recuperación a costa del rendimiento de la búsqueda. Debe ser, como mínimo, igual al valor final de «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 grafo CAGRA durante la búsqueda. Aumentar este valor puede mejorar la recuperación, pero puede afectar al rendimiento de la búsqueda (p. ej., 1, 2, 4, 8, 16, 32).

Vacío

num_random_samplings

Controla la cantidad de muestreo aleatorio que realiza CAGRA al elegir los puntos de entrada iniciales para la búsqueda en el grafo. Un valor mayor ofrece a CAGRA más oportunidades de comenzar desde mejores puntos, lo que mejora la recuperación a costa de una mayor latencia de búsqueda. El valor debe ser, como mínimo, 1. Disponible en Milvus 2.6.20 y versiones posteriores.

1

min_iterations / max_iterations

Controla el proceso de iteración de la búsqueda. Por defecto, están configurados 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 potencias 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 el team_size en función de la dimensión del vector.

0

ef

Especifica el equilibrio entre el tiempo de consulta y la precisión. Un valor más alto de « ef » da lugar a una búsqueda más precisa, pero más lenta.

Este parámetro es obligatorio si se establece adapt_for_cpu en true al crear el índice.

[top_k, int_max]

Traducido porDeepL

Prueba Milvus gestionado gratis

Zilliz Cloud no da problemas, funciona con Milvus y es 10 veces más rápido.

Empezar
Feedback

¿Fue útil esta página?