Centauri是Proxima CE的前身。本文为您介绍Centauri在不同场景下的性能表现。
1亿*1亿 BINARY512
doc表与query表数据量均为1亿,数据类型为BINARY,维度为512,手动指定50行,4列检索。
测试结论
CE哈希分片相较Centauri性能提升约20%左右。
- | Kmeans耗时(秒) | AutoTuning耗时(秒) | Build耗时(秒) | Seek耗时(秒) | 总时间(分钟) |
Centauri | - | 1524 | 12653 | 5914 | 336分钟 |
CE hash | - | - | 9647 | 6431 | 268分钟 |
Kmeans是Proxima CE聚类分片特有的一个阶段,用于获取原始doc表的聚类中心点表。AutoTuning是Centauri特有的阶段,用于计算索引算法的参数。Build为索引构建阶段。Seek为检索阶段。
测试过程
Build比较。
Centauri
CE hash
结果分析:Centauri一个build节点特别快,剩余三个耗时差不多。CE hash两个相对快,两个相对慢。
Seek比较。
Centauri
CE hash
结果分析:
索引seek部分耗时接近。
结果merge部分:CE hash比Centauri多12分钟左右。
CE hash最快8分钟,最慢20分钟。
Centauri最快4分钟,最慢9分钟。
运行详情。
Centauri
向量检索 数据类型:binary , 向量维度:512 , 检索方式:graph , 计算方法:hamming , 构建模式build:seek doc表信息 表名: doc_table_pailitao_binary , 分区:20210712 , doc数量:100000000 , 向量分隔符:~ query表信息 表名: doc_table_pailitao_binary , 分区:20210712 , query数量:100000000 , 向量分隔符:~ 输出表信息 表名: output_table_pailitao_binary_centauri , 分区:20210712 行列信息 行数: 50 , 列数:4 , 每列索引doc数量:25000000 是否清楚Volume索引:false 是否进行Autotuning Normal训练参数和召回率:true 各个worker的耗时(单位:秒): worker:TmpDataTableJoinWorker , times:0 worker:TmpTableWorker , times:16 worker:CleanUpWorker , times:4 worker:AutotuningFastWorker , times:46 worker:RowColWorker , times:53 worker:SeekJobWorker , times:5914 worker:BuildJobWorker , times:12653 worker:AutotuningNormalWorker , times:1478 总耗时(单位:分钟):336 Top召回率 用户设置 train: top200:0.95 Top召回率 normal train: top200:98.061% Autotuning Fast Build Params: proxima.general.builder.memory_quota=0 proxima.graph.common.max_doc_cnt=27500000 proxima.general.builder.thread_count=15 proxima.hnsw.builder.efconstruction=400 proxima.graph.common.neighbor_cnt=100 Autotuning Normal Search Params: proxima.hnsw.searcher.ef=400 运行命令 jar -resources centauri-1.1.5.jar,libcentauri-1.1.5.so -classpath /data/jiliang.ljl/centauri_1.1.5/centauri-1.1.5.jar com.alibaba.proxima.CentauriRunner -proxima_version 1.1.5 -doc_table doc_table_pailitao_binary -doc_table_partition 20210712 -query_table doc_table_pailitao_binary -query_table_partition 20210712 -output_table output_table_pailitao_binary_centauri -output_table_partition 20210712 -data_type binary -dimension 512 -app_id 201220 -pk_type int64 -clean_build_volume false -distance_method hamming -binary_to_int true -row_num 50 -column_num 4;
CE hash
向量检索 数据类型:1 , 向量维度:512 , 检索方式:hnsw , 计算方法:Hamming , 构建模式build:seek doc表信息 表名: doc_table_pailitao_binary2 , 分区:20210712 , doc数量:100000000 , 向量分隔符:~ query表信息 表名: doc_table_pailitao_binary2 , 分区:20210712 , query数量:100000000 , 向量分隔符:~ 输出表信息 表名: output_table_pailitao_binary_ce , 分区:20210712 行列信息 行数: 50 , 列数:4 , 每列索引doc数量:25000000 是否清除Volume索引:false 各个worker的耗时(单位:秒): SegmentationWorker: 2 TmpTableWorker: 1 KmeansGraphWorker: 0 BuildJobWorker: 9647 SeekJobWorker: 6431 TmpResultJoinWorker: 0 RecallWorker: 0 CleanUpWorker: 3 总耗时(单位:分钟):268 运行命令 jar -resources proxima_ce_g.jar -classpath /data/jiliang.ljl/project/proxima2-java/proxima-ce/target/binary/proxima-ce-0.1-SNAPSHOT-jar-with-dependencies.jar com.alibaba.proxima2.ce.ProximaCERunner -doc_table doc_table_pailitao_binary2 -doc_table_partition 20210712 -query_table doc_table_pailitao_binary2 -query_table_partition 20210712 -output_table output_table_pailitao_binary_ce -output_table_partition 20210712 -data_type binary -dimension 512 -app_id 201220 -pk_type int64 -clean_build_volume false -distance_method Hamming -binary_to_int true -row_num 50 -column_num 4;
10亿*10亿 FLOAT128
doc表与query表的数据量均为10亿,数据类型为FLOAT,维度为128,手动指定50行,60列。
测试结论
CE哈希方式相较Centauri性能提升30%左右,聚类分片方式相较Centauri性能提升2倍左右,seek部分提升7.5倍左右,INT8量化相较原始数据性能提升约10%。
测试方法 | 聚类/AutoTunning耗时(秒) | Build耗时(秒) | Seek耗时(秒) |
Centauri | 1220 | 9822 | 37245 |
CE 哈希 | 无 | 9841 | 23462 |
CE 哈希 + INT8量化 | 无 | 7600 | 21624 |
CE 聚类 | 1247 | 14404 | 5028 |
测试过程
build详情。
测试方法
Mapper
Build Reducer
总耗时(秒)
Centauri
-
-
-
CE 哈希
00:01:23.116
Latency:{min:00:00:03, avg:00:00:23, max:00:01:00}
02:41:43.563
Latency:{min:00:02:40, avg:01:32:33, max:02:41:33}
9841
CE 哈希 + INT8量化
00:01:36.166
Latency:{min:00:00:09, avg:00:00:25, max:00:01:09}
02:04:11.440
Latency:{min:00:06:56, avg:01:06:06, max:02:03:53}
7600
CE 聚类
00:15:33.022
Latency:{min:00:00:03, avg:00:03:24, max:00:15:21}
03:43:37.529
Latency:{min:00:03:57, avg:01:33:32, max:03:43:35}
14404
seek详情。
测试方法
Mapper
Topn Reducer
Merge Reducer
总耗时(秒)
问题/备注
Centauri
00:15:45.000
34秒-11分钟之间
08:33:50.000
98分钟-489分钟之间
01:30:20.000
30分钟-70分钟之间
37245
reducer打完日志后30-40分钟后结束。
mapper/topn/merge的单节点运行时间是另外一次logview的。
CE 哈希
00:06:29.791
Latency:{min:00:00:02, avg:00:01:39, max:00:05:56}
04:50:42.422
Latency:{min:00:01:48, avg:01:54:33, max:03:47:54}
04:50:42.422
Latency:{min:00:00:35, avg:00:33:39, max:01:32:16}
23462
mapper和merge reducer总耗时和max差不多,接近理想,只受长尾影响。
topn reducer最后结束的两个节点因为FO启动比较晚,忽略这两个节点的话总时间还能减少一小时。
CE 哈希 + INT8量化
00:06:25.718
Latency:{min:00:00:17, avg:00:01:27, max:00:06:02}
03:58:00.566
Latency:{min:00:00:25, avg:01:06:41, max:02:40:07}
01:54:35.620
Latency:{min:00:01:56, avg:00:20:54, max:01:39:55}
21624
无
CE 聚类
00:23:51.623
Latency:{min:00:00:04, avg:00:03:01, max:00:08:34}
01:00:38.382
Latency:{min:00:05:15, avg:00:18:00, max:01:00:10}
00:12:39.341
Latency:{min:00:00:31, avg:00:07:08, max:00:12:33}
5028
无
16亿*16亿 FLOAT128 聚类分片
doc表与query表的数据量均为16亿,数据类型为FLOAT,维度为128,自动计算行列。
16亿*16亿数据集规模过大,只有CE的聚类分片方式可以成功运行,以下为基本运行数据信息。
测试方法 | 聚类/AutoTunning耗时(秒) | Build耗时(秒) | Seek耗时(秒) |
Centauri | 1127 | 19962 | 跑了两次均失败,OOM。 |
CE 哈希 | 无 | 14637 | 跑了一次均失败,超出临时表限制。 |
CE 聚类 | 5478 | 17911 | 6801 |