Zvec Logo

HNSW-RaBitQ 索引

HNSW + RaBitQ 量化

一种先进的基于图的索引,将 HNSW 图结构与 RaBitQ 量化算法相结合 — 在保持一流搜索质量的同时大幅降低内存使用

平台要求:HNSW-RaBitQ 目前仅支持 x86_64 平台,且需要 AVX2 或更高指令集。不支持 ARM 架构。

工作原理

HNSW-RaBitQ 结合两项技术实现高 Recall 和低内存占用:

  • HNSW 图用于导航 🪜
    • 与标准 HNSW 索引相同的多层图结构 — 上层稀疏用于快速远距离跳转,下层密集用于细粒度局部搜索。
  • RaBitQ 用于距离估计 🔍
    • RaBitQ 先对向量进行随机旋转,然后将其转换为二进制编码(0 和 1)。这种方法允许系统通过高效的位运算来估计距离,与处理全精度数值相比,显著降低了内存使用和计算成本

何时使用 HNSW-RaBitQ?

  • ✅ 需要快速搜索、高 Recall 且内存预算可控的生产系统
  • ✅ 超大规模高维数据集 — 十亿级 1536+ 维向量在 FP32 格式下会消耗 TB 级内存
  • ✅ 运行在支持 AVX2/AVX-512 的 x86_64 服务器上的工作负载

最佳实践:当你希望获得 HNSW 级别的搜索质量而无需承担高内存开销时,使用 HNSW-RaBitQ。

total_bits 参数控制精度-内存的权衡。根据论文,在特定数据集上,7 位可达约 99% Recall,5 位约 95%,4 位约 90%。最低可使用 1 位以最大化压缩,但会降低 Recall。

优势

  1. 大幅降低内存 — 量化后的向量最多比 FP32 小 32 倍,减少活跃索引大小
  2. 高效距离估计 — RaBitQ 支持基于位运算的高效相似度计算
  3. 无需重排序即可获得出色 Recall — 图构建使用原始向量,保持图质量;RaBitQ 提供渐近最优的误差界,确保排序可靠

权衡

  1. ⚠️ 仅支持 x86_64 — 需要 AVX2 或 AVX-512;不支持 ARM
  2. ⚠️ 训练开销 — 索引构建前需要 KMeans 训练步骤,增加构建时间
  3. ⚠️ 维度限制 — 仅支持 64 到 4095 维之间的向量

关键参数

调参建议: 从默认值开始(total_bits=7num_clusters=16)。先调整查询时的 ef 来权衡 Recall 和延迟。仅在需要进一步降低内存且可接受稍低 Recall 时减小 total_bits

索引时参数

参数描述调参指南
metric_type用于比较向量的相似度度量根据 Embedding 模型的训练方式选择
m每个节点的最大邻居数 — 图构建过程中为每个节点创建的最大双向链接数• 更大的 m
✨ 更好的 Recall 和图连通性
⚠️ 更多内存使用,索引和搜索延迟更高
ef_construction索引时候选池大小 — 插入新向量时算法考虑的候选邻居数• 更大的 ef_construction
✨ 更好的图质量和更高的 Recall
⚠️ 更长的索引构建时间(不影响查询速度
total_bitsRaBitQ 每维量化位数 — 控制二进制编码精度控制精度-内存权衡。
更低的值节省更多内存但降低精度
num_clustersKMeans 聚类数 — 在 RaBitQ 训练阶段用于划分向量空间• 更多聚类可捕获更精细的分布模式
• 更高的值可略微提升 Recall
sample_count训练样本数 — KMeans 训练采样的向量数量(0 = 使用全部向量)默认为 0。在超大数据集上设置较小的值(如 5,000,000)可加速训练并减少内存使用

查询时参数

参数描述调参指南
ef查询时候选池大小 — 查询时图遍历每步探索的候选邻居数• 更大的 ef
✨ 更高的 Recall
⚠️ 更高的查询延迟
radius距离(相似度)阈值,用于范围过滤 — 仅返回满足阈值的 Document示例:
• 使用内积 MetricType.IP 时,设置 radius=0.6 仅保留分数 > 0.6 的结果
✅ 适用于:过滤低质量匹配
🚫 不适用于:需要全部 top-k 结果时
is_linear强制使用暴力线性搜索而非索引🐌 大数据集下非常慢!
✅ 仅用于:调试、小型 collection 或验证索引准确度
is_using_refiner启用精确分数精化 — 量化搜索后对候选结果重新计算精确 FP32 距离✅ 开启:需要最高精度时
⚠️ 因全精度重新评分会增加延迟

目录