千亿级向量索引的秘密武器:一文详解蚂蚁集团的工程实践和开源突破

简介: 本文整理自2025QCon全球软件大会贾玮(蚂蚁集团NoSQL数据库和向量数据库的技术负责人)的演讲实录。本文围绕向量检索技术的研究与实践展开系统性阐述,包含以下四个维度:1.向量检索的基础原理以及相关的核心技术挑战;2.蚂蚁集团在向量检索领域的工程实践和具体案例;3.向量检索领域的最新学术研究和应用成果;4.蚂蚁开源向量索引库VSAG的最新进展。

一、向量检索的技术挑战

1.1 非结构化数据规模飞速增长

根据IDC的预测,到2028年全球互联网数据总规模将达到393ZB,其中超80%为非结构化数据。从2023年开始,蚂蚁集团内部非结构化数据的规模增速首次超过了结构化数据。这一趋势表明,数据管理的范式正在转变,对非结构化数据的管理和价值发现将会成为全新的挑战

image.gif

1.2 非结构化数据与向量检索

非结构化数据:

  • 非结构化数据是指像音频、视频、图片、文本等没有固定结构的数据。
  • 数据量大、信息丰富且处理成本高。

非结构化数据的处理,正是向量数据库所擅长的。

向量化表示及向量索引:

通过深度神经网络提取非机构化数据特征,形成向量化表示。向量数据库为了对向量数据进行高效检索,会将这些向量按照近邻图或者倒排索引的方式,组织成一个向量索引,以加速检索过程。

以近邻图格式的索引为例,对近邻图的检索过程,其实就是对这个近邻图的遍历过程。找出和查询向量最接近的目标向量结果集,这个过程需要进行大量的浮点运算。浮点运算就是去计算向量之间的距离。例如计算一千维向量之间的距离需要进行1000次浮点运算。正常情况下在大规模向量索引上进行完整检索,可能需要几十万次浮点运算。这里的算力需求是惊人的,跟传统的数据库对算力的需求有很大差别。

1.3 RAG范式和向量数据库

向量数据库除了能对非结构化数据进行管理之外,也是AI infra中重要的基础设施。大语言模型展现了惊人的语言理解和内容生成能力,但由于模型的静态性,存在生成的内容信息更新不及时,生成内容无法溯源,有时还会存在幻觉等问题。通过RAG技术结合向量数据库,可以很好的解决大语言模型带来的这些问题。

解决的思路其实也很简单,在大语言模型生成最终结果之前,先将用户问题交给线上数据库检索。找出与用户问题相关的更新补充信息,或者是企业私域的专业领域的信息,以辅助大语言模型来生成更准确的结果。

image.png

image.gif

因此向量数据库除了能应用在非结构化数据的管理之外,也同样可以用在大模型的增强上。

1.4 向量检索的技术挑战

高资源消耗

向量数据库具备强大的非结构化数据管理能力,但是也有一个很显著的代价,它是一个高资源消耗的服务。举个例子:同样是单个CPU Core的情况下,在NoSQL数据库中每秒钟能够处理上万次的查询请求。而向量数据库进行一次向量检索需要进行数十万次的浮点运算,算力需求非常高。向量检索的算力需求相比NoSQL高两个数量级。

同样是去管理1亿条数据,在NoSQL中只需要在内存里存储用户的key以及value在磁盘中索引的位置。在NoSQL里管理1亿条数据的内存需求约为10+GB。而向量数据库却有惊人的内存需求:因为需要把用户高维的这些向量都存储在内存中,以方便快速的去进行向量的检索。管理1亿条1024维的向量,需要的内存消耗超过1TB,同样也是高出了两个数量级。

向量数据库不像存储工程,只是单纯存储工程的优化。它其实是一个算力、算法以及工程架构的全面挑战。我们需要去做诸多方面的优化,包括算法,CPU cache等方面的优化。

实践案例:成本、高召回率及性能带来的挑战

在蚂蚁集团内部实际场景的挑战,首先是存储成本挑战。随着蚂蚁集团内部内容业务的发展,向量存储及检索的成本也越来越高。通常情况下,我们可能需要管理数百亿甚至数千亿的向量索引。而往往如果要维护一个千亿级别的向量索引,在不考虑算力需求和QPS要求,仅从内存角度,就需要数千台服务器。

