Milvus 2.2.0的基准测试
本报告展示了Milvus 2.2.0的主要测试结果。旨在提供Milvus 2.2.0的搜索性能图片,特别是在可扩展性方面。
我们最近对Milvus 2.2.3进行了基准测试,并获得了以下主要发现:
- 搜索延迟降低了2.5倍
- QPS增加了4.5倍
- 十亿级别相似度搜索性能微弱下降
- 使用多个副本时呈线性可伸缩性
详情请参考此白皮书 (opens in a new tab)和相关基准测试代码 (opens in a new tab)。
总结
- 与Milvus 2.1相比,在群集模式下,Milvus 2.2.0的QPS增加了48%以上,在独立模式下增加了75%以上。
- Milvus 2.2.0具有令人印象深刻的扩展和扩展能力:
- 将CPU核心从8个扩展到32个时,QPS线性增加。
- 将Querynode副本从1个扩展到8个时,QPS线性增加。
术语
参数 | 描述 | 选项 |
---|---|---|
metric | 用于计算的度量类型。 | 对于浮点向量:* L2 (欧几里得距离) * IP (内积) |
点此查看测试所使用术语的详细信息
术语 | 描述 |
---|---|
nq | 在一个搜索请求中要搜索的向量的数量 |
topk | 在一个搜索请求中为每个向量(在nq内)检索的最近向量的数量 |
ef | 一个特定于HNSW索引 (opens in a new tab)的搜索参数 |
RT | 从发送请求到接收响应所需的响应时间 |
QPS | 每秒成功处理的搜索请求数 |
测试环境
所有测试都是在以下环境下进行的。
硬件环境
Hardware | Specification |
---|---|
CPU | Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz |
Memory | 16*32 GB RDIMM, 3200 MT/s |
SSD | SATA 6 Gbps |
Software environment
Software | Version |
---|---|
Milvus | v2.2.0 |
Milvus GO SDK | v2.2.0 |
部署方案
-
Milvus实例(独立或集群)通过Helm (opens in a new tab)在支持物理或虚拟机的Kubernetes集群上部署。
-
不同的测试仅在CPU核心数、内存大小和副本数(Worker节点数)方面有所变化,仅适用于Milvus集群。
-
未指定的配置与默认配置 (opens in a new tab)相同。
-
Milvus 依赖项(MinIO、Pulsar 和 Etcd)在每个节点的本地 SSD 上存储数据。
-
通过Milvus GO SDK (opens in a new tab)将搜索请求发送到 Milvus 实例。
数据集
测试使用ANN-Benchmarks (opens in a new tab)开源数据集SIFT(128维度)。
测试流程
- 使用相应的服务器配置通过Helm启动Milvus实例。
- 通过Milvus GO SDK连接至Milvus实例并获取相应的测试结果。
- 创建一个集合。
- 插入100万个SIFT向量。使用HNSW索引并将索引参数配置为将
M
设为8
,将efConstruction
设为200
。 - 加载该集合。
- 以不同的并发数和搜索参数
nq=1, topk=1, ef=64
进行搜索,每次并发的持续时间至少为1小时。
测试结果
Milvus 2.2.0 与 Milvus 2.1.0
聚类
服务器配置(集群)
queryNode:
replicas: 1
resources:
limits:
cpu: "12.0"
memory: 8Gi
requests:
cpu: "12.0"
memory: 8Gi
搜索性能
Milvus | QPS | RT(TP99) / ms | RT(TP50) / ms | fail/s |
---|---|---|---|---|
2.1.0 | 6904 | 59 | 28 | 0 |
2.2.0 | 10248 | 63 | 24 | 0 |
单机版
服务器配置(独立版本)
standalone:
replicas: 1
resources:
limits:
cpu: "12.0"
memory: 16Gi
requests:
cpu: "12.0"
memory: 16Gi
Search performance
Milvus | QPS | RT(TP99) / ms | RT(TP50) / ms | fail/s |
---|---|---|---|---|
2.1.0 | 4287 | 104 | 76 | 0 |
2.2.0 | 7522 | 127 | 79 | 0 |
Milvus 2.2.0 Scale-up
扩展一个Querynode的CPU核心,以检查其扩展能力。
Server configurations (cluster)
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
搜索性能
CPU cores | Concurrent Number | QPS | RT(TP99) / ms | RT(TP50) / ms | fail/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 |
Milvus 2.2.0 横向扩展
增加更多查询节点的副本以检查水平扩展的能力。
注意:加载集合时,查询节点的数量等于replica_number
。
服务器配置(集群)
queryNode:
replicas: 1 / 2 / 4 / 8
resources:
limits:
cpu: "8.0"
memory: 8Gi
requests:
cpu: "8.0"
memory: 8Gi
Replicas | Concurrent Number | QPS | RT(TP99) / ms | RT(TP50) / ms | fail/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 |
接下来的步骤
- 参考本指南 (opens in a new tab),尝试使用Milvus 2.2和Pymilvus 2.2进行性能基准测试。