news 2026/5/4 23:46:41

高效索引之HNSW_SQ:如何同时兼顾RAG的速度、召回率与成本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
高效索引之HNSW_SQ:如何同时兼顾RAG的速度、召回率与成本

在RAG在内的高维向量检索场景里,我们常常会陷入一个不可能三角:

硬件不变的情况下,想要更快的查询速度,就得牺牲一部分召回率;如果想要召回率与速度同时兼顾,就得增加硬件预算……

那么,有没有一种方法能打破这个僵局?最新的Milvus能力升级中,给出了答案:HNSW_SQ索引。

通过把HNSW的高效检索能力,和标量量化(SQ)的极致压缩特性结合,做到了性能、速度与成本的同时兼顾。

而与标准HNSW相比,HNSW_SQ最大的不足可能就是保证召回率的同时,索引构建时间会略有增加。

01

HNSW与SQ是什么

解读HNSW_SQ之前,我们需要先对HNSW与SQ这两个底层技术有一个基础的认知。

先说说HNSW。它的核心是构建一个多层图结构,数据集中的每个向量对应图里的一个节点。节点之间会根据向量相似度建立连接,搜索的时候,算法可以从上层稀疏的图快速定位到下层密集的图中的区域,大大缩小需要遍历的范围,这也是它能实现高速检索、高召回的关键。

但光有HNSW还不够,面对海量高维向量,内存开销依然是个大问题。这时候就轮到标量量化(SQ)登场了。

SQ的原理很简单,就是用更少的比特数来表示向量里的浮点数值,从而实现数据压缩。

比如常见的SQ8用8比特,能把数值映射到256个等级;SQ6用6比特,对应64个等级。压缩后的向量体积大幅减小,不仅能降低内存占用,还能加快数据传输和计算的速度。

当然,压缩会带来一点精度损失,但只要控制得当,这种损失完全在可接受范围内。

此外,对于那些追求极致速度和极小内存的场景,Milvus 2.6.8及以上版本还推出了更极致的量化技术SQ4U。它是一种4比特的均匀标量量化方案,将每个维度的浮点值压缩成一个4 位无符号整数,其中“U”代表Uniform,也就是均匀量化。

和传统的按维度独立计算极值的非均匀标量量化(逐维量化)方式不同,SQ4U采用的是全局均匀量化策略:它会为整个向量或向量段计算一个统一的最小值 vmin 和数值范围 vdiff,然后把这个范围平均分成16个区间,所有维度的浮点数值都用这一套参数映射成0-15的4比特整数。

这种设计带来了三大优势:

一是压缩比直接拉满,相比FP32能实现8倍压缩,比SQ8也能再压缩2倍,极大缓解了内存带宽的瓶颈;

二是能充分发挥现代CPU的SIMD指令优势,AVX2/AVX-512这些指令集可以在一个周期内处理更多维度的数据,而且全局参数的设计避免了计算距离时反复加载不同的缩放和偏移值,让指令流水线始终处于饱和状态;

三是更小的向量体积意味着更多数据能塞进CPU缓存,减少了频繁访问内存带来的延迟。

不过要注意,SQ4U“因为是全局均匀”,所以在数据经过归一化,或者各维度数值分布比较一致的数据集上效果会更好。

02

HNSW_SQ 是怎么工作的?

说了这么多,HNSW和SQ到底是怎么联手工作的?一共分三个步骤:

第一步是数据压缩。根据我们设定的 sq_type,比如SQ6或者SQ8,把原始向量压缩成低比特的形式。压缩后的向量虽然精度略有下降,但胜在体积小,能让系统处理更大规模的数据集。

第二步是构建HNSW图。用压缩后的向量来构建多层图,因为数据体积变小了,整个图的规模也会跟着缩小,后续的检索速度自然就更快了。

第三步是候选向量检索。当有查询向量进来时,算法会基于压缩后的图数据,快速筛选出一批可能的相似候选向量。

如果对查询精度有更高要求,还可以开启第四步——结果优化。这一步的核心是几个关键参数:

refine 控制是否开启优化,开启后系统会用更高精度的数据重新计算距离;

refine_type 决定优化时用的数据精度,比如SQ8、BF16甚至FP32,精度越高结果越准,但内存开销也越大,而且它的精度必须高于之前设定的 sq_type;

refine_k 是个放大系数,比如你要取Top100的结果,refine_k 设为2,系统就会先选出Top200的候选,再重新排序得到最准的Top100。

03

如何用好HNSW_SQ

理论讲完,我们直接上手实操。

第一步:构建HNSW_SQ索引

