milvus-logo
LFAI
Home
  • Conceptos

Índice GPU

Milvus admite varios tipos de índice de GPU para acelerar el rendimiento y la eficiencia de la búsqueda, especialmente en escenarios de alto rendimiento y alta recuperación. Este tema proporciona una visión general de los tipos de índice GPU soportados por Milvus, sus casos de uso adecuados y sus características de rendimiento. Para obtener información sobre la creación de índices con GPU, consulte Índice con GPU.

Es importante tener en cuenta que el uso de un índice GPU no necesariamente reduce la latencia en comparación con el uso de un índice CPU. Si quieres maximizar al máximo el rendimiento, necesitarás una presión de petición extremadamente alta o un gran número de vectores de consulta.

performance rendimiento

La compatibilidad de Milvus con la GPU la aporta el equipo Nvidia RAPIDS. Los siguientes son los tipos de índice GPU actualmente soportados por Milvus.

GPU_CAGRA

GPU_CAGRA es un índice basado en grafos optimizado para GPUs. 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 costosas GPUs de grado entrenamiento.

  • Parámetros de construcción del índice

    ParámetroDescripciónValor predeterminado
    intermediate_graph_degreeAfecta 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_degreeAfecta 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 valor de intermediate_graph_degree.64
    build_algoSelecciona 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 Ofrece una construcción más rápida con una recuperación potencialmente menor.
    IVF_PQ
    cache_dataset_on_deviceDecide 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_cpuDecide si se utiliza la GPU para la creación de índices y la CPU para la búsqueda.
    La configuración de este parámetro en true requiere la presencia del parámetro ef en las solicitudes de búsqueda.
    “false”
  • Parámetros de búsqueda

    ParámetroDescripciónValor por defecto
    itopk_sizeDetermina 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_widthEspecifica 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_iterationsControla 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_sizeEspecifica 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
    efEspecifica 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 se establece adapt_for_cpu en true al crear el índice.
    [top_k, int_max]
  • Límites de búsqueda

    ParámetroRango
    limit (top-K)<= 1024
    limit (top-K)<=max((itopk_size + 31)// 32, search_width) * 32

GPU_IVF_FLAT

De forma similar a IVF_FLAT, GPU_IVF_FLAT también divide los datos vectoriales en unidades de clúster nlist y, a continuación, compara las distancias entre el vector de entrada objetivo y el centro de cada clúster. Dependiendo del número de clusters que el sistema consulte (nprobe), los resultados de la búsqueda de similitud se basan en comparaciones entre el vector de entrada objetivo y los vectores del cluster o clusters más similares, lo que reduce drásticamente el tiempo de consulta.

Ajustando nprobe, se puede encontrar un equilibrio ideal entre precisión y velocidad para un escenario determinado. Los resultados de la prueba de rendimiento de IVF_FLAT demuestran que el tiempo de consulta aumenta bruscamente a medida que aumentan tanto el número de vectores de entrada objetivo (nq), como el número de clusters a buscar (nprobe).

GPU_IVF_FLAT es el índice IVF más básico, y los datos codificados almacenados en cada unidad son coherentes con los datos originales.

Al realizar búsquedas, tenga en cuenta que puede establecer el top-K hasta 256 para cualquier búsqueda contra una colección indexada en GPU_IVF_FLAT.

  • Parámetros de creación de índices

    ParámetroDescripciónRangoValor predeterminado
    nlistNúmero de unidades de clúster[1, 65536]128
    cache_dataset_on_deviceDecide 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 refinando los resultados de búsqueda.
    “false” No almacena en caché el conjunto de datos original para ahorrar memoria de la GPU.
    "true" "flase""false"
  • Parámetros de búsqueda

    • Búsqueda común

      ParámetroDescripciónRangoValor por defecto
      nprobeNúmero de unidades a consultar[1, nlist]8
  • Límites de la búsqueda

    ParámetroRango
    limit (top-K)<= 2048

GPU_IVF_PQ

PQ (Cuantización de producto) descompone uniformemente el espacio vectorial original de alta dimensión en productos cartesianos de m espacios vectoriales de baja dimensión y, a continuación, cuantiza los espacios vectoriales de baja dimensión descompuestos. En lugar de calcular las distancias entre el vector objetivo y el centro de todas las unidades, la cuantización de productos permite calcular las distancias entre el vector objetivo y el centro de agrupación de cada espacio de baja dimensión y reduce en gran medida la complejidad temporal y espacial del algoritmo.

IVF_PQ realiza la agrupación de índices IVF antes de cuantificar el producto de vectores. Su archivo de índices es incluso más pequeño que IVF_SQ8, pero también provoca una pérdida de precisión durante la búsqueda de vectores.

Los parámetros de construcción del índice y los parámetros de búsqueda varían según la distribución Milvus. Seleccione primero su distribución Milvus.

Cuando realice búsquedas, tenga en cuenta que puede establecer el top-K hasta 8192 para cualquier búsqueda contra una colección indexada GPU_IVF_FLAT.

  • Parámetros de creación de índices

    ParámetroDescripciónRangoValor predeterminado
    nlistNúmero de unidades de clúster[1, 65536]128
    mNúmero de factores de cuantificación del producto,dim mod m or = 00
    nbits[Opcional] Número de bits en los que se almacena cada vector de baja dimensión.[1, 16]8
    cache_dataset_on_deviceDecide 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 refinando los resultados de búsqueda.
    “false” No almacena en caché el conjunto de datos original para ahorrar memoria de la GPU.
    "true" "false""false"
  • Parámetros de búsqueda

    • Búsqueda común

      ParámetroDescripciónRangoValor por defecto
      nprobeNúmero de unidades a consultar[1, nlist]8
  • Límites de la búsqueda

    ParámetroRango
    limit (top-K)<= 1024

GPU_BRUTE_FORCE

GPU_BRUTE_FORCE está diseñado para casos en los que es crucial una recuperación extremadamente alta, garantizando una recuperación de 1 al comparar cada consulta con todos los vectores del conjunto de datos. Sólo requiere el tipo de métrica (metric_type) y top-k (limit) como parámetros de creación y búsqueda de índices.

Para GPU_BRUTE_FORCE, no se requieren parámetros adicionales de creación de índices ni de búsqueda.

Conclusión

Actualmente, Milvus carga todos los índices en la memoria de la GPU para realizar operaciones de búsqueda eficientes. La cantidad de datos que pueden cargarse depende del tamaño de la memoria de la GPU:

  • GPU_CAGRA: el uso de memoria es aproximadamente 1,8 veces el de los datos vectoriales originales.
  • GPU_IVF_FLAT y GPU_BRUTE_FORCE: Requiere una memoria igual al tamaño de los datos originales.
  • GPU_IVF_PQ: Utiliza un espacio de memoria menor, que depende de la configuración de los parámetros de compresión.

Traducido porDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

¿Fue útil esta página?