Creación de índices de ScaNN
Para obtener más información, consulta la referencia del índice de ScaNN.
Índice de árbol de dos niveles
Para aplicar las recomendaciones que le ayudarán a encontrar los valores óptimos de num_leaves
y num_leaves_to_search
para su conjunto de datos, siga estos pasos:
- Para crear el índice
ScaNN
optimizado para los siguientes casos, asigna al parámetronum_leaves
el siguiente valor, donde "rows" es el número de filas de la tabla indexada:- Tiempo de compilación y calidad del índice equilibrados: asigna el valor
num_leaves
asqrt(rows)
. - quality asigna a num_leaves el valor rows/100.
- Tiempo de compilación y calidad del índice equilibrados: asigna el valor
- Ejecuta tus consultas de prueba y aumenta el valor de
scann.num_of_leaves_to_search
hasta que alcances el intervalo de recuerdo objetivo (por ejemplo, el 95 %). Para obtener más información sobre cómo analizar tus consultas, consulta el artículo Analizar tus consultas. - Anota la proporción entre
scann.num_leaves_to_search
ynum_leaves
, que se usará en los pasos siguientes. Esta proporción proporciona una aproximación del conjunto de datos que te ayudará a alcanzar el recuerdo objetivo.
Si trabajas con vectores de alta dimensión (500 dimensiones o más) y quieres mejorar el recuerdo, prueba a ajustar el valor descann.pre_reordering_num_neighbors
. El valor predeterminado es500 * K
, dondeK
es el límite que has definido en la consulta. - Si tu QPS es demasiado bajo después de que tus consultas alcancen un recuerdo objetivo, sigue estos pasos:
- Vuelve a crear el índice y aumenta los valores de
num_leaves
yscann.num_leaves_to_search
según las siguientes directrices:- Asigna a
num_leaves
un factor mayor de la raíz cuadrada del número de filas. Por ejemplo, si el índice tienenum_leaves
definido como la raíz cuadrada del número de filas, prueba a duplicar la raíz cuadrada. Si el valor ya es doble, prueba a asignarle el triple de la raíz cuadrada. - Aumenta
scann.num_leaves_to_search
según sea necesario para mantener su proporción connum_leaves
, que has indicado en el paso 3. - Asigna a
num_leaves
un valor igual o inferior al número de filas dividido entre 100.
- Asigna a
- Vuelve a ejecutar las consultas de prueba.
Mientras ejecutas las consultas de prueba, experimenta con la reducción de
scann.num_leaves_to_search
para encontrar un valor que aumente las CPS y mantenga un valor de recuperación alto. Prueba con diferentes valores descann.num_leaves_to_search
sin volver a compilar el índice.
- Vuelve a crear el índice y aumenta los valores de
- Repite el paso 4 hasta que tanto las consultas por segundo como el intervalo de retención alcancen valores aceptables.
Índice de árbol de tres niveles
Además de las recomendaciones para el índice de árbol de dos niveles ScaNN
, sigue estas directrices.
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
en función de tus objetivos de rendimiento:- Tiempo de compilación y calidad del índice de equilibrio: define
max_num_levels
como2
ynum_leaves
comopower(rows, ⅔)
. - Optimizar para conseguir calidad: defina
max_num_levels
como2
ynum_leaves
comorows/100
.
- Tiempo de compilación y calidad del índice de equilibrio: define
Ejecuta tus consultas de prueba. Para obtener más información sobre cómo analizar las consultas, consulta el artículo Analizar las consultas.
Anota la proporción entre
scann.num_leaves_to_search
ynum_leaves
que se usará en los pasos siguientes. Esta proporción proporciona una aproximación del conjunto de datos que le ayudará a alcanzar su objetivo de recuerdo.
Si trabajas con vectores de alta dimensión (500 dimensiones o más) y quieres mejorar la recuperación, prueba a ajustar el valor de scann.pre_reordering_num_neighbors
. El valor predeterminado es 500 * K
, donde K
es el límite que has definido en la consulta.
Si tu QPS es demasiado bajo después de que tus consultas alcancen un recall objetivo, sigue estos pasos:
- Vuelve a crear el índice, aumentando los valores de
num_leaves
yscann.num_leaves_to_search
según las siguientes directrices: - Asigna a
num_leaves
un factor mayor depower(rows, ⅔)
. Por ejemplo, si el índice tienenum_leaves
definido enpower(rows, ⅔)
, prueba a duplicarpower(rows, ⅔)
. Si el valor ya es el doble, prueba a fijarlo en el triple depower(rows, ⅔)
. - Aumenta
scann.num_leaves_to_search
según sea necesario para mantener su proporción connum_leaves
, que has indicado en el paso 3. - Asigna a
num_leaves
un valor igual o inferior arows/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
para encontrar un valor que aumente las CPS y mantenga un valor de recuperación alto. Prueba con distintos valores descann.num_leaves_to_search
sin volver a compilar el índice.
- Vuelve a crear el índice, aumentando los valores de
Repite el paso 4 hasta que tanto las consultas por segundo como el intervalo de retención alcancen valores aceptables.
Mantenimiento de índices
Si su tabla se actualiza o se insertan datos con frecuencia, le recomendamos que vuelva a indexar periódicamente el índice ScaNN
para mejorar la precisión de la recuperación.
Puedes monitorizar las métricas de índice para ver los cambios en las distribuciones de vectores o las mutaciones de vectores desde que se creó el índice y, a continuación, volver a indexar según corresponda. Para obtener más información sobre las métricas, consulta Métricas de índice de Vector.