首先准备好索引参数,指定向量字段名add_index()、索引类型(index_type)为HNSW_SQ,再根据需求设置距离度量方式(metric_type)和其他关键参数(params)。

from pymilvus import MilvusClient初始化客户端client = MilvusClient("your_milvus_uri")准备索引参数index_params = client.prepare_index_params()index_params.add_index(field_name="your_vector_field_name",index_type="HNSW_SQ",index_name="vector_index",metric_type="L2",支持COSINE、IP等params={"M": 64,每个节点的最大连接数"efConstruction": 100,构建索引时考虑的候选邻居数"sq_type": "SQ6",选择量化类型"refine": True,开启结果优化"refine_type": "SQ8"优化时用更高精度})创建索引client.create_index(collection_name="your_collection_name", index_params=index_params)

这里的几个参数可以根据业务需求调整:M 越大,索引精度越高,但构建和检索的耗时也会增加,一般建议在5-100之间;efConstruction 越大,构建出的索引质量越好,但耗时更长,推荐范围是50-500。

第二步:基于HNSW_SQ索引进行搜索

索引建好后,就可以发起相似性搜索了,关键是配置好搜索参数。

配置搜索参数search_params = {"params": {"ef": 10,搜索时遍历的节点数,影响精度和速度"refine_k": 1优化阶段的候选放大系数}}发起搜索res = client.search(collection_name="your_collection_name",anns_field="your_vector_field_name",data=[[0.1, 0.2, 0.3, 0.4, 0.5]],你的查询向量limit=3,返回Top3相似结果search_params=search_params)查看结果print(res)

搜索参数里的 ef 很关键,它决定了搜索时的遍历广度,数值越大精度越高,但速度越慢,一般建议设置在K到10K之间,K就是你要返回的结果数。

总的来说,HNSW_SQ就是这样一个能灵活平衡速度-内存-精度的向量索引方案。

你可以根据业务需求,通过调整量化类型、索引参数和搜索参数,找到最适合自己的那组配置。

无论是大规模数据集的快速检索,还是资源紧张场景下的内存优化,它都能轻松应对。

阅读推荐 Spark做ETL,与Ray/Daft做特征工程的区别在哪里,如何选型? 教程:如何用飞书+Moltbot,打造你的MilvusAI小助手 RAG优化不抓瞎!Milvus检索可视化,帮你快速定位嵌入、切块、索引哪有问题 Milvus+印度最大电商平台,如何打造服务两亿月活用户的商品比价系统 都有混合检索与智能路由了,谁还在给RAG赛博哭坟?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 23:46:40

手把手玩转双向CLLC双闭环设计

双向全桥LLC/CLLC拓扑双闭环控制,详细的设计步骤,原理,参数计算选型,本人在读研究生,双闭环 (默认发MATLAB/simulink仿真文件)搞过LLC拓扑的兄弟肯定知道,这货在单向应用里确实香,但遇到需要能量…

作者头像 李华
网站建设 2026/5/4 23:46:06

装修资源合集

【家庭装修必备】家装装修电子书图书合集 文件大小: 1.1GB内容特色: 1.1GB 家装电子书合集,风格案例工艺一次打包适用人群: 准备自装、监工、学设计的业主与实习生核心价值: 省下万元设计费,避坑施工陷阱,提升居住颜值下载链接: https://pan…

作者头像 李华
网站建设 2026/5/1 16:54:36

网页中如何实现大文件夹整体上传的解决方案总结?

大文件传输系统开发方案 项目背景与需求分析 作为广东某软件公司的前端工程师,我正负责公司新项目的大文件传输模块开发工作。客户需求具有以下核心特点: 超大文件支持:需处理20G级别的文件传输复杂场景覆盖: 文件/文件夹上传下…

作者头像 李华
网站建设 2026/5/1 13:12:19

HTML5游戏开发书籍推荐:入门与进阶必读指南

对于希望进入或已经踏入HTML5游戏开发领域的朋友来说,选择合适的书籍是构建知识体系、提升实战能力的关键一步。市面上的相关书籍繁多,侧重点各异,有的重基础,有的讲框架,有的专攻性能。本文将结合我个人多年的开发与阅…

作者头像 李华
网站建设 2026/5/3 14:26:22

*D2L Brightspace

D2L Brightspace是一个面向教育机构和企业的学习管理平台,它整合了课程发布、互动、评估和数据分析等功能,为数字化教学提供一个中心枢纽。你可以把它理解为一座功能完整的“数字化校园”。它不仅是存放课件(图书馆)和布置作业&am…

作者头像 李华