blog-post

在 Manticore Search 中引入向量量化

Manticore Search 13.2.3 在其 K 最近邻 ( KNN ) 引擎中引入了向量量化 (VQ)。这一新特性将 RAM 使用量减少了一个数量级,加快了索引速度,并且仍然能够匹配(甚至超过)全精度向量的搜索吞吐量。

下面您将找到关于 VQ 的简短介绍、实际示例以及我们使用 manticore-load 进行的基准测试 - Manticore Search 的官方负载测试工具。

什么是向量量化

向量通常以 32 位浮点数存储。
使用 VQ,每个分量被压缩为 8 位或 1 位。这将索引大小(因此 RAM)减少了 4 倍 - 32 倍,同时 SIMD 指令保持距离计算的快速。权衡是一个微小的近似误差,您可以通过过采样和重新评分来消除(见下文)。

启用 VQ

要在 Manticore Search 中启用向量量化 (VQ),您需要在表创建语句中添加 quantization 属性。该属性指定您希望应用于向量的量化级别。以下示例演示了如何创建一个启用 VQ 的表:

create table products (
  title text,
  vec float_vector knn_type='hnsw' knn_dims='512' hnsw_similarity='l2' quantization='1bit'
);

在此示例中,quantization='1bit' 属性将每个向量分量压缩为 1 位,显著减少了索引大小和 RAM 使用量。向量在索引期间自动量化,无需额外的文件、训练或后台任务。

配置选项

以下是创建表时可用的选项:

SettingPurpose
quantization='8bit'4× 更小的向量,几乎没有召回损失
quantization='1bit'32× 更小的向量,非对称量化(见下文)以获得更好的准确性
quantization='1bitsimple'32× 更小,最快 但稍微不那么准确

非对称量化说明:

非对称量化意味着查询向量和存储向量使用不同的量化级别。具体而言,查询向量量化为 4 位,而存储在 HNSW 索引中的向量量化为 1 位。在搜索过程中,计算 4 位查询向量和 1 位存储向量之间的距离。这种方法提供了比简单方法更高的精度,尽管它带来了一些性能权衡。

查询选项

您还可以在运行查询时调整过采样和重新评分:

SettingPurpose
oversampling=<float>使用量化向量获取 k × factor 候选项
rescore=1使用全精度向量重新计算距离并重新排序

为什么过采样 + 重新评分很重要

量化通过近似向量距离来加速搜索。这可能会引入微小的错误,特别是在 1 位压缩时,这可能会稍微影响召回。为了解决这个问题,您可以:

  • 使用过采样从量化索引中获取更多候选项
  • 使用重新评分使用原始全精度向量重新检查距离并重新排序它们

它们结合在一起为您提供全精度的准确性,同时享受量化向量的速度和内存优势。

这就是它在查询中的工作原理:

select *  
from products  
where knn(vec, 20, (<your 512-dim vector>), {oversampling = 3.0, rescore = 1});

💡 注意:过采样和重新评分在使用量化向量时最为有用。没有量化时,它们可能不会提高质量,但会减慢速度。

基准测试

测试环境:

  • 具有 16 个物理 CPU 核心(32 个虚拟核心)的服务器
  • 1 M 文档
  • 512 维 L2 向量
  • batch-size = 10 000
  • 索引并发 = 5
  • 搜索的可变线程。

1. 索引速度

向量量化通过减少 HNSW 图构建过程中距离计算的计算开销,显著加快了索引过程。我们的基准测试显示了吞吐量和延迟的显著改善。

MetricQuantizedFull-precisionImprovement
Docs/s3,8901,7762.2×
Avg latency13.5s29.6s2.2×
root@perf3 ~ # manticore-load --drop --wait --batch-size=10000 --threads=5 --total=1000000 --init="create table vq1 ( title text, vec float_vector knn_type='hnsw' knn_dims='512' hnsw_similarity='l2' quantization='1bit' )" --load="insert into vq1 values ( <increment>, '<text/1/2>', (<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>) )"

...

