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 Fuxi Jobs 监控界面显示作业 LOT_0_0_0_job0 包含两个 Fuxi Task:M1(121 个实例,全部 Terminated,Latency 00:00:51)和 R2_1(4 个实例,全部 Terminated,Latency 03:29:29)。R2_1 的 4 个实例 Latency 统计为 min:01:29:07、avg:02:58:52、max:03:29:04,其中 3 个实例存在约 3.5 小时的高延迟(分别为 03:29:04、03:29:02、03:28:18),仅 1 个实例延迟为 01:29:07。
-
CE hash:MaxCompute Fuxi 任务执行监控面板显示两个任务:M1(61 个实例,全部 Terminated,Latency 00:01:00)和 R2_1(4 个实例,全部 Terminated,Latency 02:39:08)。R2_1 的 4 个实例延迟分布为 min 02:01:23、avg 02:19:53、max 02:38:43,Start Time 约 2021/07/27 21:31,End Time 分布在 2021/07/27 23:32 至 2021/07/28 00:10,Rerun 均为 0,Worker Type 均为 Normal。
结果分析:Centauri一个build节点特别快,剩余三个耗时差不多。CE hash两个相对快,两个相对慢。
-
-
Seek比较。
-
Centauri在 LOT_0_0_0_job0 作业监控表格中,三个 Fuxi Task 的执行情况:M1(0/121/121,I/O Record 100.0 M/400.0 M,I/O Bytes 7.56 GB/27.08 GB,Terminated,进度100%,延迟00:03:31);R2_1(0/300/300+5 backups,I/O Record 400.0 M/400.0 M,I/O Bytes 27.08 GB/801.65 GB,Terminated,进度100%,延迟01:24:46);R3_2(0/300/300+5 backups,I/O Record 400.0 M/20.0 G,I/O Bytes 801.65 GB/71.59 GB,Terminated,进度98%,延迟00:09:37,I/O Record 列存在异常标记)。所有任务运行时间在 2021/07/28,其中 R3_2 进度未达100%且 I/O 存在异常。
-
CE hash 测试过程中,三个 Fuxi Task 均已执行完成:M1(0/61/61,I/O Record 100.0 M/400.0 M,I/O Bytes 7.59 GB/27.08 GB,进度 100%,Latency 00:04:01);R2_1(0/200/200 +2 backups,I/O Record 400.0 M/80.0 G,I/O Bytes 27.08 GB/645.54 GB,进度 99%,Latency 01:21:20);R3_2(0/300/300 +5 backups,I/O Record 80.0 G/20.0 G,I/O Bytes 645.54 GB/71.59 GB,进度 98%,Latency 00:20:59)。所有任务状态均为 Terminated,无失败任务。
结果分析:
-
索引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 |