Milvus 2.2 基准测试报告
这份报告展示了 Milvus 2.2.0 的主要测试结果。它旨在展示 Milvus 2.2.0 的搜索性能,特别是在扩展能力方面的表现。
总结
- Milvus 2.2.0 在群集模式下与 Milvus 2.1 相比,QPS 提升超过 48%,在独立模式下提升超过 75%。
- Milvus 2.2.0 具备出色的扩展能力:
- 当 CPU 核心数从 8 扩展到 32 时,QPS 线性增长。
- 当 Querynode 副本数从 1 扩展到 8 时,QPS 线性增长。
术语
测试环境
所有测试都是在以下环境下进行的。
硬件环境
硬件 | 规格 |
---|---|
CPU | Intel(R) Xeon(R) Gold 6226R CPU @ 2.90GHz |
内存 | 16*\32 GB RDIMM, 3200 MT/s |
SSD | SATA 6 Gbps |
软件环境
软件 | 版本 |
---|---|
Milvus | v2.2.0 |
Milvus GO SDK | v2.2.0 |
部署方案
- Milvus 实例(独立或群集)通过 Helm 在基于物理或虚拟机的 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 向量。通过设置
M
为8
且efConstruction
为200
建立一个 HNSW 索引并配置索引参数。 - 加载集合。
- 使用不同的并发数和搜索参数
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 | 失败/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
搜索性能
Milvus | QPS | RT(TP99) / ms | RT(TP50) / ms | 失败/s |
---|---|---|---|---|
2.1.0 | 4287 | 104 | 76 | 0 |
2.2.0 | 7522 | 127 | 79 | 0 |
Milvus 2.2.0 扩展
将一个 Querynode 中的 CPU 核心扩展以检查其扩展能力。
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 核心 | 并发数 | QPS | 响应时间(TP99) / 毫秒 | 响应时间(TP50) / 毫秒 | 失败/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 扩展
扩展更多的副本以检查其扩展能力。
注意:加载集合时 Querynodes 的数量等于 replica_number
。
queryNode:
replicas: 1 / 2 / 4 / 8
resources:
limits:
cpu: "8.0"
memory: 8Gi
requests:
cpu: "8.0"
memory: 8Gi
副本数 | 并发数 | QPS | 响应时间(TP99) / 毫秒 | 响应时间(TP50) / 毫秒 | 失败/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.0 的性能测试,但是请使用 Milvus 2.2 和 Pymilvus 2.2。