Total time:       04:17
Total queries:    100
Threads:          5
Batch size:       10000
Total docs:       1000000
Docs per sec avg: 3890
QPS avg:          5
QPS 1p:           0
QPS 5p:           0
QPS 95p:          7
QPS 99p:          7
Latency avg:      13460.8 ms
Latency 50p:      915.0 ms
Latency 95p:      99500.0 ms
Latency 99p:      99500.0 ms



root@perf3 ~ # manticore-load --drop --wait --batch-size=10000 --threads=5 --total=1000000 --init="create table v ( title text, vec float_vector knn_type='hnsw' knn_dims='512' hnsw_similarity='l2' )" --load="insert into v values ( <increment>, '<text/1/2>', (<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>) )"

...

Total time:       09:22
Total queries:    100
Threads:          5
Batch size:       10000
Total docs:       1000000
Docs per sec avg: 1776
QPS avg:          5
QPS 1p:           0
QPS 5p:           0
QPS 95p:          8
QPS 99p:          8
Latency avg:      29572.0 ms
Latency 50p:      885.0 ms
Latency 95p:      99500.0 ms
Latency 99p:      99500.0 ms

关键发现:

  • 吞吐量改善:量化索引每秒处理 3,890 个文档,而全精度为 1,776,代表 2.2× 的加速
  • 延迟减少:平均索引时间从 29.6 秒降至 13.5 秒(快 2.2×)
  • 一致的扩展性:两个指标显示出相同的改善比率,表明在不同工作负载特征下的稳定性能提升

2. RAM 占用

量化的一个显著优势是内存使用量的显著减少。在处理大规模向量搜索应用时,RAM 消耗可能是一个关键瓶颈,尤其是在云环境中,内存成本与使用量成线性关系。

索引大小

上面的图表展示了通过 1 位量化实现的显著内存效率。量化索引仅需 216 MB 的 RAM,而非量化版本则需 2,097 MB。这代表了 90% 的内存使用减少,使得在相同硬件上处理更大数据集成为可能,或显著降低基础设施成本。

root@perf3 ~ # ls -lah /var/lib/manticore/v/*.spknn /var/lib/manticore/vq1/*.spknn
-rw------- 1 manticore manticore  11M Jul 11 16:52 /var/lib/manticore/vq1/vq1.0.spknn
-rw------- 1 manticore manticore 6.5M Jul 11 16:51 /var/lib/manticore/vq1/vq1.1.spknn
-rw------- 1 manticore manticore  69M Jul 11 16:55 /var/lib/manticore/vq1/vq1.2.spknn
-rw------- 1 manticore manticore  11M Jul 11 16:52 /var/lib/manticore/vq1/vq1.3.spknn
-rw------- 1 manticore manticore  69M Jul 11 16:59 /var/lib/manticore/vq1/vq1.4.spknn
-rw------- 1 manticore manticore  11M Jul 11 16:56 /var/lib/manticore/vq1/vq1.5.spknn
-rw------- 1 manticore manticore  39M Jul 11 17:01 /var/lib/manticore/vq1/vq1.6.spknn

=11+6.5+69+11+69+11+39=216.5

-rw------- 1 manticore manticore 105M Jul 11 17:15 /var/lib/manticore/v/v.0.spknn
-rw------- 1 manticore manticore  21M Jul 11 17:14 /var/lib/manticore/v/v.1.spknn
-rw------- 1 manticore manticore 671M Jul 11 17:23 /var/lib/manticore/v/v.2.spknn
-rw------- 1 manticore manticore 105M Jul 11 17:15 /var/lib/manticore/v/v.3.spknn
-rw------- 1 manticore manticore 671M Jul 11 17:31 /var/lib/manticore/v/v.4.spknn
-rw------- 1 manticore manticore 105M Jul 11 17:24 /var/lib/manticore/v/v.5.spknn
-rw------- 1 manticore manticore 419M Jul 11 17:36 /var/lib/manticore/v/v.6.spknn

3. 搜索吞吐量(无过采样/重新评分)

