Skip to content

Vearch召回评测

gDreamcatcher edited this page Nov 18, 2020 · 7 revisions

Vearch召回评测

一、数据集描述

(1) 下载数据

​ SIFT数据:http://corpus-texmex.irisa.fr/

​ VGG数据:使用深度学习模型vgg获得

(2) 数据描述

表1 实验数据

dataset file size dimension nb base vector nb query vector
Sift 1M 492M 128 1,000,000 10,000
Sift 10M 4.8G 128 10,000,000 10.000
Vgg 1M 2G 512 1,000,000 10.000
Vgg 10M 20G 512 10,000,000 10.000

二、机器配置信息

​ 配置1:

 3master + 5router + 1ps

表2 实验机器配置1

类型 CPU GPU型号 内存
master 2核 Intel(R) Xeon(R) CPU E5-2698 v3 @ 2.30GHz 4G
router 8核 Intel(R) Xeon(R) CPU E5-2698 v3 @ 2.30GHz 16G
ps 16核 Intel(R) Xeon(R) CPU E5-2683 v4 @ 2.10GHz Tesla P40 32G

​ 配置2:

​ 1master + 1router + 1ps布置在同一台机器上,性能:56C、256G、Intel(R) Xeon(R) CPU E5-2680 v4 @2.40GHz,显卡数量及型号:4张 Tesla P40。

​ 配置3:

 3master + 5router + 1ps

表3 实验机器配置3

类型 CPU GPU型号 内存
master 2核 Intel(R) Xeon(R) CPU E5-2698 v3 @ 2.30GHz 4G
router 8核 Intel(R) Xeon(R) CPU E5-2698 v3 @ 2.30GHz 16G
ps 8核 Intel(R) Xeon(R) CPU E5-2698 v4 @ 2.20GHz 16G

三、评测结果

(1) IVFPQ模型的评测

​ 使用的机器为配置1,数据集使用的是SIFT1M,ivfpq使用CPU计算时,建表中retrieval_type设为IVFPQ,使用GPU计算时,建表中retrieval_type设为GPU,两种计算方式召回相同,测试结果如下表,并发性能测试如下图所示:

表4 SIFT1M并发实验召回及性能

ncen nsub nprobe recall@1 recall@10 recall@100 并发 cpu-QPS cpu- tp99 gpu-QPS gpu-tp99
256 32 1 0.5236 0.5255 0.5255 30 3522 27 4402 10
256 32 5 0.8849 0.8912 0.8912 30 3318 32 4157 11
256 32 10 0.9588 0.9658 0.9658 30 2994 32 4000 12
256 32 20 0.9876 0.9942 0.9942 30 2507 40 4050 12
256 32 30 0.9925 0.9994 0.9994 30 1834 43 4079 12
256 32 40 0.9933 0.9998 0.9998 30 1585 48 4115 11
256 32 50 0.9934 0.9999 0.9999 30 1431 52 4093 12
256 32 80 0.9935 1 1 30 1089 63 3958 12
256 32 100 0.9935 1 1 30 925 68 3786 12
256 32 200 0.9936 1 1 30 475 93 3212 14

图1 SIFT1M CPU并发实验折线图

​ 可以看出对于本集群不同参数下,30并发量下QPS较高。不同的建表参数、不同配置的电脑和不同数据量最佳的并发量可能有所变化。

图2 SIFT1M GPU并发实验折线图

​ 和CPU实验结果相似,30并发量下QPS较高。

​ 使用的机器为配置2,数据集使用的是SIFT1M,使用GPU计算,建表中retrieval_type设为GPU,nsubvector=64,单条搜索,测试结果曲线图如下图所示,详细结果如下表所示:

表5 SIFT1M实验recall@1结果

npr\ncen 128 256 512 1024 2048 4096 8192 16384
1 0.5901 0.5319 0.4801 0.4235 0.7366 0.3358 0.3015 0.2781
5 0.9306 0.8973 0.848 0.7868 0.7366 0.6848 0.6314 0.5818
10 0.9799 0.9666 0.9333 0.8957 0.86 0.8138 0.7603 0.7114
20 0.9918 0.9883 0.977 0.9584 0.9371 0.9024 0.8618 0.8173
30 0.9924 0.992 0.9867 0.9745 0.963 0.9377 0.9066 0.8718
40 0.9924 0.992 0.989 0.9814 0.9749 0.9534 0.9326 0.9004
50 0.9928 0.9925 0.9914 0.9861 0.9801 0.9663 0.9473 0.9218
80 0.9928 0.9925 0.9923 0.9898 0.9892 0.9814 0.9711 0.9535
100 0.9928 0.9925 0.9925 0.9913 0.9905 0.9852 0.9783 0.9642
200 - 0.9926 0.9925 0.9915 0.9931 0.9919 0.9885 0.9835

