doc表和query表的数据量均为2000W条,数据类型为FLOAT,维度为512。对比在哈希分片方式下,INT8量化对整体性能的影响。
测试结论
INT8量化对整体性能提升在10%左右,具体数据如下:
|
- |
Build耗时(秒) |
Seek耗时(秒) |
总时间(分钟) |
|
CE hash |
17811 |
8298 |
435分钟 |
|
CE hash with int8 quantize |
19730 |
3699 |
390分钟 |
由于2000W*2000W条数据跑线性结果时间过长,此处使用100W条数据进行测试,doc表得到的召回如下:
Recall@1表示TopK为1时doc表的召回率,Recall@50、Recall@100、Recall@200以此类推。
|
Recall@1 |
Recall@50 |
Recall@100 |
Recall@200 |
|
0.987 |
0.990 |
0.990 |
0.991 |
测试过程
-
Build比较。
-
CE hash
在 Fuxi Jobs 监控界面中,作业 LOT_0_0_0_job0 包含两个 Fuxi Task:M1(0/63/63,Latency 00:01:54)和 R2_1(0/2/2,Latency 04:54:17),均为 Terminated 状态、进度 100%。展开 R2_1 的实例详情,Latency 统计为 min:04:07:37, avg:04:21:59, max:04:36:22。两个实例 R2_1#1_0 和 R2_1#0_0 均已 Terminated,I/O Bytes 均为 8.8 GB/0 B,Latency 分别为 04:07:37.000 和 04:36:22.000。
-
CE hash with INT8 quantize
MaxCompute Logview 显示作业
LOT_0_0_0_job0的 Fuxi Task 执行详情。任务 M1 共 63 个实例,I/O Records 为 20.0 M/20.0 M,I/O Bytes 为 7.95 GB/17.59 GB,Latency 为 00:03:21。任务 R2_1 共 2 个实例,I/O Records 为 20.0 M/0,I/O Bytes 为 17.59 GB/0 B,Latency 为 05:24:54;实例延迟统计 min:05:19:36、avg:05:22:04、max:05:24:32,两个实例均已完成(Terminated,Progress 100%)。
结果分析:做INT8量化时,build阶段多30分钟左右。
-
-
Seek比较。
-
CE hash
Fuxi Jobs 作业监控界面显示 JobMaster Host 为
bd033019125250.ea118,作业 LOT_0_0_0_job0 包含三个子任务:M1(0/63/63,进度 100%,延迟 00:02:15.000)、R2_1(0/50/50 +1 backups,I/O Record 40.0 M/8.0 G,进度 98%,延迟 02:02:11.000)、R3_2(0/75/75 +5 backups,进度 93%,延迟 00:13:28.000),三个任务状态均为 Terminated。 -
CE hash with INT8 quantize
作业 LOT_0_0_0_job0 包含三个子任务:M1(0/63/63实例,进度100%,状态Terminated,耗时00:01:55)、R2_1(0/50/50实例,进度100%,状态Terminated,耗时00:51:43,I/O Record为40.0 M/8.0 G)、R3_2(0/75/75+3 backups实例,进度96%,状态Terminated,耗时00:07:16)。
结果分析:做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;
-