搜索性能是量化真正闪光的地方。减少的内存占用和简化的距离计算直接转化为更高的查询吞吐量和更低的延迟。本节将考察没有任何额外提高准确性的技术的原始搜索性能。

QPS vs threads

manticore-load \
--threads=1,2,4,8,16,32,48,64 \
--quiet \
--total=30000 \
--load="SELECT * FROM vq1 WHERE KNN(vec, 20, (<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>))"

Threads ; Batch     ; Time        ; Total Ops   ; Avg QPS     ; p99 QPS     ; p95 QPS     ; p5 QPS      ; p1 QPS      ; Lat Avg     ; Lat p50     ; Lat p95     ; Lat p99     ;
1       ; 1         ; 01:53       ; 30000       ; 265         ; 266         ; 266         ; 265         ; 265         ; 3.8         ; 3.5         ; 3.5         ; 3.5         ;
2       ; 1         ; 00:59       ; 30000       ; 506         ; 517         ; 516         ; 498         ; 496         ; 4.0         ; 3.5         ; 6.5         ; 6.5         ;
4       ; 1         ; 00:31       ; 30000       ; 951         ; 968         ; 958         ; 940         ; 939         ; 4.2         ; 3.5         ; 6.5         ; 6.5         ;
8       ; 1         ; 00:17       ; 30000       ; 1733        ; 1748        ; 1748        ; 1715        ; 1715        ; 4.6         ; 4.5         ; 6.5         ; 6.5         ;
16      ; 1         ; 00:10       ; 30000       ; 2981        ; 2987        ; 2987        ; 2973        ; 2973        ; 5.4         ; 5.5         ; 6.5         ; 8.5         ;
32      ; 1         ; 00:06       ; 30000       ; 4306        ; 4343        ; 4343        ; 4250        ; 4250        ; 7.4         ; 7.5         ; 10.5        ; 13.5        ;
48      ; 1         ; 00:06       ; 30000       ; 4472        ; 4484        ; 4484        ; 4440        ; 4440        ; 10.7        ; 9.5         ; 12.5        ; 21.5        ;
64      ; 1         ; 00:06       ; 30000       ; 4445        ; 4471        ; 4471        ; 4406        ; 4406        ; 14.3        ; 13.5        ; 20.5        ; 52.5        ;


root@perf3 ~ # manticore-load --threads=1,2,4,8,16,32,48,64 --quiet --total=30000 --load="SELECT * FROM v WHERE KNN(vec, 20, (<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>))"

Threads ; Batch     ; Time        ; Total Ops   ; Avg QPS     ; p99 QPS     ; p95 QPS     ; p5 QPS      ; p1 QPS      ; Lat Avg     ; Lat p50     ; Lat p95     ; Lat p99     ;
1       ; 1         ; 02:03       ; 30000       ; 243         ; 243         ; 243         ; 242         ; 239         ; 4.1         ; 4.5         ; 4.5         ; 4.5         ;
2       ; 1         ; 01:17       ; 30000       ; 389         ; 432         ; 401         ; 377         ; 370         ; 5.1         ; 4.5         ; 7.5         ; 7.5         ;
4       ; 1         ; 00:37       ; 30000       ; 797         ; 815         ; 814         ; 780         ; 774         ; 5.0         ; 4.5         ; 7.5         ; 7.5         ;
8       ; 1         ; 00:21       ; 30000       ; 1401        ; 1417        ; 1414        ; 1386        ; 1383        ; 5.7         ; 5.5         ; 7.5         ; 8.5         ;
16      ; 1         ; 00:15       ; 30000       ; 1966        ; 2021        ; 2021        ; 1925        ; 1925        ; 8.1         ; 7.5         ; 11.5        ; 13.5        ;
32      ; 1         ; 00:13       ; 30000       ; 2245        ; 2287        ; 2287        ; 2188        ; 2188        ; 14.3        ; 14.5        ; 19.5        ; 24.5        ;
48      ; 1         ; 00:13       ; 30000       ; 2226        ; 2272        ; 2272        ; 2184        ; 2184        ; 21.6        ; 18.5        ; 35.5        ; 62.5        ;
64      ; 1         ; 00:13       ; 30000       ; 2218        ; 2267        ; 2267        ; 2171        ; 2171        ; 28.9        ; 23.5        ; 62.5        ; 135.0       ;

