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 |
|---|---|---|
|
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 |
|
|
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 |
|
|
Selecciona el algoritmo de generación del grafo antes de la poda. Valores posibles:
|
|
|
Decide si se almacena en caché el conjunto de datos original en la memoria de la GPU. Valores posibles:
|
|
|
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 « |
|
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 |
|---|---|---|
|
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 |
|
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 |
|
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, |
|
|
Controla el proceso de iteración de la búsqueda. Por defecto, están configurados en |
|
|
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 |
|
|
Especifica el equilibrio entre el tiempo de consulta y la precisión. Un valor más alto de « Este parámetro es obligatorio si se establece |
|