另一方面,一些业务的主要挑战是在召回精度上面,例如图像识别或者是智能凭证识别这样的场景,需要做到100%的召回。在向量检索的过程中,想把召回率从99%提升到99.9%,虽然提升不到1个点,但在资源不变的情况下,需要增加近一倍的延迟,需要付出巨大的代价。

此外,由于向量索引是近似查找的索引实现,很难保证100%召回率。而且索引的静态性,会使得之前出错的查询后续还会一直出错,这是召回率方面的一个实际问题。

最后是性能挑战,比较典型的场景:广告推荐、RAG场景,都提出了超高的QPS要求,而且也对延迟有严苛的要求。在一个大规模的集群中,做扩容的时候成本也很高,不是线性的,所以这里的性能挑战也很明显。

新CAP问题

向量检索在成本(Cost)、精度(Accuracy)和性能(Performance)之间面临不同的挑战,而这三个变量之间又会相互影响,就像分布式领域的CAP问题一样,在向量检索领域,我们也有类似的三角问题。总结下来可以称之为一个向量检索领域里的新CAP问题。



1.成本:通过量化或降维可以降低成本、提升吞吐量,但会牺牲精度,影响召回率。

2.精度:提升维度或检索深度可以提高精度和召回率,但会增加算力需求和延迟。

3.性能:增加机器可以提升性能,但会增加成本;降低精度可以减少算力需求,提升性能,但也会降低精度。

本质问题和CAP一样,我们这三个点之间会相互影响。因此向量数据库真正的优化的思路,其实就是在成本、精度和性能之间做出平衡,以满足实际业务的诉求。

二、蚂蚁集团的工程实践与案例总结

2.1 蚂蚁自研向量数据库VectorDB

蚂蚁集团针对性能、成本和精度这三方面的挑战,自研了一套向量数据库系统。这套系统本身也是在蚂蚁内部的一个行列混合存储的底座上构建的。这个底座是蚂蚁几年前自研的一套分布式KV存储,它能同时支持行存和列存的NoSQL,能够支持在线的点查,也支持分析类的场景;也是一套采用基于共享存储的存算分离架构的系统,所以具备了非常高的扩展性。也采用了一个独立的compactor架构,比如说压缩的动作或者合并的动作都卸载到独立的服务器上,不会影响到软件ranger server上的读写。此外它也是一个读写分离的系统,可以把读和写的影响做隔离。

在这套行列混合存储的底座之上,我们构建了蚂蚁自研的向量数据库。因为这个底座是非常灵活的,可以很好的扩展。

基于蚂蚁自研存储底座UCS:

  • 增加向量索引和混合检索引擎,用于向量的查找和向量&标量混合的查询。
  • 新增检索代理服务。
  • 把相对比较重负载的索引构建模块放到Compactor的节点上,可以单独的做弹性,也可以用GPU机器。

在实现这套系统的过程中,我其实意识到这是一款跨界的产品——其实是存储工程跟向量索引算法的一个深度的融合,只有把计算跟存储绑在一起,然后做深度的优化,才能把这件事情做好。

2.2 索引方案选型

有了底座之后,接下来就是索引算法的选型了。通过调研我们发现单一的向量索引无法把实时性、成本和召回率这三件事情同时做好

  • HNSW:召回率和延迟好,但内存成本高
  • IVF-PQ:量化后成本低,但精度不足
  • DiskANN:磁盘索引方案,成本低,但更新困难


2.3 成本优化实践

针对目前这些索引的问题,我们团队在去年提出了一个业界首创的全新方案:采用HNSW+DiskANN的混合索引方案,来应对成本挑战。这套方案本质上是把这两套索引方案有效的进行了组合,并且充分发挥了这两套索引的优点:不仅发挥了HNSW索引实时更新的优势,同时DiskANN索引低成本的能力也得以凸显,并且通过工程优化的方式规避缺点。


整体的实现思路:将新增的或者变更的数据,写到可以实时更新的HNSW的索引中;并且在后台Compactor的索引构建节点中,定时的把之前新增写入的节点,批量构建成DiskANN索引。构建完之后,再用DiskANN索引来替换之前在内存里的高成本的HNSW索引。从而实现HNSW里只有少量变更的增量数据,大量的历史数据都是用更低成本的DiskANN索引来存储的。从而解决我们在实时性和成本,还有精度上的挑战。