性能图表揭示了量化对搜索吞吐量影响的几个关键见解:

性能扩展分析

单线程性能:在1个线程下,两种配置的性能相似(265 vs 243 QPS),表明量化对基本操作没有引入显著的开销。

多线程的好处:随着线程数量的增加,量化索引显示出更优越的扩展特性:

  • 2个线程:506 vs 389 QPS(30% 改进)
  • 8个线程:1,733 vs 1,401 QPS(24% 改进)
  • 32个线程:4,306 vs 2,245 QPS(92% 改进)
  • 64个线程:4,445 vs 2,218 QPS(100% 改进)

饱和行为:量化索引在大约48个线程时达到其峰值性能(4,472 QPS),而非量化版本在32个线程时就达到平台期(2,245 QPS)。这表明量化减少了内存带宽争用(或CPU缓存争用),允许更好地利用额外的CPU核心。

在实际操作中,这转化为:

  • 在高并发下查询吞吐量提高至2倍
  • 延迟降低50%,例如,在32个线程下为7 ms vs 14 ms

4. 使用过采样 + 重新评分的搜索吞吐量

量化搜索可以非常快速,但要恢复接近全精度的召回率,可以启用过采样和重新评分。这意味着从紧凑的量化索引中获取更多候选项,然后使用原始全精度向量重新计算与查询向量的距离并重新排序结果。

以下是不同线程数量下的性能表现:

QPS (oversampling)

manticore-load \
--threads=1,2,4,8,16,32,48,64 \
--quiet \
--total=30000 \
--load="SELECT * FROM vq1 WHERE KNN(vec, 20, (<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>), {oversampling=3.0, rescore=1})"

Threads ; Batch     ; Time        ; Total Ops   ; Avg QPS     ; p99 QPS     ; p95 QPS     ; p5 QPS      ; p1 QPS      ; Lat Avg     ; Lat p50     ; Lat p95     ; Lat p99     ;
1       ; 1         ; 02:12       ; 30000       ; 226         ; 227         ; 227         ; 226         ; 226         ; 4.4         ; 4.5         ; 4.5         ; 4.5         ;
2       ; 1         ; 01:10       ; 30000       ; 426         ; 440         ; 439         ; 416         ; 412         ; 4.7         ; 4.5         ; 7.5         ; 7.5         ;
4       ; 1         ; 00:37       ; 30000       ; 807         ; 819         ; 815         ; 795         ; 794         ; 5.0         ; 4.5         ; 7.5         ; 7.5         ;
8       ; 1         ; 00:20       ; 30000       ; 1461        ; 1473        ; 1472        ; 1447        ; 1447        ; 5.5         ; 5.5         ; 7.5         ; 7.5         ;
16      ; 1         ; 00:12       ; 30000       ; 2369        ; 2404        ; 2404        ; 2346        ; 2346        ; 6.8         ; 6.5         ; 9.5         ; 10.5        ;
32      ; 1         ; 00:09       ; 30000       ; 3217        ; 3261        ; 3261        ; 3186        ; 3186        ; 10.0        ; 9.5         ; 12.5        ; 17.5        ;
48      ; 1         ; 00:09       ; 30000       ; 3275        ; 3340        ; 3340        ; 3158        ; 3158        ; 14.7        ; 13.5        ; 21.5        ; 39.5        ;
64      ; 1         ; 00:09       ; 30000       ; 3286        ; 3352        ; 3352        ; 3242        ; 3242        ; 19.5        ; 17.5        ; 30.5        ; 73.5        ;


manticore-load \
--threads=1,2,4,8,16,32,48,64 \
--quiet \
--total=30000 \
--load="SELECT * FROM v WHERE KNN(vec, 20, (<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>,<float/0/1>), {oversampling=3.0, rescore=1})"

