忘记密码?
其他方式登录

Milvus HNSW 量化索引选型指南:从 SQ、PQ、PRQ 到 Refine 实测

2026年9月9日

详细介绍

在 Milvus 里,HNSW 通常用于追求较高 Recall 的向量检索。

理解 HNSW 系列索引的关键,是区分图搜索框架、向量表示和候选重排三个概念。

图 1:Milvus 中的 HNSW 系列索引:它们共享 HNSW 的算法框架,但向量压缩表示会参与建图和距离计算,因此实际图拓扑不保证与 FP32 HNSW 完全一致。

HNSW 将向量组织成多层小世界图。查询从稀疏的高层入口开始,通过贪心遍历快速接近目标区域,再逐层下降到最底层扩展候选。M、efConstruction 和 ef 分别控制图的连接密度、建图阶段的候选宽度以及查询阶段的搜索宽度:

Milvus HNSW 量化索引选型指南:从 SQ、PQ、PRQ 到 Refine 实测

HNSW_SQ 使用 Scalar Quantization。SQ8 和 SQ6 分别以 8 bit 和 6 bit 表示每个维度,并为各维度独立估计量化范围。SQ4U 从 Milvus 2.6.8 开始提供,它使用全局共享的均匀量化参数,将每个值编码为 4 bit 无符号整数。SQ4U 更适合已经归一化或各维数值分布较一致的数据;其性能收益也更依赖内存带宽、缓存效率和 SIMD 能力。

图 3:SQ、PQ 与 PRQ 的量化粒度及本次实验的理论编码长度

量化索引可以通过 refine=true 参数启用候选重排。Milvus 先使用基础量化表示执行 HNSW 搜索,随后使用 refine_type 指定的更高精度向量表示,对扩大后的候选集重新计算距离并排序。refine_type 的精度必须高于基础量化类型,可选值包括 SQ6、SQ8、BF16、FP16 和 FP32;其中只有 FP32 属于全精度重排,其余类型仍会有相应的表示误差。在 Milvus 2.6.x 中,refine_type 必须采用比基础 sq_type 更高精度的表示。常见的精度升级方向如下:

图 4:Refinement 流程:量化 HNSW 负责候选召回,refine_k 控制候选放大倍数,refine_type 决定重排使用的向量精度。

本次实验使用统一的数据集和测试指标,对 HNSW 系列索引进行横向比较。除主测试结果外,还覆盖 SQ 量化位宽、ef、refine_k、refine_type 以及等召回率选点,用于分析不同配置在召回率、吞吐、延迟、运行时内存和索引构建产物大小之间的工程取舍。

实验围绕两个核心问题展开:第一,量化表示能够带来多少内存与吞吐收益;第二,当召回率下降时,应通过增大 ef、启用 refinement,还是更换量化策略来恢复结果质量。第三章按照以下实验矩阵组织结果。

Milvus HNSW 量化索引选型指南:从 SQ、PQ、PRQ 到 Refine 实测

主表固定查询阶段的搜索宽度为 ef=256;启用 refinement 的配置统一使用 refine_k=4。固定 ef 只保证图搜索宽度一致,并不代表总计算成本相同,因为 refinement 还会扩大候选集并执行更高精度的重排。整体测试结果如下:

该组实验比较 SQ8、SQ6 和 SQ4U 在未启用 refinement 时,形成的压缩梯度,并进一步对比以 FP32 和 SQ8 作为 refine_type 时的结果。

在固定 ef=256 的条件下,分别测试 refine_k=1/2/4/8的Recall和QPS,结果如下图所示:

图 5:SQ + refine_type=FP32:Recall@100 随 refine_k 的变化。

图 6:SQ + refine_type=FP32:峰值 QPS 随 refine_k 的变化。

在固定 ef=256、refine_k=4 的条件下,对比 refine_type=FP32 与 refine_type=SQ8。

为比较相近结果质量下的资源成本,选取以下 Recall@100 接近的实测配置:

Milvus HNSW 量化索引选型指南:从 SQ、PQ、PRQ 到 Refine 实测

图 7:峰值 QPS 随 ef 的变化。

Milvus HNSW 量化索引选型指南:从 SQ、PQ、PRQ 到 Refine 实测

图 8:Recall@100 随 refine_k 的变化。

图 9:峰值 QPS 随 refine_k 的变化。

固定 ef=256,选取各类索引中 Recall@100 最接近 0.98 的实测配置。

Milvus HNSW 量化索引选型指南:从 SQ、PQ、PRQ 到 Refine 实测

以下表格配置仅作为本次 Cohere 1M 测试的评估参考,不代表适用于所有数据集和硬件环境的固定默认值。实际决策仍需结合目标向量分布、TopK、过滤条件、并发模型和硬件重新验证。

当内存允许,并且目标是建立无量化索引参考线,应先使用 HNSW FP32 扫描 ef。这能够给出当前 M、efConstruction 和数据分布下的召回率—延迟基线。

在本次 Cohere 1M 测试中,SQ8(未启用 refinement) 的 Recall@100 为 0.9761,峰值 QPS 为 793.1,加载后容器内存增量约为 HNSW FP32 的 31.3%。因此,它可以作为评估量化索引时的首选基线配置。

本次 PQ 的理论编码长度为 96 bytes/vector,PRQ 约为 192 bytes/vector,二者的压缩强度都显著高于 SQ8。对应的加载后容器内存增量 分别约为 446 MB 和 516 MB,但 Recall@100 分别为 0.6083 和 0.7869。

联系方式

赞赏支持

累计赞赏 0 积分 0 人支持
登录后赞赏

💬 发表评论