Índice en disco
Este artículo presenta un algoritmo de indexación en disco llamado DiskANN. Basado en gráficos Vamana, DiskANN permite realizar búsquedas eficaces en grandes conjuntos de datos.
Para mejorar el rendimiento de las consultas, puede especificar un tipo de índice para cada campo vectorial.
Requisitos previos
Para utilizar DiskANN, tenga en cuenta que
- DiskANN está desactivado por defecto. Si prefiere el índice en memoria al índice en disco, se recomienda desactivar esta función para obtener un mejor rendimiento.
- Para desactivarla, puede cambiar
queryNode.enableDisk
afalse
en su archivo de configuración de milvus. - Para habilitarla de nuevo, puede cambiar
queryNode.enableDisk
portrue
.
- Para desactivarla, puede cambiar
- La instancia de Milvus funciona en Ubuntu 18.04.6 o una versión posterior.
- La ruta de datos de Milvus debería montarse en un SSD NVMe para un rendimiento completo:
- Para una instancia Milvus Standalone, la ruta de datos debe ser /var/lib/milvus/data en el contenedor donde se ejecuta la instancia.
- Para una instancia Milvus Cluster, la ruta de datos debe ser /var/lib/milvus/data en los contenedores donde se ejecutan los QueryNodes y los IndexNodes.
Límites
Para utilizar DiskANN, asegúrese de que
- Utilice sólo vectores flotantes con al menos 1 dimensión en sus datos.
- Utilice únicamente la distancia euclidiana (L2), el producto interior (IP) o COSINE para medir la distancia entre vectores.
Parámetros de índice y búsqueda
Parámetros de creación de índices
Al crear un índice DiskANN, utilice
DISKANN
como tipo de índice. No son necesarios parámetros de índice.Parámetros de búsqueda
Parámetro Descripción Rango Valor por defecto search_list
Tamaño de la lista de candidatos, un tamaño mayor ofrece una mayor tasa de recuperación con un rendimiento degradado. [topk, int32_max] 16
Configuraciones de Milvus relacionadas con DiskANN
DiskANN es ajustable. Puede modificar los parámetros relacionados con DiskANN en ${MILVUS_ROOT_PATH}/configs/milvus.yaml
para mejorar su rendimiento.
...
DiskIndex:
MaxDegree: 56
SearchListSize: 100
PQCodeBugetGBRatio: 0.125
SearchCacheBudgetGBRatio: 0.125
BeamWidthRatio: 4.0
...
Parámetro | Descripción | Rango de valores | Valor por defecto |
---|---|---|---|
MaxDegree | Grado máximo del gráfico Vamana. Un valor mayor ofrece una mayor tasa de recuperación, pero aumenta el tamaño y el tiempo de construcción del índice. | [1, 512] | 56 |
SearchListSize | Tamaño de la lista de candidatos. Un valor mayor incrementa el tiempo empleado en construir el índice pero ofrece una mayor tasa de recuperación. Ajústalo a un valor menor que MaxDegree a menos que necesites reducir el tiempo de construcción del índice. | [1, int32_max] | 100 |
PQCodeBugetGBRatio | Límite de tamaño del código PQ. Un valor mayor ofrece una mayor tasa de recuperación, pero aumenta el uso de memoria. | (0.0, 0.25] | 0.125 |
SearchCacheBudgetGBRatio | Relación entre los números de los nodos almacenados en caché y los datos sin procesar. Un valor mayor mejora el rendimiento de la creación de índices, pero aumenta el uso de memoria. | [0.0, 0.3) | 0.10 |
BeamWidthRatio | Relación entre el número máximo de peticiones IO por iteración de búsqueda y el número de CPU. | [1, max(128 / número de CPU, 16)] | 4.0 |
Solución de problemas
¿Cómo solucionar el error
io_setup() failed; returned -11, errno=11:Resource temporarily unavailable
?El kernel de Linux proporciona la característica de E/S asíncrona no bloqueante (AIO) que permite a un proceso iniciar múltiples operaciones de E/S simultáneamente sin tener que esperar a que ninguna de ellas se complete. Esto ayuda a aumentar el rendimiento de las aplicaciones que pueden solapar el procesamiento y la E/S.
El rendimiento puede ajustarse utilizando el archivo virtual
/proc/sys/fs/aio-max-nr
en el sistema de archivos proc. El parámetroaio-max-nr
determina el número máximo de peticiones concurrentes permitidas.El valor por defecto de
aio-max-nr
es65535
, puede configurarse hasta10485760
.