Threads ; Batch     ; Time        ; Total Ops   ; Avg QPS     ; p99 QPS     ; p95 QPS     ; p5 QPS      ; p1 QPS      ; Lat Avg     ; Lat p50     ; Lat p95     ; Lat p99     ;
1       ; 1         ; 02:39       ; 30000       ; 188         ; 189         ; 189         ; 188         ; 188         ; 5.3         ; 5.5         ; 5.5         ; 5.5         ;
2       ; 1         ; 01:46       ; 30000       ; 281         ; 292         ; 287         ; 275         ; 272         ; 7.1         ; 6.5         ; 9.5         ; 9.5         ;
4       ; 1         ; 00:57       ; 30000       ; 519         ; 547         ; 535         ; 507         ; 505         ; 7.7         ; 7.5         ; 10.5        ; 11.5        ;
8       ; 1         ; 00:38       ; 30000       ; 777         ; 795         ; 790         ; 767         ; 764         ; 10.3        ; 10.5        ; 13.5        ; 14.5        ;
16      ; 1         ; 00:34       ; 30000       ; 859         ; 865         ; 863         ; 854         ; 854         ; 18.6        ; 17.5        ; 30.5        ; 33.5        ;
32      ; 1         ; 00:34       ; 30000       ; 863         ; 876         ; 872         ; 856         ; 855         ; 37.1        ; 37.5        ; 44.5        ; 50.5        ;
48      ; 1         ; 00:33       ; 30000       ; 905         ; 940         ; 936         ; 883         ; 881         ; 53.1        ; 50.5        ; 67.5        ; 92.5        ;
64      ; 1         ; 00:32       ; 30000       ; 918         ; 970         ; 952         ; 886         ; 883         ; 68.9        ; 62.5        ; 79.5        ; 91.5        ;

尽管增加了重新评分步骤,量化向量在高并发下仍然实现了3–4倍更高的QPS,相比于具有相同选项的全精度向量。

5. 过采样和重新评分的影响

那么,为了获得全精度的召回率,你牺牲了多少性能?以下是使用过采样和重新评分在32个线程下的QPS情况。

性能影响(32个线程下的QPS)

配置每秒查询数
量化(1位)4306
量化 + 过采样/重新评分3217
全精度2245
全精度 + 过采样/重新评分 ⚠️863

⚠️ 过采样和重新评分不会改善全精度向量的结果——并且会降低速度。

QPS impact with rescore

所有测试均使用manticore‑load运行。你可以在几分钟内重现它们或创建自己的场景。

结论

Manticore Search 13.2.3中的向量量化提供了速度、效率和准确性的强大平衡。它不需要复杂的设置,提供即时的好处,并且足够灵活以适应广泛的现实世界用例——从内存受限的部署到高吞吐量的搜索系统。

  • 一个选项——quantization='1bit'——带来了重大收益。它将HNSW索引大小减少了高达90%,大幅降低了RAM使用,并提高了整体系统效率。
  • 索引速度提高了高达2倍,因为量化向量简化并加速了HNSW图构建过程中的距离计算。
  • 搜索吞吐量提高了多达4倍,尤其是在高并发情况下。量化索引在多个CPU核心之间的扩展性更好,并显著降低了延迟。
  • 你仍然可以通过启用oversamplingrescore获得接近全精度的准确性。这些选项在需要的地方选择性地应用全精度检查,对性能的影响仅为微小。
  • 量化旨在易于采用——无需模型训练,无需预处理,只需在表创建时设置一个标志。
  • 升级到Manticore Search 13.2.3并启用量化是一种低成本、高影响的优化。你将减少内存占用,加快索引速度,并在每个核心上处理更多查询——同时保持准确性。

无论你是在为高流量的产品目录构建搜索,还是在优化一个基于向量的聊天机器人,量化都可以帮助你更快、更智能地扩展——而不牺牲相关性。

安装Manticore Search

安装Manticore Search