如上图所示,采用HNSW+DiskANN混合索引方案,内存需求只有纯HNSW方案的1/10,QPS和延迟可以做到几乎与HNSW相当,并且召回率也是接近的。整体成本的优化效果达到整体TCO降到原来的1/7,纯向量索引部分达到1/10。

2.4 稀疏向量的应用

稀疏向量索引是一种高维向量的特殊表示形式,每个维度都对应一个单词,一个数据。其中稀疏向量里大量的数据都是0,它是用另外一种紧凑的方式去排布数据的。相比于稠密向量,稀疏向量的计算成本更低,并且能够更精确的匹配关键词或者短语。它的精确匹配性比稠密向量的语义匹配更好。


稠密向量、稀疏向量,还有BM25这样的传统召回算法,它们之间存在互补性。任何两个索引之间的召回结果,通过并集并重排之后,都可以提升召回率,且效果非常显著。最终,我们采用把三种索引结合在一起,并且加上一个加权的重排算法,能够实现整体的一个性能和召回率的提升。


image.gif

Dense/Sparse/BM25 的召回效果


image.gif

A 或 B:算法在 Top-10 中找到正确结果的查询集合


image.gif

在Top 10的场景下,召回率提升了3.7%。 在Top 3的场景下,召回率提升了18%。

三、学术影响力与应用实践

3.1 性能突破:BSA剪枝框架+内存排布和预取

向量检索作为一种计算密集型场景,其性能优化至关重要。为此,我们引入了一种基于BSA剪枝框架的优化方法。该方法的核心思想是:在向量检索过程中,并不直接使用全维度向量进行计算,而是首先利用降维后的向量完成第一轮的图遍历与查询操作。待初步结果集生成后,在最终返回结果之前,再通过高精度向量对候选结果进行重排,以确保检索质量。然而,第二阶段的高精度重排仍然会消耗大量算力资源。

为解决这一问题,我们进一步引入了线性分类器的思想。在线性分类器的辅助下,我们能够在进入第二阶段高精度重排之前,预先评估当前量化误差是否已满足业务对召回率的要求。具体而言,通过线性分类器对现阶段的检索结果进行快速预估,判断其是否已经达到业务所需的精度标准。若评估结果显示当前精度已足够,则无需执行第二阶段的高精度重排,从而显著减少不必要的算力开销。

实验数据表明,通过上述优化策略,向量检索的吞吐性能得到了显著提升,最高可达1.4倍至2.2倍。尤其是在高维向量场景下,由于距离计算的复杂度随维度增加而显著上升,该优化方案的效果尤为突出。


在性能优化的另一重要领域,我们聚焦于内存排布与数据预取的改进。近邻图检索因其在性能和延迟方面的优越表现,已成为向量检索中的关键方法。然而,近邻图检索过程中涉及大量的随机内存访问,这使得传统CPU默认的缓存预取策略难以有效发挥作用,从而导致缓存命中率下降,影响整体性能。因此,针对内存访问模式的优化显得尤为重要。

为此,我们从两个方面进行了深入优化:首先,通过对内存排布的重新设计,改善数据在内存中的存储结构,以减少随机访问对缓存效率的影响;其次,通过引入定制化的数据预取策略,提前将可能被访问的数据加载至缓存中,从而进一步提升缓存利用率。实验结果表明,经过内存排布优化后,系统吞吐性能提升了25%;而结合数据预取优化后,吞吐性能进一步提升了20%。


image.gif

3.2 精度突破:基于反馈的召回优化

在检索精度优化方面,我们创新性地引入了共轭图机制。该机制通过利用用户查询反馈对图结构进行动态改进,从而持续优化近邻图的检索过程。

具体而言,近邻图在检索过程中可能会面临局部最优解的问题。例如,在遍历图时,检索算法可能会找到一个当前最接近目标点的节点,但该节点未必是全局范围内最优的匹配点。这种局部最优现象会限制检索结果的召回率。而共轭图的设计正是为了弥补这一缺陷。通过将那些因局部最优问题而未能被正确检索到的节点信息纳入共轭图中,我们能够对原近邻图的检索结果进行有效补充。在实际查询过程中,系统首先基于近邻图进行初步检索,然后进一步查询共轭图以补充结果,从而显著提升整体召回率。


image.gif