表6 上表对应的QPS

npr\ncen 128 256 512 1024 2048 4096 8192 16384
1 171 173 176 174 172 173 177 194
5 174 176 175 179 177 177 172 172
10 173 176 175 176 177 176 176 175
20 173 179 176 179 178 174 176 175
30 174 175 171 180 175 178 176 174
40 172 174 176 177 177 177 176 177
50 173 175 174 179 176 176 175 174
80 170 174 173 177 175 174 175 171
100 166 171 172 176 174 174 173 169
200 - 165 170 174 171 171 167 168

​ 若将召回率大于96%设置为合格,表中粗体字表示ncentroids一定的情况下,召回超过96%时最小的nprobe。观察QPS结果中的加粗字体,不难发现当ncentroids设置在1024左右时,QPS较大。

图3 SIFT1M实验曲线图

​ 使用的机器为配置2,数据集使用的是VGG1M,使用GPU计算,建表中retrieval_type设为GPU,nsubvector=64,单条搜索,实验结果曲线图如下图所示,详细结果如下表所示:

表7 VGG1M实验recall@1结果

npr\ncen 128 256 512 1024 2048 4096 8192 16384
1 0.578 0.5119 0.4861 0.4347 0.3999 0.3679 0.3411 0.3127
5 0.8953 0.8535 0.8159 0.7633 0.7223 0.6804 0.6382 0.5971
10 0.9584 0.9322 0.9008 0.8642 0.8246 0.7873 0.7549 0.7144
20 0.9824 0.9706 0.9529 0.9298 0.9001 0.8736 0.8422 0.8113
30 0.9871 0.9811 0.9711 0.9532 0.9299 0.9083 0.8846 0.8571
40 0.9887 0.9853 0.9796 0.9651 0.9456 0.929 0.9081 0.886
50 0.9896 0.9872 0.984 0.9733 0.9567 0.9432 0.9259 0.9061
80 0.9898 0.9897 0.9886 0.9826 0.9734 0.9648 0.951 0.9346
100 0.9899 0.9903 0.9895 0.9852 0.9787 0.9719 0.9657 0.9468
200 - 0.9905 0.99 0.988 0.9877 0.9857 0.9786 0.9724

表8 对应的单条搜索QPS

npr\ncen 128 256 512 1024 2048 4096 8192 16384
1 141 137 139 140 140 139 142 145
5 141 139 141 143 140 139 140 138
10 140 137 141 141 141 140 139 136
20 140 138 140 141 143 140 139 137
30 141 137 141 140 139 141 140 136
40 139 138 139 141 140 138 141 137
50 138 137 140 142 138 140 140 137
80 137 134 141 141 140 138 139 137
100 135 134 140 140 139 137 138 138
200 - 134 139 137 135 137 136 133

​ 若将召回率大于96%设置为合格,表中粗体字表示ncentroids一定的情况下,召回率超过96%时最小的nprobe。观察QPS结果中的加粗字体,不难发现当ncentroids设置在1024左右时,QPS较大。

图4 VGG1M实验曲线

​ 使用的机器为配置2,数据集使用的是SIFT10M,使用GPU计算,建表中retrieval_type设为GPU,nsubvector=64,单条搜索,测试结果如下表,曲线图如下图所示:

表9 SIFT10M数据recall@1结果

npr\ncen 128 256 512 1024 2048 4096 8192 16384
1 0.469 0.439 0.355 0.333 0.285 0.234 0.192 0.160
5 0.853 0.817 0.741 0.696 0.622 0.547 0.473 0.422
10 0.944 0.917 0.865 0.825 0.762 0.693 0.614 0.573
20 0.985 0.973 0.941 0.916 0.868 0.817 0.752 0.708
30 0.995 0.989 0.967 0.952 0.915 0.870 0.819 0.779
40 0.998 0.995 0.981 0.967 0.939 0.906 0.860 0.823
50 0.999 0.998 0.988 0.976 0.953 0.930 0.888 0.854
80 1 1 0.997 0.991 0.977 0.960 0.932 0.908
100 1 1 0.999 0.995 0.985 0.970 0.948 0.928
200 - 1 1 0.999 0.997 0.991 0.981 0.972
SR 15.63% 7.81% 5.86% 3.91% 3.91% 1.95% 2.44% 1.22%

