低内存、高性能,磁盘索引可以这样玩
创始人
2025-05-31 16:36:11

6e9f77d4b32f21f7633cdb65ee33025a.png

在 Milvus 社区中,与磁盘索引相关的问题成为近期用户集中询问重点。为了方便用户更深入地了解磁盘索引,我们将从其原理出发,由表及里地介绍如何用好磁盘索引。

Milvus 是世界上最快的向量数据库,在最新版本的 Milvus 中,基于内存的 HNSW 索引可以提供极致的性能体验。然而,Milvus 的目标是支持多种不同的场景,除了性能,我们也追求性价比和可扩展,因此便有了磁盘索引。

基于 DiskANN 的磁盘索引可以在仅使用 1/10 的内存消耗下,发挥出 HNSW 索引 1/3-1/2 的性能能力,能够在千万级别的数据上拿到 ~10ms 的延迟能力。因此,它可以帮助用户在 QPS、Latency 不特别敏感的场景下大大降低资源的消耗。

01.

DiskANN 原理浅析

之前已经有 Zilliz 的同学写过一篇关于 DiskANN 论文的相关文章[1],感兴趣的朋友可以了解一下。

回到原理介绍的部分,DiskANN 的大致结构是在内存中维护一个 PQ,然后原始向量和邻接表以 Vamana 图的结构储存在硬盘里。

  • Vamana

图的结构有很多种,最早是 2011 年有文章提出链接每个点的最临近的 K 个点。这种策略的空间占用高,并且性能差。

后来大家优化的重点就在于如何去剪枝。2017 年,有篇文章提出了 NSG 图,策略就是如果一个新的点离目标点的距离远于离目标点的邻居,就不链接。即保证对于目标点的邻居,以它为中心,到目标点的距离为半径的圆里边没有别的目标点的邻居。

这种策略减少了每个点的出度,大大加快了查询的速度。

DiskANN 基于的 Vamana 图就是由 NSG 演进而来,具体的改进就是由于 NSG 的裁边机制过于激进导致精度下降,因此引入一个参数 alpha 来控制裁边。具体就是裁边的时候判断的距离乘上这个系数后还是过大才会裁掉。

  • Build

简单介绍一下 DiskANN 建索引的过程:

首先 DiskANN 会对原始数据采样找到 PQ 的 Pivots,这一步 DiskANN 默认是 256 个 clusters,会根据用户允许的在查询中使用的内存来决定 chunk 数目和大小。然后对原始数据进行 PQ 压缩。

然后 DiskANN 会基于原始数据来构建 Vamana 图,根据用户的允许的在建索引中使用的内存在决定是一次建完还是分批建然后 merge。后者会有较大的性能降低。

然后是把数据都写入磁盘,并删除中间文件。

最后会生成一个从原始数据中随机采样的样本用于 warmup。

  • Search

首先 DiskANN 会加载磁盘中的索引文件,把 PQ 码表放进内存,然后根据用户的参数开始建立 cache 和 warmup。

Cache 的策略有两种:

  • 取之前的采集的样本进行 query,缓存中间路过的点。目前是用于 KNN search。

  • 在 entrypoint 周围进行 BFS,缓存这些点,目前用于 range search。

Warmup 的方式则是对样本进行 query。

然后就是 DiskANN 的搜索算法,具体做法是:

  • 先根据参数固定一个 search list,把 entry point 放进去。

  • 然后从 search list 每次拿至多 beamwidth 个点,在硬盘中加载向量和邻居。

  • 用 PQ 计算这些邻居到目标点的距离,择优放进 Search List(类似于 Priority Queue)。

  • 一直循环到 search list 被占满。且都访问过。

  • 把途径的所有点收集起来排序取 topK。

c7a31178ebf1716b8c785fe981faeaf7.png

02.

DiskANN in Milvus

关于 Milvus 是如何使用 DiskANN 索引的,大致可以用下边的数据链路图表达:

bd709feebdf06789c1d3433b61d336bd.png

Build 时,IndexNode 会从 MinIO 里抓取原始数据,预处理后放入本地磁盘。然后 DiskANN 会从磁盘中读取文件并生成索引文件。最后由 IndexNode 把建好的索引文件处理后推到 MinIO 里。

