doc表和query表的数据量均为2000W,数据类型为FLOAT,维度为512。对比在哈希分片方式下,INT8量化对整体性能的影响。

测试结论

INT8量化对整体性能提升在10%左右,具体数据如下:
-Build耗时(秒)Seek耗时(秒)总时间(分钟)
CE hash178118298435分钟
CE hash with int8 quantize197303699390分钟
由于2000W*2000W数据跑线性结果时间过长,因此此处使用100W数据,doc表得到的召回如下:
说明 Recall@1表示TopK为1时doc表的召回率,Recall@50、Recall@100、Recall@200以此类推。
Recall@1Recall@50Recall@100Recall@200
0.9870.9900.9900.991

测试过程

  • Build比较。
    • CE hashce hash
    • CE hash with INT8 quantizeCE hash with int8 quantize

    结果分析:做INT8量化时,build阶段多30分钟左右。

  • Seek比较。
    • CE hashce hash
    • CE hash with INT8 quantizeCE hash with int8 quantize

    结果分析:做INT8量化时,seek部分(主要是图中的 R2_1阶段)快出69分钟左右。具体为:CE hash 最快37分钟,最慢120分钟;CE hash INT8量化最快16分钟,最慢51分钟。

  • 运行详情。
    • CE hash
      向量检索  数据类型:4 , 向量维度:512 , 检索方式:hnsw , 计算方法:SquaredEuclidean , 构建模式:train:build:seek
      doc表信息 表名: doc_table_pailitao2 , 分区:20210707 , doc数量:19990000 , 向量分隔符:
      query表信息 表名: doc_table_pailitao2 , 分区:20210707 , query数量:19990000 , 向量分隔符:
      输出表信息 表名: output_table_pailitao_ce , 分区:20210707
      行列信息  行数: 25 , 列数:2 , 每列索引doc数量:9995000
      是否清除Volume索引:true
      
      各个worker的耗时(单位:秒):
         SegmentationWorker:          1
         TmpTableWorker:              1
         KmeansGraphWorker:           0
         BuildJobWorker:              17811
         SeekJobWorker:               8298
         TmpResultJoinWorker:         0
         RecallWorker:                0
         CleanUpWorker:               3
      总耗时(单位:分钟):435
      
      运行命令
      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_pailitao2 -doc_table_partition 20210707
      -query_table doc_table_pailitao2 -query_table_partition 20210707
      -output_table output_table_pailitao_ce -output_table_partition 20210707
      -data_type float -dimension 512 -app_id 201220 -vector_separator blank
      -pk_type int64 -row_num 25 -column_num 2;
    • CE hash with INT8 quantize
      向量检索  数据类型:4 , 向量维度:512 , 检索方式:hnsw , 计算方法:SquaredEuclidean , 构建模式:train:build:seek
      doc表信息 表名: doc_table_pailitao2 , 分区:20210707 , doc数量:19990000 , 向量分隔符:
      query表信息 表名: doc_table_pailitao2 , 分区:20210707 , query数量:19990000 , 向量分隔符:
      输出表信息 表名: output_table_pailitao_ce , 分区:20210707
      行列信息  行数: 25 , 列数:2 , 每列索引doc数量:9995000
      是否清除Volume索引:true
      
      各个worker的耗时(单位:秒):
         SegmentationWorker:          2
         TmpTableWorker:              0
         KmeansGraphWorker:           0
         BuildJobWorker:              19730
         SeekJobWorker:               3699
         TmpResultJoinWorker:         0
         RecallWorker:                0
         CleanUpWorker:               1
      总耗时(单位:分钟):390
      
      运行命令
      jar -resources proxima_ce_g.jar -classpath /data/jiliang.ljl/project/proxima2-java/proxima-ce/target/javacpp156/proxima-ce-0.1-SNAPSHOT-jar-with-dependencies.jar  com.alibaba.proxima2.ce.ProximaCERunner
      -doc_table doc_table_pailitao2 -doc_table_partition 20210707
      -query_table doc_table_pailitao2 -query_table_partition 20210707
      -output_table output_table_pailitao_ce -output_table_partition 20210707
      -data_type float -dimension 512 -app_id 201220 -vector_separator blank
      -pk_type int64 -row_num 25 -column_num 2 -converter Int8QuantizerConverter;