实验数据显示,经过用户反馈驱动的优化后,系统的召回率从99.8%提升至99.97%。尽管表面上看提升幅度较小,但其实际价值极为显著。在高召回率场景下,每0.1%的提升都极具挑战性。更重要的是,这些通过优化而得以提升的向量查询结果,在后续检索中具有高达95%的概率不再失败。这种改进对于那些对召回率要求接近100%的业务场景尤为重要,能够有效满足高精度需求下的性能指标,为关键业务提供了强有力的技术保障。

3.3 其他方面的技术改进

1)基于Binary量化的优化

我们引入了一种基于二值量化(Binary Quantization)的优化方案,该方案借鉴了新加坡南洋理工大学在SIGMOD 2025论文中提出的RabitQ方法。RabitQ是一种高效的二值量化技术,能够在实现高达32倍压缩比的同时,保持极低的精度损失。作为工程化实现的一部分,我们基于RabitQ算法完成了生产级别的开发,并将其集成到我们的向量索引库VSAG中。这一优化不仅显著降低了存储成本,还为大规模向量检索场景提供了高效且可靠的解决方案。

image.gif

新加坡南洋理工大学 SIGMOD2025RabitQ论文 复现

2)磁盘索引上的改进(PAG)

针对磁盘与内存混合索引的性能瓶颈,我们提出了一种基于PAG(Partitioned Aggregation Graph)的创新压缩方案。此前,使用HNSW和DiskANN等方法构建磁盘索引时,会产生大量的I/O需求,而检索吞吐量的上限往往受限于硬盘的IOPS能力。因此,优化I/O开销成为提升性能的关键。

PAG的核心思想是将图结构与聚类方法相结合,形成一种两层索引架构:上层为图结构,下层为聚类结构。通过将图中距离接近的节点合并为单个节点,PAG有效减少了需要从磁盘读取的数据量,从而显著降低I/O需求。实验结果表明,采用PAG方案后,系统的I/O需求减少了22%,尤其适用于分布式存储架构的优化。



3)HGraph层次化图索引框架表

为了更灵活地支持新型索引结构的快速构建,我们设计了HGraph层次化图索引框架。该框架旨在提供一个通用的基础设施,使用户能够自由组合不同类型的向量索引。例如,可以在上层使用图索引,而在下层结合倒排索引;或者反过来,在上层使用倒排索引,下层采用图索引。


image.gif

四、VSAG开源进展

VSAG是我们在向量检索领域的工程实践与算法优化成果的集中体现。我们将多年来在性能优化、算法改进等方面的积累沉淀于这一向量索引库中,使其成为适用于相似性检索的强大工具。VSAG能够高效支持不同规模的向量集搜索任务,尤其在内存资源有限的场景下表现出色,例如支持混合内存加磁盘的混合索引方案。

2024年7月,我们正式将VSAG开源至GitHub,并迅速在业界获得了广泛关注。随后,VSAG在权威的ANN-Benchmarks榜单上提交了基于GIST-960数据集的测试结果,取得了SOTA级别的性能表现。在90%召回率区间,其查询吞吐量(QPS)相比此前最优算法GLASS提升了100%,相较于基线算法HNSWLib更是提升了300%。

image.gif

为了更好地服务开发者社区,我们在VSAG的生态适配和易用性提升方面也投入了大量工作:

  • PyVSAG:Python生态支持

我们推出了专为Python生态设计的版本——PyVSAG,使用户能够在Python环境中轻松使用VSAG的强大功能。这一举措极大地降低了使用门槛,为科研和工业应用提供了便利。

  • SQLlite集成

VSAG已成功与SQLlite集成,实现了向量索引能力在传统数据库中的无缝嵌入。目前该功能已在内部使用,计划于2025年下半年对外开源。

  • Valkey/Redis生态支持

针对Valkey和Redis生态,我们开发了一个集成VSAG向量索引的模块。该模块能够帮助用户在现有的Valkey或Redis产品中快速部署VSAG的向量检索能力,极大提升了其在实时应用场景中的可用性。目前该模块已在内部使用,预计将在2025年下半年正式对外发布。

  • 与OceanBase和Greptime的集成

此外,我们还完成了VSAG与分布式数据库OceanBase以及时序数据库Greptime的集成工作,进一步拓展了其在大数据和时序分析领域的适用范围。

未来,我们也将继续推动VSAG在更多场景中的落地应用,并期待与开源社区共同成长。

