Prácticas recomendadas para ajustar los índices de ScaNN

Selecciona una versión de la documentación:

En esta página, se proporcionan recomendaciones para ajustar los parámetros del índice de AlloyDB Omni y lograr un equilibrio óptimo entre la recuperación y las QPS. Los parámetros recomendados para el índice de Scalable Nearest Neighbor (ScaNN) difieren según si eliges compilar un índice de árbol de dos o tres niveles.

Creación del índice de ScaNN

Para obtener más información, consulta la referencia del índice de ScaNN.

Índice de árbol de dos niveles

Para aplicar recomendaciones que te ayuden a encontrar los valores óptimos de num_leaves y num_leaves_to_search para tu conjunto de datos, sigue estos pasos recomendados:

  1. Para crear el índice ScaNN optimizado para los siguientes casos, establece el parámetro num_leaves en el siguiente valor, donde rows es la cantidad de filas de la tabla indexada:
    • Tiempo y calidad de compilación del índice equilibrados: Establece num_leaves en sqrt(rows).
    • calidad establece num_leaves en filas/100.
  2. Ejecuta tus consultas de prueba y aumenta el valor de scann.num_of_leaves_to_search hasta que alcances el rango de recuperación objetivo, por ejemplo, el 95%. Para obtener más información sobre el análisis de tus búsquedas, consulta Analiza tus búsquedas.
  3. Toma nota de la proporción entre scann.num_leaves_to_search y num_leaves que se usará en los pasos posteriores. Esta proporción proporciona una aproximación en torno al conjunto de datos que te ayudará a alcanzar la recuperación objetivo.

    Si trabajas con vectores de alta dimensión (500 dimensiones o más) y deseas mejorar la recuperación, intenta ajustar el valor de scann.pre_reordering_num_neighbors. El valor predeterminado se establece en el valor 500 * K, donde K es el límite que estableces en tu búsqueda.
  4. Si tu QPS es demasiado bajo después de que tus búsquedas alcanzan un nivel de recuperación objetivo, sigue estos pasos:
    1. Vuelve a crear el índice y aumenta los valores de num_leaves y scann.num_leaves_to_search según las siguientes instrucciones:
      • Establece num_leaves en un factor mayor de la raíz cuadrada del recuento de filas. Por ejemplo, si el índice tiene num_leaves establecido en la raíz cuadrada del recuento de filas, intenta establecerlo en el doble de la raíz cuadrada. Si el valor ya es doble, intenta establecerlo en el triple de la raíz cuadrada.
      • Aumenta scann.num_leaves_to_search según sea necesario para mantener su proporción con num_leaves, que anotaste en el paso 3.
      • Establece num_leaves en un valor menor o igual que el recuento de filas dividido por 100.
    2. Vuelve a ejecutar las consultas de prueba. Mientras ejecutas las consultas de prueba, experimenta con la reducción de scann.num_leaves_to_search y busca un valor que aumente las QPS y mantenga una recuperación alta. Prueba diferentes valores de scann.num_leaves_to_search sin volver a compilar el índice.
  5. Repite el paso 4 hasta que tanto el QPS como el rango de recuperación alcancen valores aceptables.

Índice de árbol de tres niveles

Además de las recomendaciones para el índice de árbol ScaNN de dos niveles, usa la siguiente guía.

Para aplicar recomendaciones y encontrar el valor óptimo de los parámetros de índice num_leaves y max_num_levels, sigue estos pasos:

  1. Crea el índice ScaNN con las siguientes combinaciones de num_leaves y max_num_levels según tus objetivos de rendimiento:

    • balance index build time & quality: Establece max_num_levels como 2 y num_leaves como power(rows, ⅔).
    • Optimizar la calidad: Establece max_num_levels como 2 y num_leaves como rows/100.
  2. Ejecuta tus consultas de prueba. Para obtener más información sobre el análisis de consultas, consulta Analiza tus búsquedas.

  3. Toma nota de la proporción entre scann.num_leaves_to_search y num_leaves que se usará en los pasos posteriores. Esta proporción proporciona una aproximación en torno al conjunto de datos que te ayudará a alcanzar la recuperación objetivo.

Si trabajas con vectores de alta dimensión (500 dimensiones o más) y deseas mejorar la recuperación, intenta ajustar el valor de scann.pre_reordering_num_neighbors. El valor predeterminado se establece en el valor 500 * K, donde K es el límite que estableces en tu búsqueda.

  1. Si tu QPS es demasiado bajo después de que tus búsquedas alcancen un nivel de recuperación objetivo, sigue estos pasos:

    • Vuelve a crear el índice y aumenta los valores de num_leaves y scann.num_leaves_to_search según las siguientes instrucciones:
    • Establece num_leaves en un factor mayor de power(rows, ⅔). Por ejemplo, si el índice tiene num_leaves establecido en power(rows, ⅔), intenta establecerlo en el doble de power(rows, ⅔). Si el valor ya es doble, intenta establecerlo en el triple de power(rows, ⅔).
    • Aumenta scann.num_leaves_to_search según sea necesario para mantener su proporción con num_leaves, que anotaste en el paso 3.
    • Establece num_leaves en un valor menor o igual que rows/100.
    • Vuelve a ejecutar las consultas de prueba. Mientras ejecutas las consultas de prueba, experimenta con la reducción de scann.num_leaves_to_search y busca un valor que aumente las QPS y mantenga una recuperación alta. Prueba diferentes valores de scann.num_leaves_to_search sin volver a compilar el índice.
  2. Repite el paso 4 hasta que tanto el QPS como el rango de recuperación alcancen valores aceptables.

Mantenimiento de índices

Si tu tabla es propensa a actualizaciones o inserciones frecuentes, te recomendamos que vuelvas a indexar periódicamente el índice ScaNN existente para mejorar la precisión de la recuperación. Puedes supervisar las métricas del índice para ver los cambios en las distribuciones de vectores o las mutaciones de vectores desde que se compiló el índice y, luego, volver a indexar según corresponda. Para obtener más información sobre las métricas, consulta Métricas de índices vectoriales.

¿Qué sigue?