Search 的时候,QueryNode 会从 MinIO 里抓取索引文件,与处理后放入本地磁盘。然后 DiskANN 会从本地磁盘中加载少量必要的信息以供查询。

03.

如何用好磁盘索引

  • 适用场景

磁盘索引适用于对性能不是非常敏感,且内存资源有限的场景。在默认场景下,内存的占比是原始数据大小的 1/4,其中 1/8 用作 PQ 码表,1/8 用作 cache。索引的磁盘占用是原始数据的 1.5~2 倍。这些比例都可以通过参数来调节以满足不同场景的需求,后边会具体介绍。

数据类型:目前 Milvus 的 DiskANN 只支持 float 类型的数据。

距离类型:DiskANN 能支持 L2 和 IP 距离。

维度:由于 Milvus 依据原始数据大小划分 Segment,如果维度过小,会导致一个 Segment 里数据行数过多。

DiskANN 的索引主要由原始数据和邻接表组成,过多的行数会导致单个 Segment 索引中邻接表数量变大,从而导致整个索引大小过大。因此 Milvus 的 DiskANN 暂时不支持 16 维以下的向量。因为 DiskANN 会大量访问磁盘,而磁盘的访问都是以一个大小是 4096 的 page 为基本单位的。因此过大维度会引起磁盘访问增大,从而导致性能下降。Milvus 的维度上限为 32768,但是为了获得更好的性能,推荐的最大维度为 1024。

  • 性能瓶颈

磁盘索引的 Search 性能瓶颈一般集中在磁盘 IO 上,因此好的磁盘对于性能的提升几乎是线性的。一般来说 SSD(NVMe) 的性能是 SSD(Sata) 的4-5倍,而 SSD(Sata) 的性能是一般 HDD 的 4-5 倍。

但是磁盘的性能对索引的 Build 性能影响不大。Build 的时候 DiskANN 需要在内存里建图,因此需要约单个 Segment 原始数据 1.7-2 倍左右大小的内存支持。如果内存不够,DiskANN 会分块建图再合并,会造成比较大的 Build 性能损失。

  • 参数调整

关于磁盘索引的相关参数调整可以参见 Milvus 官方文档[2] 。

这里还想分享一个性能上的 trick。一般图算法在数据量增大后,Latencty 的上升会很不明显。因此调整 Segment 大小能对性能产生不小的影响。在 ${MILVUS_ROOT_PATH}/configs/milvus.yaml 里,调大 dataCoord/segment/diskSegmentMaxSize (默认 2G) 会让性能更好。

参考资料

[1]        

DiskANN 论文相关文章https://zhuanlan.zhihu.com/p/394393264

[2]        

官方文档https://milvus.io/docs/disk_index.md

(本文作者刘力系 Zilliz 主任工程师)

87957f7cf658e30dfe65eca7322064cf.png

相关内容

热门资讯