VSAG 开源规划

v0.15 (预计发布日期:2025年4月)

  • 集成持稀疏向量搜索
  • 提供可插拔的量化框架及能力

v0.16 (预计发布日期:2025年5月)

  • 提供针对ARM架构Neon指令优化的版本
  • 使用GPU加速索引构建
  • 提供一个自动调仓器,简化用户在使用索引中对参数的调整

v0.17 (预计发布日期:2025年6月)

  • 对Intel AMX指令集的适配,提升向量的构建和检索的效率
  • 在向量索引中增加属性存储的支持
  • 支持图形结构压缩

VSAG 开源地址:https://github.com/antgroup/vsag

相关文章
|
算法 安全 关系型数据库
密码学系列之七:数字签名
密码学系列之七:数字签名
1271 0
|
2月前
|
存储 人工智能 缓存
大模型存储的 “最后一公里” :蚂蚁大模型存储加速系统 PCache 如何解决万亿参数训练难题?
本文尝试通过当前学术和工业界在大模型存储领域的关注点和相关工作,并结合蚂蚁大模型训练场景实际的需求和问题,来介绍蚂蚁是如何在多云环境里构建一套具备高可用性、高性能以及低成本的云原生 AI 存储加速系统 PCache;并通过该存储方案在蚂蚁支持了百亿文件规模的多模态和万亿参数的 MOE 训练任务。
|
20天前
|
机器学习/深度学习 自然语言处理 数据可视化
⼤模型驱动的DeepInsight Copilot在蚂蚁的技术实践
本文整理自潘兰天(蚂蚁数据智能团队数据分析平台技术专家)在DA数智大会2025·上海站的演讲实录。
|
3月前
|
存储 人工智能 编解码
Deepseek 3FS解读与源码分析(2):网络通信模块分析
2025年2月28日,DeepSeek 正式开源其颠覆性文件系统Fire-Flyer 3FS(以下简称3FS),重新定义了分布式存储的性能边界。本文基于DeepSeek发表的技术报告与开源代码,深度解析 3FS 网络通信模块的核心设计及其对AI基础设施的革新意义。
Deepseek 3FS解读与源码分析(2):网络通信模块分析
|
8月前
|
人工智能 自然语言处理 BI
从数据积累到大模型的智能飞跃,你准备好了吗?
在数据驱动的时代,人工智能(AI)正重塑世界。蚂蚁集团的师文汇在「DATA+AI」论坛上发表演讲,阐述了《数据驱动的AI原生应用与开放框架》。他指出,AI应用经历了从数据积累到大模型的智能飞跃,数据已成为智能应用成功的关键。师文汇强调,构建智能应用需结合优质大模型与行业数据。演讲还介绍了AI原生应用的研发变革与挑战,包括编程模型转变、研发范式的不确定性及与现有系统的交互等问题。此外,他还分享了AI原生应用框架的思考与探索,提出了泛ETL、实验反馈机制及应对不确定性等解决方案,并展示了DB-GPT在政企、金融等多个领域的应用案例。
|
域名解析 缓存 网络协议
DNS协议 是什么?说说DNS 完整的查询过程? _
DNS是互联网的域名系统,它像翻译官一样将域名转换成IP地址。域名由点分隔的名字组成,如www.xxx.com,包含三级、二级和顶级域名。查询方式分为递归和迭代,递归是请求者必须得到答案,而迭代则是服务器指引请求者如何获取答案。域名解析过程中,会利用浏览器和操作系统的缓存,如果缓存未命中,本地域名服务器会通过递归或迭代方式向上级服务器查询,最终得到IP地址并返回给浏览器,同时在各级缓存中保存记录。
359 1
DNS协议 是什么?说说DNS 完整的查询过程? _
|
3月前
|
存储 运维 BI
万字长文带你深入广告场景Paimon+Flink全链路探索与实践
本文将结合实时、离线数据研发痛点和当下Paimon的特性,以实例呈现低门槛、低成本、分钟级延迟的流批一体化方案,点击文章阅读详细内容~
|
20天前
|
人工智能 Rust 数据挖掘
最高万元奖金|2025开源之夏x蚂蚁数据智能,12大硬核任务等你解锁
如果你想在暑期里收获:技能实战历练、大咖指导护航、高额现金奖励和荣誉证书... 那么一定不能错过 2025开源之夏!