注;SR表示数据均匀分布的情况下,搜索的数据占总数的比例。

表10 对应的单条搜索的QPS

npr\ncen 128 256 512 1024 2048 4096 8192 16384
1 169 173 172 174 173 170 172 171
5 170 170 171 173 173 169 177 174
10 163 168 169 174 174 173 176 171
20 159 165 170 173 171 174 178 172
30 152 161 166 171 171 171 171 175
40 153 162 166 170 173 173 174 173
50 151 163 167 173 170 171 172 171
80 141 154 164 169 171 170 169 169
100 132 150 162 167 168 170 168 170
200 - 133 150 160 163 165 164 164

​ 观察QPS值,不难发现当ncentroids设置为2048时,recall比较高,SR在2% - 5%之间。根据实验结果表的定量分析和根据曲线图的定性分析得出的规律一致。保证了结论的可靠性。

图5 SIFT10M实验结果曲线

​ 图片中显示,当ncentroids为256时,召回率较高,但QPS较差。当ncentroids为2048和8192时,QPS差异较小,但ncentroids为2048时,召回率较高。对于图像中的3条召回曲线(3条实线),截取3条曲线中的recall=0.95的点,这三点A、B、C对应QPS中B点的QPS较大,因此,ncentroids为256、2048和8196中2048较好。类似地,VGG10M数据也符合这个规则。

​ 使用的机器为配置2,数据集使用的是VGG10M,使用GPU计算,建表中retrieval_type设为GPU,nsubvector=64,单条搜索,测试结果如下表,曲线图如下图所示:

表11 VGG10M recall@1结果

npr\ncen 128 256 512 1024 2048 4096 8192 16384
1 0.634 0.648 0.565 0.536 0.500 0.461 0.434 0.405
5 0.907 0.892 0.850 0.816 0.784 0.746 0.715 -
10 0.949 0.943 0.915 0.887 0.861 0.838 0.807 0.782
20 0.966 0.962 0.950 0.932 0.914 0.896 0.874 0.856
30 0.970 0.968 0.962 0.950 0.938 0.921 0.909 -
40 0.971 0.971 0.966 0.958 0.948 0.937 0.925 -
50 0.971 0.973 0.968 0.964 0.954 0.942 0.935 0.919
80 0.971 0.973 0.971 0.968 0.965 0.957 0.949 0.941
100 0.971 0.973 0.972 0.969 0.967 0.961 0.955 0.947
200 - 0.973 0.973 0.972 0.972 0.969 0.968 0.962
SR 15.63% 7.81% 5.86% 4.88% 3.91% 2.44% 2.44% 1.22%

注;SR表示数据均匀分布的情况下,搜索的数据占总数的比例。

表12 对应的QPS结果

npr\ncen 128 256 512 1024 2048 4096 8192 16384
1 131 135 135 136 135 134 138 130
5 135 135 135 136 135 136 136 -
10 132 134 135 137 136 138 136 136
20 128 129 133 135 137 137 136 133
30 124 128 133 136 133 137 135 -
40 123 132 133 137 135 135 133 -
50 121 132 132 136 135 137 134 133
80 114 123 129 134 132 135 132 134
100 109 122 127 133 133 136 132 133
200 - 109 118 128 128 132 130 130

​ 若将召回率大于96%设置为合格,表中粗体字表示ncentroids一定的情况下,召回率超过96%时最小的nprobe。观察QPS结果中的加粗字体,不难发现当ncentroids设置在2048左右时,QPS较高,SR在2% - 5%之间。

图6 VGG10实验结果曲线图

​ 我们可以看到,在其他参数保持不变的情况下,当nprobe超过一定值时,其recall基本保持不变。在其他参数一定条件下,nprobe与QPS呈一定的线性关系,且QPS随nprobe的增大而减小。在256、2048、8192三个ncentroid值中,2048 ncentroid的召回率和QPS效果较好。

(2) HNSW模型的评测

​ 使用的机器为配置1,数据集使用的是SIFT1M,并发量为50,测试结果如下。

表13 召回和性能测试结果

