Centauri对比

更新时间:
复制为 MD 格式

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 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比较。

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