100亿河南方便面大王,陷入商... 题图来源:视觉中国记者丨谢之迎 谭璐 编辑丨谭璐河南方便面大王,因为商标文字,突然陷入舆论危机。6月...
乌方传捷报,又击毁一架苏35,... 双方打得还真是有来有回啊,前脚乌克兰搞了个蛛网行动,炸了俄罗斯得图95,后脚俄罗斯就复仇,对乌克兰展...
华夏银行:爱心守护高考路 今天,全国进入“高考时间”,1335万考生走进考场,用笔求解未来。华夏银行各地分行也在“静下来”“动...
【投融资动态】国奥科技A轮融资... 证券之星消息,根据天眼查APP于6月4日公布的信息整理,国奥科技(深圳)有限公司A轮融资,融资额数千...
晓数点|一周个股动向:这只体育... 本周(6月2日至6日)的五个交易日中,A股三大指数均累计上涨,沪指累计涨1.13%,深证成指涨1.4...
75岁董事长和北大教授隔空对战... 北大学者与千亿药企掌门的麦角硫因之争。作者 | 刘钦文编辑丨高 岩来源 | 野马财经一场由生物学家与...
合并后首次“扩容”!国联民生新... 21世纪经济报道记者 孙永乐 上海报道6月6日晚,国联民生证券(601456.SH)公告称,公司于2...
从消费金融看消费潜力丨科技赋能... 央广网北京6月6日消息(记者唐婧)据中央广播电视总台经济之声《天下财经》报道,系列报道《从消费金融看...
央行,爆买245亿! 央行,爆... 央行连续7个月出手,较为罕见!6月7日,国家外汇管理局发布的数据显示,截至2025年5月末,央行的黄...
突发!中信证券被书面警示,事关... 来源 | 梧桐树下v6月6日,深圳证券交易所发布对中信证券股份有限公司、大华会计师事务所的监管函,对...
今年最大黄金杀猪盘,老板跑路卷... 来源|易简财经作者 | 陈璐瑶6月3日,据报道,从杭州上城区分局经侦队获悉,浙江永坤控股有限公司(简...
原创 一... 前言: 5.12日一大早上,中国有两个好消息振奋人心! 第一个就是中国和美国在瑞士会谈的很有成效...
原创 你... 最近中国明确警告韩国,如果再把从中国进口的稀土加工成产品卖给美国军工企业及受到中国制裁的企业,那中国...
新消费周报 | 泡泡玛特市值超... 《CBNData新消费周报》精选本周新消费领域最新动态,公司头条、消费风向、营销动态、可持续消费一文...
事关人民币国际化,中国银行这份... 文/夏宾人民币国际化这件大事近来好消息频传。刚刚过去的5月份,中国央行先后与巴西、印度尼西亚央行签署...
原创 不... 据环球时报报道,经白宫证实,美国“政府效率部”负责人马斯克已在近日晚开始办理离职,整个流程快速且毫无...
金融政策协同发力,破解小微企业... 中国商报(记者 马文博)一直以来,小微企业都是经济新动能培育的重要源泉,在推动经济增长、促进就业增加...
“应降息100个基点”,特朗普... 中国商报(记者 赵熠如)6月7日上午,2025年全国高考开考。首场语文科目考试结束后,作文试题受到广...
软件开发板块三大牛股:路桥信息... 路桥信息的股价近日大幅上涨本报(chinatimes.net.cn)记者叶青 见习记者 胡振明 北京...
新集能源股东新集煤电2120万... 雷达财经 文|冯秀语 编|李亦辉 6月6日,新集能源(601918)发布公告称,其持股5%以上股东安...
饶毅再发文批麦角硫因 科伦永年... 转自:贝壳财经 新京报贝壳财经讯(记者丁爽)6月6日,围绕“麦角硫因是‘假药’”观点,饶毅、科伦药业...
基金行业的“老谢” 基金行业的... 有些事情,来得总比预期得快。尽管很早就知道交银施罗德基金总经理谢卫今年要退休了,但看到他辞任总经理的...
黄牌警告撤销了,国资却笑不出来... *ST威帝申请撤销黄牌获得批准,6月4日起恢复为威帝股份,这本来是件值得高兴的事,不过,作为实控人的...
恒立液压大宗交易成交213.4... 恒立液压6月6日大宗交易平台出现一笔成交,成交量3.00万股,成交金额213.45万元,大宗交易成交...
鸿蒙版微信新功能爆棚,鸿蒙生态... 鸿蒙版微信,这款自2025年初在鸿蒙系统上线的国民级应用,每一次更新都牵动着广大用户的心弦。自1月9...
天风证券定增获证监会同意批复 ... 6月6日,天风证券(601162)发布公告称,收到中国证券监督管理委员会出具的《关于同意天风证券股份...
江苏定了!提高退休人员养老金,... 江苏定了!2025年继续提高退休人员养老金,农民基础养老金也要涨。日前,江苏省政府发布了《江苏省实施...
被说成是“影视公司”,众擎机器... 红星资本局6月7日消息,“前段时间我们和宇树被外界定义成‘影视公司’,没关系我觉得挺开心,影视也是行...
商务部:中欧双方电动汽车案价格... 红星资本局6月7日消息,今日,商务部新闻发言人就王文涛部长赴法国期间与欧盟委员会贸易和经济安全委员谢...