nlinks efCon efSearch Time Memory CPU recall@1 recall@10 recall@1 00 recall@1 300 QPS TP99
32 40 64 135.2s 960M 100% 0.9794 0.9868 0.9868 0.9868 1415 73ms
32 40 128 132.3s 898M 100% 0.9888 0.9968 0.9968 0.9968 1352 74ms
32 40 256 133.2s 875M 100% 0.9913 0.9984 0.9984 0.9984 1066 84ms
32 40 512 132.3s 842M 100% 0.9926 0.9995 0.9995 0.9995 690 102ms
32 50 64 144.6s 960M 100% 0.9811 0.9886 0.9886 0.9886 1476 70ms
32 50 128 143.3s 855M 100% 0.9899 0.9974 0.9974 0.9974 1319 76ms
32 50 256 147.1s 878M 100% 0.9926 0.9994 0.9994 0.9994 1066 85ms
32 50 512 143.2s 845M 100% 0.9926 0.9999 0.9999 0.9999 687 101ms
32 80 64 143.6s 881M 100% 0.9741 0.9806 0.9806 0.9806 1565 71ms
32 80 128 142.7s 901M 100% 0.9877 0.9950 0.9950 0.9950 1446 77ms
32 80 256 144.7s 875M 100% 0.9921 0.9990 0.9990 0.9990 1170 81ms
32 80 512 143.6s 875M 100% 0.9928 0.9999 0.9999 0.9999 882 92ms
32 128 64 191.3s 875M 100% 0.9812 0.9884 0.9884 0.9884 1589 70ms
32 128 128 188.4s 875M 100% 0.9900 0.9973 0.9973 0.9973 1369 75ms
32 128 256 189.7s 859M 100% 0.9927 0.9996 0.9996 0.9996 1101 83ms
32 128 512 141.3s 813M 100% 0.9918 0.9997 0.9997 0.9997 884 92ms
32 256 64 311.6s 859M 100% 0.9860 0.9929 0.9929 0.9929 1493 70ms
32 256 128 309.9s 865M 100% 0.9915 0.9990 0.9990 0.9990 1331 75ms
32 256 256 314.6s 845M 100% 0.9934 0.9999 0.9999 0.9999 1072 84ms
32 256 512 324.3s 950M 100% 0.9934 0.9999 0.9999 0.9999 718 102ms

​ 使用的机器为配置1,数据集使用的是SIFT1M,并发量为30,测试结果如下表,性能曲线图如下图:

表14 30并发量实验

nlinks efConstruction efSearch Recall@1 QPS tp99
32 40 4 0.6789 4328.3 11ms
32 40 8 0.8195 4257.29 13ms
32 40 16 0.9089 3870.71 20ms
32 40 32 0.9588 3664.41 19ms
32 40 64 0.9798 3187.75 25ms
32 40 128 0.9885 2768.65 31ms
32 40 256 0.991 1807.98 46
32 40 512 0.9883 950.59 65

图7 性能测试折线图

(3) IVFFLAT模型的评测

​ 使用的机器为配置1,数据集使用的是SIFT1M,并发量为30,测试结果如下表:

表15 IVFFLAT测试结果

ncentroid nprobe recall@1 recall@10 recall@100 QPS tp99
256 1 0.5229 0.5255 0.5255 3713.01 21ms
256 5 0.8848 0.8912 0.8912 3098.09 33ms
256 10 0.9588 0.9658 0.9658 2341.46 43ms
256 20 0.9881 0.9942 0.9942 1220.72 59ms
256 40 0.9924 0.9998 0.9998 576.44 82ms
256 50 0.9927 0.9999 0.9999 445.53 96ms
256 60 0.9934 1.000 1.000 351.23 114ms

(4) IVFHNSWPQ/IVFHNSWOPQ模型的评测

使用的机器为配置3,数据集使用的是SIFT10M,并发量为10,测试结果如下表:

表16 IVFHNSWPQ/IVFHNSWOPQ索引参数

Index metric_type ncentroid nsubvector nlinks efConstruction efSearch opq_nsubvector
IVF+HNSW+PQ L2 65536 64 32 200 64 -
IVF+HNSW+OPQ L2 65536 64 32 200 64 64

测试结果如下表:

表17 IVFHNSWPQ/IVFHNSWOPQ评测结果

