Los parámetros recomendados para el índiceScaNN
diferirán según si eliges compilar un índice de árbol de dos niveles o de tres niveles. En esta página, se proporcionan recomendaciones para ajustar los parámetros de índice y lograr un equilibrio óptimo entre la recuperación y la QPS.
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:
- Para crear el índice
ScaNN
optimizado para los siguientes casos, establece el parámetronum_leaves
en el siguiente valor, donde filas es la cantidad de filas en la tabla indexada:- Para equilibrar el tiempo de compilación y la calidad del índice, establece
num_leaves
ensqrt(rows)
. - quality establece num_leaves en filas/100.
- Para equilibrar el tiempo de compilación y la calidad del índice, establece
- 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 consultas, consulta Cómo analizar tus consultas. - Toma nota de la proporción entre
scann.num_leaves_to_search
ynum_leaves
que se usará en los pasos posteriores. Esta proporción proporciona una aproximación alrededor del conjunto de datos que te ayudará a lograr 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 descann.pre_reordering_num_neighbors
. El valor predeterminado se establece en500 * K
, dondeK
es el límite que estableces en tu consulta. - Si tu QPS es demasiado baja después de que tus consultas alcancen una recuperación objetivo, sigue estos pasos:
- Vuelve a crear el índice y aumenta el valor de
num_leaves
yscann.num_leaves_to_search
según las siguientes instrucciones:- Establece
num_leaves
en un factor mayor de la raíz cuadrada de tu recuento de filas. Por ejemplo, si el índice tienenum_leaves
establecido en la raíz cuadrada de tu recuento de filas, intenta configurarlo para que duplique la raíz cuadrada. Si el valor ya es el doble, intenta configurarlo para que triplique la raíz cuadrada. - Aumenta
scann.num_leaves_to_search
según sea necesario para mantener su proporción connum_leaves
, que anotaste en el paso 3. - Establece
num_leaves
en un valor menor o igual que el recuento de filas dividido por 100.
- Establece
- 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 alta la recuperación. Prueba diferentes valores descann.num_leaves_to_search
sin volver a compilar el índice.
- Vuelve a crear el índice y aumenta el valor de
- Repite el paso 4 hasta que el QPS y el rango de recuperación alcancen valores aceptables.
Índice de árbol de tres niveles
Además de las recomendaciones para el índice ScaNN
de árbol 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:
Crea el índice
ScaNN
con las siguientes combinaciones denum_leaves
ymax_num_levels
según tus objetivos de rendimiento:- balance index build time & quality: Establece
max_num_levels
como2
ynum_leaves
comopower(rows, ⅔)
. - Optimizar la calidad: Establece
max_num_levels
como2
ynum_leaves
comorows/100
.
- balance index build time & quality: Establece
Ejecuta tus consultas de prueba. Para obtener más información sobre el análisis de consultas, consulta Cómo analizar tus consultas.
Toma nota de la proporción entre
scann.num_leaves_to_search
ynum_leaves
que se usará en los pasos posteriores. Esta proporción proporciona una aproximación 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 500 * K
, donde K
es el límite que estableces en tu consulta.
Si tu QPS es demasiado baja después de que tus consultas alcanzan una recuperación objetivo, sigue estos pasos:
- Vuelve a crear el índice y aumenta el valor de
num_leaves
yscann.num_leaves_to_search
según las siguientes instrucciones: - Establece
num_leaves
en un factor mayor depower(rows, ⅔)
. Por ejemplo, si el índice tienenum_leaves
establecido enpower(rows, ⅔)
, intenta configurarlo para que dupliquepower(rows, ⅔)
. Si el valor ya es el doble, intenta configurarlo para que tripliquepower(rows, ⅔)
. - Aumenta
scann.num_leaves_to_search
según sea necesario para mantener su proporción connum_leaves
, que anotaste en el paso 3. - Establece
num_leaves
en un valor menor o igual querows/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 alta la recuperación. Prueba diferentes valores descann.num_leaves_to_search
sin volver a compilar el índice.
- Vuelve a crear el índice y aumenta el valor de
Repite el paso 4 hasta que el QPS y 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 o mutaciones de vectores desde que se creó el índice y, luego, volver a indexar según corresponda. Para obtener más información sobre las métricas, consulta Cómo ver las métricas del índice vectorial.