当前位置: 首页 > news >正文

高效索引之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赛博哭坟?

http://www.jsqmd.com/news/345219/

相关文章:

  • 2026年评价高的本地税务公司/税务问题业内推荐 - 行业平台推荐
  • 为什么你的年度计划只值两个字“要钱”?这份“自检清单”能救命
  • 2026年新能源汽车检测机构推荐:基于车队管理场景长期评价,针对运维成本与安全隐忧痛点 - 品牌推荐
  • (ICLR26) Task-Adaptive Parameter-Efficient Fine-Tuning for Weather Foundation Models
  • 2026年热门的耐腐蚀反应釜/哈氏合金反应釜优质供应商推荐参考 - 行业平台推荐
  • 2026更新版!AI论文写作软件 千笔AI VS 云笔AI,MBA专属写作神器!
  • No145:AI中国故事-对话王弼——玄学智慧与AI理解:以无为本、得意忘言与本质把握
  • 新能源汽车出保后维修哪家可靠?2026年维修公司推荐与评价,直击配件贵与检测不精准核心痛点 - 品牌推荐
  • 2026年新能源汽车检测机构推荐:多场景实测评价,解决安全与估值核心痛点 - 品牌推荐
  • 阿里开源Qwen3-Coder-Next,80B参数仅激活3B的MoE顶尖编程助手
  • 导师严选8个降AIGC平台 千笔AI解决AI率过高难题
  • Win狂喜!国产Cowork和Codex App,昆仑万维Skywork桌面版发布
  • 自制飞思卡尔智能车 DRV8701 双路驱动 PCB 分享
  • Python爬虫实战:基于异步技术与数据挖掘的图书销量排行榜监控系统
  • 百度免费上传组件如何处理大文件分段的方案总结?
  • 手把手玩转双向CLLC双闭环设计
  • 西门子PLC1500大型程序fanuc机器人汽车焊装 包括1台西门子1500PLC程序
  • 网页中如何实现大文件夹整体上传的解决方案总结?
  • 如何选择可靠的新能源维修公司?2026年推荐与深度评测,直击效率低下与兼容性差痛点 - 品牌推荐
  • 房屋租赁系统 二手房屋销售系统 开题报告 springboot和vue
  • vue-cli项目中如何处理大文件秒传的方案总结?
  • 2026年质量好的水帘框/四川水帘纸高性价比推荐 - 行业平台推荐
  • 2026年新能源汽车维修公司推荐:聚焦城市通勤与长途场景,严选服务商并发布避坑指南 - 品牌推荐
  • 百度WebUploader上传超大附件有哪些解决方案总结?
  • 科研党收藏!千笔ai写作,专科生论文神器
  • 从 状态管理 V1 到 V2:鸿蒙开发者的进化指南
  • 2026年新能源汽车维修公司推荐:多场景维保需求深度评测,破解技术壁垒与配件痛点 - 品牌推荐
  • 2026年海外GEO优化推广服务商权威测评--深圳昊客网络GEO技术携AI算法脱颖而出 - 深圳昊客网络
  • 2026年医院展馆迎宾讲解机器人深度技术解析与主流产品评测 - 智造出海
  • 有实力的信息流广告品牌企业哪家好,广西企业全梳理 - 工业推荐榜