Index ncentroid nprobe recall@1 recall@10 recall@100 QPS tp99
IVF+HNSW+PQ 65536 1 0.2331 0.2507 0.2507 1069.29 13ms
IVF+HNSW+PQ 65536 16 0.6599 0.7644 0.7644 1011.13 13ms
IVF+HNSW+PQ 65536 32 0.7299 0.8593 0.8593 956.82 14ms
IVF+HNSW+PQ 65536 64 0.7742 0.9249 0.9249 855.72 15ms
IVF+HNSW+PQ 65536 128 0.8017 0.9671 0.9671 679.69 19ms
IVF+HNSW+PQ 65536 256 0.8141 0.9883 0.9884 468.35 33ms
IVF+HNSW+PQ 65536 512 0.8189 0.9961 0.9961 286.90 51ms
IVF+HNSW+PQ 65536 1024 0.8202 0.9989 0.9991 163.88 79ms
IVF+HNSW+OPQ 65536 1 0.2362 0.2469 0.2469 1022.10 13ms
IVF+HNSW+OPQ 65536 16 0.7035 0.7699 0.7699 839.90 15ms
IVF+HNSW+OPQ 65536 32 0.7776 0.8613 0.8613 798.20 15ms
IVF+HNSW+OPQ 65536 64 0.8294 0.9256 0.9256 724.68 17ms
IVF+HNSW+OPQ 65536 128 0.8581 0.9663 0.9663 590.12 20ms
IVF+HNSW+OPQ 65536 256 0.8727 0.9878 0.9878 427.82 28ms
IVF+HNSW+OPQ 65536 512 0.8788 0.9968 0.9968 281.12 50ms
IVF+HNSW+OPQ 65536 1024 0.8805 0.9995 0.9995 161.56 82ms

(5) vearch中模型性能对比

​ 使用的机器为配置1,SIFT1M数据,各模型的参数见表4、表14和表15。

​ 索引构建性能,目前IVFFLAT集成在IVFPQ中,故IVFFLAT跟IVFPQ的索引构建的性能是一样。

表18 建索引时间

模型 参数 时间 CPU使用率
HNSW nlinks=32,efConstruction=40 3m28s 78%
IVFPQ ncentriod=256,nsubvector=32 3m26s 100%
GPU ncentriod=256,nsubvector=32 4m22s 100%

图8 vearch中各模型性能对比

(6) Vearch和Faiss对比实验结果

表19 各模型使用的参数

model ncentroids of 1M ncentroids of 10M nprobe of 1M nprobe of 10M nsubvector links efSearch efConstruction
pq 64
ivfpq 1024 2048 40 80 64
imipq 2^(2*10) 2^(2*10) 2048 2048 64
opq+pq 64
hnsw 32 64 40
ivfhnsw 1024 2048 40 80 32 64 40
Vearch 1024 2048 40 80 64

表20 VGG1M数据的召回

model recall@1 recall@10 recall@100
pq 0.5134 0.9003 0.9939
ivfpq 0.5234 0.8916 0.9707
imipq 0.5185 0.8837 0.9420
opq+pq 0.5269 0.9211 0.9986
hnsw 0.9515 0.9563 0.9563
ivfhnsw 0.9652 0.9704 0.9705
Vearch 0.9651 0.9702 0.9703

表21 SIFT1M数据的召回

model recall@1 recall@10 recall@100
pq 0.8288 0.9999 1
ivfpq 0.8201 0.9899 0.9901
imipq 0.8344 0.9834 0.9834
opq+pq 0.8234 0.9998 1
hnsw 0.9795 0.9872 0.9872
ivfhnsw 0.9825 0.9896 0.9896
Vearch 0.9814 0.9902 0.9902

表22 VGG10M数据的召回

model recall@1 recall@10 recall@100
pq 0.5957 0.9009 0.9906
ivfpq 0.6068 0.9014 0.9833
imipq 0.6023 0.8955 0.9605
opq+pq 0.6102 0.9223 0.9954
hnsw 0.8847 0.9045 0.905
ivfhnsw 0.9617 0.9825 0.9829
Vearch 0.9649 0.9829 0.9832

表23 SIFT10M数据的召回

model recall@1 recall@10 recall@100
pq 0.7237 0.9976 1
ivfpq 0.7189 0.9794 0.9811
imipq 0.7 0.9086 0.9091
opq+pq 0.7512 0.9988 1
hnsw 0.8425 0.8426 0.8426
ivfhnsw 0.9625 0.9626 0.9626
Vearch 0.977 0.9774 0.9774
Clone this wiki locally