Análisis de optimización para sistema RAG en producción
Qdrant · HNSW 850K vectores · 1536 dim Recall bajo · Latencia altaPara 850K vectores y recall ≥ 0.95 se requiere efSearch ≥ 128. Con M=16 y efSearch=50 el grafo HNSW no explora suficientes candidatos en capas altas, causando el 78% de recall observado.
Con 850K vectores (rango 100K–1M) el parámetro M recomendado es 32. M=16 reduce conexiones del grafo, degradando recall especialmente en búsquedas en layers superiores del HNSW.
850K × 1536 dim × 4 bytes = 5.2 GB solo en vectores. Sin INT8, se desperdicia 2× la memoria necesaria y se reduce el working set que cabe en CPU cache, aumentando latencia.
El índice fue construido con baja calidad de grafo. A 850K vectores se recomienda efConstruction=200+ para asegurar conexiones de alta calidad entre vecinos en cada capa del HNSW.
| Config | M | efConstruction | efSearch | Recall@10 | Latencia P99 | QPS est. | RAM (solo índice) | Estado |
|---|---|---|---|---|---|---|---|---|
| Default (actual) | 16 | 100 | 50 | 0.78 | 340 ms | 62 | 3.3 GB | Falla SLA |
| Solo efSearch↑ | 16 | 100 | 128 | 0.87 | 180 ms | 34 | 3.3 GB | Parcial |
| M↑ + efConstruction↑ | 32 | 200 | 128 | 0.96 | 220 ms | 28 | 6.5 GB | Recall OK |
| ✦ Recomendada (INT8 + rescore) | 32 | 200 | 128 | 0.96 | 38 ms | 148 | 9.5 GB total | Cumple SLA |
| Máximo recall (FP32) | 48 | 256 | 256 | 0.99 | 95 ms | 61 | 12.3 GB | Overkill |
| Memoria mínima (PQ) | 16 | 128 | 64 | 0.89 | 22 ms | 310 | 1.1 GB | Recall bajo |
| Tipo | Bytes/dim | RAM 850K×1536 | Recall | Velocidad |
|---|---|---|---|---|
| FP32 (actual) | 4 | 5.2 GB | Base | 1× |
| FP16 | 2 | 2.6 GB | ~FP32 | 1.3× |
| ✦ INT8 Scalar | 1 | 1.3 GB | +rescore→0.96 | 3.8× |
| Product Quant. (PQ) | ~0.05 | 0.06 GB | 0.89 max | 6× |
| Binary | 0.125 | 0.16 GB | 0.72 | 12× |
| Métrica | Warning | Critical | Acción |
|---|---|---|---|
| Recall@10 | < 0.93 | < 0.90 | Aumentar efSearch |
| Latencia P99 | > 80 ms | > 150 ms | Escalar pods Qdrant |
| RAM uso | > 24 GB | > 28 GB | Activar memmap disk |
| QPS | < 100 | < 60 | Revisar GC / locks |
| Build time/1K | > 8 s | > 15 s | Reducir batch size |