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,其它为索引以及正排字段占用内存。使用时仅创建一个正排字段和向量字段。

Architecture

10M数据, 机器配置56核256G,add time = 28min01s, 左侧是构建索引CPU利用率,右侧是搜索时CPU利用率

Architecture

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利用率

Architecture

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的对比实验

Architecture

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

recall@10

recall@100

HNSW

InnerProduct, nlinks = 32, efConstruction = 40, efSearch = 64

0.9769

0.9852

0.9852