Antes de adquirir una instancia de Vector Search Edition, utilice la calculadora de especificaciones para obtener las configuraciones recomendadas de nodos de consulta y nodos de datos. Este tema también proporciona datos de benchmark de HNSW e IVF_SQ8 en diferentes escalas de datos como referencia de rendimiento para seleccionar especificaciones.
Uso de la calculadora de especificaciones
En la página de compra de Vector Search Edition, haga clic en Specification Calculator.
Aparecerá el cuadro de diálogo OpenSearch Vector Search Edition Specification Calculator, que contiene las secciones Basic Configurations, Vector Data Configurations y Query Configurations. Después de completar los parámetros, haga clic en Perform Operation para obtener las especificaciones recomendadas.
Configuraciones básicas
Región de la instancia: La región donde se creará el motor.
Recuperación ante desastres: Indica si la recuperación ante desastres es obligatoria. Seleccione Sí o No en la lista desplegable.
Configuraciones de datos vectoriales
Número de documentos vectoriales: La cantidad de entradas de datos vectoriales que se escribirán en el motor.
Dimensión del vector: La dimensión de los vectores que se escribirán en el motor.
Algoritmo vectorial: Seleccione un algoritmo vectorial según sus necesidades. A continuación se admiten tres algoritmos:
HNSW: Algoritmo de recuperación vectorial basado en grafos con una tasa de recuperación muy alta y buen rendimiento. Su consumo de memoria y almacenamiento es comparable al de Linear. HNSW funciona bien tanto en conjuntos de datos vectoriales de baja como de alta dimensión, por lo que resulta adecuado para la mayoría de los escenarios de búsqueda vectorial.
QC: Algoritmo de recuperación vectorial basado en cuantización y agrupamiento con una precisión de recuperación muy alta, bajo consumo de recursos y buen rendimiento. Funciona mejor en conjuntos de datos vectoriales de baja dimensión. Su consumo de memoria y almacenamiento suele ser aproximadamente una cuarta parte del que requieren Linear y HNSW. QC es adecuado para escenarios de recuperación a gran escala sin requisitos estrictos de tasa de recuperación.
Linear: Algoritmo de búsqueda lineal (búsqueda por fuerza bruta) que garantiza resultados de recuperación completamente precisos, pero consume recursos significativos y ofrece un rendimiento menor. Por lo general, se utiliza para búsquedas precisas en conjuntos de datos pequeños de hasta 10,000 entradas.
Configuraciones de consulta
QPS promedio: Las consultas por segundo (QPS) esperadas para el motor.
Tiempo de respuesta promedio esperado: El tiempo de respuesta promedio objetivo para los resultados de recuperación. La unidad puede ser segundos (s) o milisegundos (ms).
Después de completar los parámetros, haga clic en Perform Operation.
La recomendación incluye parámetros como query node specification family, number of query nodes, query node specification, data node specification family, number of data nodes, data node specification y storage space/disk space per data node. Adquiera las especificaciones correspondientes según los resultados recomendados.
Datos de benchmark de HNSW
Los siguientes datos de prueba se basan en conjuntos de datos públicos, con la versión del motor vector_service 1.5.9 y una configuración de 1 nodo de consulta + 1 nodo de datos de disco en la nube. Parámetros de compilación del índice: M = 100, ef-construction = 500.
Conjunto de datos | Especificación | Parámetros | recall@k (serial) | Latencia P95 (serial) | QPS máximo (concurrente) | Concurrencia máxima | CPU/Memoria del nodo de consulta | CPU/Memoria del nodo de datos | Uso de memoria del índice |
OpenAI 1536D 50K | Nodo de consulta 2C8G + nodo de datos 2C16G | ef=20, k=10 | 0.9793 | 20ms | 643 | 10 | 89%/12% | 61%/10% | 311MB |
ef=200, k=100 | 0.9991 | — | — | — | — | — | |||
Nodo de consulta 4C16G + nodo de datos 4C32G | ef=20, k=10 | 0.9805 | 27ms | 1035 | 20 | 99%/7% | 38%/18% | ||
ef=200, k=100 | 0.9989 | 35ms | 744 | 20 | 88%/7% | 88%/18% | |||
Cohere 768D 1M | Nodo de consulta 4C16G + nodo de datos 4C32G | ef=20, k=10 | 0.9560 | 18ms | 1413 | 20 | 96%/7% | 48%/18% | 3.13GB |
ef=200, k=100 | 0.9919 | 131ms | 745 | 80 | 68%/7% | 91%/18% | |||
Nodo de consulta 4C16G + nodo de datos 8C64G | ef=20, k=10 | 0.9598 | 26ms | 1601 | 30 | 99%/8% | 29%/8% | ||
ef=200, k=100 | 0.9921 | 25ms | 1527 | 30 | 97%/7% | 93%/8% | |||
Cohere 768D 10M | Nodo de consulta 8C32G + nodo de datos 8C64G | ef=20, k=10 | 0.9429 | 24ms | 1534 | 30 | 70%/3% | 95%/55% | 33GB |
ef=200, k=100 | 0.9552 | 55ms | 662 | 30 | 40%/5% | 95%/55% |
Relación entre el nivel de uso de memoria del nodo de datos y el rendimiento
Las siguientes pruebas utilizan el conjunto de datos Cohere 768D, con una configuración de nodo de consulta 4C16G + nodo de datos de disco en la nube 4C32G, y un índice HNSW (InnerProduct, ef-construction = 500, M = 100). Los datos se insertan de forma incremental (1 millón de entradas a la vez) para observar el impacto del porcentaje de uso de memoria del nodo de datos en el QPS.
Volumen de datos | Uso de memoria del índice | Uso de memoria del proceso | QPS (k=10, ef=20) | QPS (k=100, ef=200) |
2M | 6.3GB | 26.6% | 1368 | 647 |
4M | 12.5GB | 47.8% | 1324 | 378 |
5M | 15.6GB | 59.2% | 1068 | 334 |
6M | 18.8GB | 69% | 1112 | 341 |
7M | 21.8GB | 80% | Prácticamente inutilizable | |
8M | — | — | — | — |
En una configuración típica, los índices vectoriales, los índices PK y los índices invertidos se fijan en la memoria física mediante mlock para lograr la menor latencia de recuperación posible. Otros datos (atributos, resúmenes, etc.) no se fijan con mlock y dependen de la caché de páginas del sistema operativo para cargarse bajo demanda. A medida que aumenta el porcentaje de uso de memoria, la caché de páginas se comprime y el acceso frecuente a atributos provoca fallos de página, lo que incrementa la latencia:
Nivel de uso > 70%: El QPS cae drásticamente.
Nivel de uso > 80%: El servicio se vuelve prácticamente inutilizable.
Datos de benchmark de IVF_SQ8
Las siguientes pruebas utilizan el conjunto de datos Cohere 768D 10M, con una configuración de nodo de consulta 4C16G + nodo de datos de disco en la nube 4C32G.
Parámetros de compilación del índice:
{
"proxima.qc.builder.quantizer_class": "Int8QuantizerConverter",
"proxima.qc.builder.quantize_by_centroid": true,
"proxima.qc.builder.optimizer_class": "BruteForceBuilder",
"proxima.qc.builder.thread_count": 10,
"proxima.qc.builder.optimizer_params": {
"proxima.linear.builder.column_major_order": true
},
"proxima.qc.builder.store_original_features": false,
"proxima.qc.builder.train_sample_count": 3000000,
"proxima.qc.builder.train_sample_ratio": 0.5
}
Prueba serial: Tasa de recuperación y latencia
|
Proporción de escaneo |
Tasa de recuperación |
Latencia (P99) |
Latencia (P95) |
|
0.01 |
0.9123 |
39.5ms |
35.7ms |
|
0.05 |
0.9454 |
84ms |
75ms |
Prueba de rendimiento concurrente: Inserción incremental
Se insertan 10 millones de entradas de datos vectoriales de 768 dimensiones de forma incremental para observar los cambios en el tamaño del índice y el QPS de consulta en diferentes volúmenes de datos.
|
Volumen de datos |
Uso de memoria del índice |
Uso de memoria |
QPS (proporción de escaneo 0.01, k=100) |
QPS (proporción de escaneo 0.05, k=100) |
|
1M |
2.25GB |
7.4% |
1000 |
558 |
|
2M |
3.11GB |
10.4% |
766 |
258 |
|
4M |
4.95GB |
16% |
408 |
122 |
|
10M |
9.9GB |
32.4% |
131 |
46 |