Rapporto sui test di benchmark di Milvus 2.2
Questo rapporto mostra i principali risultati dei test di Milvus 2.2.0. Ha lo scopo di fornire un quadro delle prestazioni di ricerca di Milvus 2.2.0, soprattutto per quanto riguarda la capacità di scalare e scalare.
Recentemente abbiamo eseguito un benchmark con Milvus 2.2.3 e abbiamo ottenuto i seguenti risultati chiave:
- Riduzione di 2,5 volte della latenza di ricerca
- Un aumento di 4,5 volte dei QPS
- Ricerca di somiglianze su scala miliardaria con un minimo degrado delle prestazioni
- Scalabilità lineare quando si utilizzano più repliche
Per i dettagli, si rimanda a questo whitepaper e al relativo codice di test di benchmark.
Sintesi
- Rispetto a Milvus 2.1, il QPS di Milvus 2.2.0 aumenta di oltre il 48% in modalità cluster e di oltre il 75% in modalità standalone.
- Milvus 2.2.0 ha un'impressionante capacità di scalare e scalare:
- Il QPS aumenta linearmente quando si espandono i core della CPU da 8 a 32.
- Il QPS aumenta linearmente quando si espandono le repliche di Querynode da 1 a 8.
Terminologia
Fare clic per visualizzare i dettagli dei termini utilizzati nel test
Termine
Descrizione
nq
Numero di vettori da ricercare in una richiesta di ricerca
topk
Numero di vettori più vicini da recuperare per ogni vettore (in nq) in una richiesta di ricerca
ef
Parametro di ricerca specifico dell'indice HNSW
RT
Tempo di risposta dall'invio della richiesta alla ricezione della risposta
QPS
Numero di richieste di ricerca elaborate con successo al secondo.
Ambiente di test
Tutti i test sono stati eseguiti nei seguenti ambienti.
Ambiente hardware
Hardware | Specifiche |
---|---|
CPU | CPU Intel® Xeon® Gold 6226R a 2,90GHz |
Memoria | 16*32 GB RDIMM, 3200 MT/s |
SSD | SATA 6 Gbps |
Ambiente software
Software | Versione |
---|---|
Milvus | v2.2.0 |
Milvus GO SDK | v2.2.0 |
Schema di distribuzione
- Le istanze Milvus (standalone o cluster) vengono distribuite tramite Helm su un cluster Kubernetes basato su macchine fisiche o virtuali.
- I diversi test variano semplicemente nel numero di core della CPU, nella dimensione della memoria e nel numero di repliche (nodi worker), il che si applica solo ai cluster Milvus.
- Le configurazioni non specificate sono identiche a quelle predefinite.
- Le dipendenze di Milvus (MinIO, Pulsar ed Etcd) memorizzano i dati sull'SSD locale di ogni nodo.
- Le richieste di ricerca vengono inviate alle istanze Milvus tramite Milvus GO SDK.
Set di dati
Il test utilizza il dataset open-source SIFT (128 dimensioni) di ANN-Benchmarks.
Pipeline del test
- Avviare un'istanza Milvus da Helm con le rispettive configurazioni del server come elencato in ogni test.
- Connettersi all'istanza Milvus tramite Milvus GO SDK e ottenere i risultati del test corrispondenti.
- Creare una raccolta.
- Inserire 1 milione di vettori SIFT. Creare un indice HNSW e configurare i parametri dell'indice impostando
M
su8
eefConstruction
su200
. - Caricare la raccolta.
- Effettuare una ricerca con diversi numeri concomitanti con i parametri di ricerca
nq=1, topk=1, ef=64
, la durata di ogni concomitanza è di almeno 1 ora.
Risultati del test
Milvus 2.2.0 v.s. Milvus 2.1.0
Cluster
Configurazioni del server (cluster)
yaml queryNode: replicas: 1 resources: limits: cpu: "12.0" memory: 8Gi requests: cpu: "12.0" memory: 8Gi
Prestazioni di ricerca
Milvus | QPS | RT(TP99) / ms | RT(TP50) / ms | fallimento/s |
---|---|---|---|---|
2.1.0 | 6904 | 59 | 28 | 0 |
2.2.0 | 10248 | 63 | 24 | 0 |
Prestazioni della ricerca in cluster
Standalone
Configurazioni server (standalone)
yaml standalone: replicas: 1 resources: limits: cpu: "12.0" memory: 16Gi requests: cpu: "12.0" memory: 16Gi
Prestazioni di ricerca
Milvus | QPS | RT(TP99) / ms | RT(TP50) / ms | fallimento/s |
---|---|---|---|---|
2.1.0 | 4287 | 104 | 76 | 0 |
2.2.0 | 7522 | 127 | 79 | 0 |
Prestazioni della ricerca standalone
Milvus 2.2.0 Scalamento
Espandere i core della CPU in un Querynode per verificare la capacità di scalare.
Configurazioni server (cluster)
yaml queryNode: replicas: 1 resources: limits: cpu: "8.0" /"12.0" /"16.0" /"32.0" memory: 8Gi requests: cpu: "8.0" /"12.0" /"16.0" /"32.0" memory: 8Gi
Prestazioni di ricerca
Core della CPU | Numero di CPU contemporanee | QPS | RT(TP99) / ms | RT(TP50) / ms | fallimento/s |
---|---|---|---|---|---|
8 | 500 | 7153 | 127 | 83 | 0 |
12 | 300 | 10248 | 63 | 24 | 0 |
16 | 600 | 14135 | 85 | 42 | 0 |
32 | 600 | 20281 | 63 | 28 | 0 |
Prestazioni di ricerca in base ai core della CPU di Querynode
Milvus 2.2.0 Scalamento
Espandere più repliche con più Querynodes per verificare la capacità di scalare.
Nota: il numero di Querynodes è uguale a replica_number
quando si carica la collezione.
Configurazioni del server (cluster)
yaml queryNode: replicas: 1 / 2 / 4 / 8 resources: limits: cpu: "8.0" memory: 8Gi requests: cpu: "8.0" memory: 8Gi
Repliche | Numero di repliche | QPS | RT(TP99) / ms | RT(TP50) / ms | fallimento/s |
---|---|---|---|---|---|
1 | 500 | 7153 | 127 | 83 | 0 |
2 | 500 | 15903 | 105 | 27 | 0 |
4 | 800 | 19281 | 109 | 40 | 0 |
8 | 1200 | 30655 | 93 | 38 | 0 |
Prestazioni di ricerca per repliche Querynode
Cosa fare dopo
- Provate a eseguire da soli i test di benchmark di Milvus 2.2.0 facendo riferimento a questa guida, tranne per il fatto che dovreste usare Milvus 2.2 e Pymilvus 2.2 in questa guida.