Centauri对比

CentauriProxima 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分钟

说明

KmeansProxima CE聚类分片特有的一个阶段,用于获取原始doc表的聚类中心点表。AutoTuningCentauri特有的阶段,用于计算索引算法的参数。Build为索引构建阶段。Seek为检索阶段。

测试过程

  • Build比较。

    • Centauri Centauri

    • CE hashCE hash

    结果分析:Centauri一个build节点特别快,剩余三个耗时差不多。CE hash两个相对快,两个相对慢。

  • Seek比较。

    • CentauriCentauri

    • CE hashCE hash

    结果分析:

    • 索引seek部分耗时接近。

    • 结果merge部分:CE hashCentauri12分钟左右。

      • 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

    • mappermerge 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