HNSW性能评测
data_size = 10M, 参数为 InnerProduct, nlinks = 32, efConstruction = 40, efSearch = 64
集群 |
机器配置 |
数据维度 |
构建索引时间 |
---|---|---|---|
masterrouterps各一个,均在一台机器上 |
56核256G内存 |
128 |
28min |
masterrouterps各一个,均在一台机器上 |
56核256G内存 |
512 |
33min10s |
masterrouterps各一台,且在不同机器上 |
8核16G内存 |
128 |
2h38m |
内存使用率
以8核16G机器为样本进行分析,vearch ps共使用内存16G * 0.627 = 10.032G,其中原始数据特征大小为10M * 128 * 4 ~ 5G,其它为索引以及正排字段占用内存。使用时仅创建一个正排字段和向量字段。
10M数据, 机器配置56核256G,add time = 28min01s, 左侧是构建索引CPU利用率,右侧是搜索时CPU利用率
model |
返回结果数 |
并发数 |
QPS |
tp99 |
tp100 |
---|---|---|---|---|---|
HNSW |
100 |
2000 |
5069.48 |
959 |
1944 |
HNSW |
100 |
1000 |
4680.62 |
521 |
994 |
HNSW |
100 |
100 |
4508.33 |
49 |
86 |
HNSW |
100 |
50 |
4146.55 |
22 |
35 |
HNSW |
100 |
10 |
2048.43 |
8 |
117 |
HNSW |
100 |
1 |
182.74 |
9 |
160 |
10M数据,机器配置56核256G,d = 512, add time = 33min10s,左侧是构建索引CPU利用率,右侧是搜索时CPU利用率
model |
返回结果数 |
并发数 |
QPS |
tp99 |
tp100 |
---|---|---|---|---|---|
HNSW |
100 |
2000 |
4194.72 |
1181 |
2650 |
HNSW |
100 |
1000 |
4058.59 |
628 |
1059 |
HNSW |
100 |
100 |
3784.56 |
57 |
172 |
HNSW |
100 |
50 |
3723.75 |
24 |
43 |
HNSW |
100 |
10 |
1248.46 |
15 |
1208 |
HNSW |
100 |
1 |
142.70 |
12 |
71 |
10m数据,机器配置8核16G,d = 128, add_time = 2h38m
构建索引时CPU使用率基本保持在100%, 搜索时cpu使用率,当并发数为50,100时,可以看到cpu使用率已经100%,故不做并发数1000/2000的对比实验
model |
返回结果数 |
并发数 |
QPS |
tp99 |
tp100 |
---|---|---|---|---|---|
HNSW |
100 |
100 |
888.25 |
279 |
402 |
HNSW |
100 |
50 |
1126.06 |
95 |
199 |
HNSW |
100 |
10 |
918.50 |
15 |
31 |
HNSW |
100 |
1 |
91.74 |
14 |
25 |
召回评测使用sift1M
model |
parameters |
recall@1 |
||
---|---|---|---|---|
HNSW |
InnerProduct, nlinks = 32, efConstruction = 40, efSearch = 64 |
0.9769 |
0.9852 |
0.9852 |