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 使用量。向量在索引过程中自动进行量化,无需额外文件、培训或后台任务。
配置选项
以下是创建表时可用的选项:
Setting | Purpose |
---|---|
quantization='8bit' | 4× 更小的向量,近零召回损失 |
quantization='1bit' | 32× 更小的向量,非对称量化(见下文)以获得更好的准确性 |
quantization='1bitsimple' | 32× 更小,最快但稍微 menos 准确 |
非对称量化说明:
非对称量化意味着查询向量和存储向量使用不同的量化级别。具体来说,查询向量被量化为 4 位,而存储在 HNSW 索引中的向量被量化为 1 位。在搜索过程中,计算 4 位查询向量和 1 位存储向量之间的距离。该方法提供的精度高于更简单的方法,尽管会带来一些性能权衡。
查询选项
您还可以在运行查询时调整过采样和重新评分:
Setting | Purpose |
---|---|
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 向量
- 批量大小 = 10,000
- 并发 = 5 用于索引
- 用于搜索的可变线程。
1. 索引速度
向量量化通过减少 HNSW 图构建过程中距离计算的计算开销显著加速了索引过程。我们的基准测试显示 throughput 和 latency 都得到了显著改善。
Metric | Quantized | Full-precision | Improvement |
---|---|---|---|
Docs/s | 3,890 | 1,776 | 2.2× |
Avg latency | 13.5s | 29.6s | 2.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