Milvus
Zilliz
  • Home
  • Blog
  • Milvus 中的 AISAQ 简介:十亿级向量搜索的内存成本降低了 3,200 倍

Milvus 中的 AISAQ 简介:十亿级向量搜索的内存成本降低了 3,200 倍

  • Engineering
December 10, 2025
Martin Li

向量数据库已成为关键任务人工智能系统的核心基础架构,其数据量呈指数级增长--往往达到数十亿向量。在这种规模下,一切都变得更加困难:保持低延迟、保持准确性、确保可靠性以及跨副本和跨区域操作。但有一个挑战往往很早就会出现,并主导着架构决策--成本

为了提供快速搜索,大多数向量数据库将关键索引结构保存在 DRAM(动态随机存取内存)中,这是速度最快、成本最高的内存层。这种设计对提高性能很有效,但扩展性很差。DRAM 的使用量随数据大小而非查询流量的变化而变化,即使进行了压缩或部分 SSD 卸载,索引的大部分仍必须保留在内存中。随着数据集的增长,内存成本很快就会成为限制因素。

Milvus 已经支持DISKANN,这是一种基于磁盘的 ANN 方法,通过将大部分索引转移到固态硬盘来减少内存压力。不过,DISKANN 在搜索过程中使用的压缩表示法仍依赖于 DRAM。Milvus 2.6DISKANN 的启发下,进一步采用了基于磁盘的向量索引AISAQ。AiSAQ 由 KIOXIA 开发,其架构设计采用了 "零 DRAM 足印架构",将所有搜索关键数据存储在磁盘上,并优化数据放置,以最大限度地减少 I/O 操作符。在十亿向量的工作负载中,内存使用量从32 GB 减少 到约 10 MB ,减少了 3200 倍,同时保持了实际性能。

在接下来的章节中,我们将介绍基于图的向量搜索的工作原理、内存成本的来源以及 AISAQ 如何重塑十亿级向量搜索的成本曲线。

传统基于图的向量搜索的工作原理

向量搜索是在高维空间中查找数值表示最接近查询的数据点的过程。所谓 "最接近",简单地说就是根据距离函数(如余弦距离或 L2 距离)得出的最小距离。在小范围内,这很简单:计算查询和每个向量之间的距离,然后返回最近的向量。然而,在大规模(例如十亿规模)的情况下,这种方法很快就会变得太慢而不实用。

为了避免穷举比较,现代近似近邻搜索(ANNS)系统依赖于基于图的索引。索引不是将查询与每个向量进行比较,而是将向量组织成一个。每个节点代表一个向量,边连接数值上接近的向量。这种结构能让系统极大地缩小搜索空间。

该图是事先建立的,完全基于向量之间的关系。它不依赖于查询。当查询到达时,系统的任务就是高效地浏览图谱,找出与查询距离最小的向量,而无需扫描整个数据集。

搜索从图中预定义的入口点开始。这个起点可能与查询点相距甚远,但算法会通过移动到与查询点更接近的向量来逐步改善其位置。在这个过程中,搜索会维护两个协同工作的内部数据结构:候选列表结果列表

在这个过程中,最重要的两个步骤是扩展候选列表和更新结果列表。

扩展候选列表

候选列表代表搜索的下一个方向。它是一组根据与查询的距离排序的图节点。

每次迭代时,算法都会

  • 选择迄今为止发现的最接近的候选节点。从候选列表中选择与查询距离最小的向量。

  • 从图中检索该向量的邻居。这些相邻向量是在索引构建过程中被识别为与当前向量接近的向量。

  • 评估未访问过的邻居,并将其添加到候选列表中。对于每个尚未探索过的邻居,算法都会计算其与查询的距离。之前访问过的邻居会被跳过,而新邻居如果看起来有希望,就会被添加到候选列表中。

通过反复扩展候选列表,搜索会探索图中越来越多的相关区域。这样,算法就能在只检查一小部分向量的情况下,稳步获得更好的答案。

更新结果列表

与此同时,算法会维护一个结果列表,其中记录了迄今为止发现的最佳候选结果,以便最终输出。在搜索过程中,算法会

  • 跟踪遍历过程中遇到的最近向量。这些向量包括被选中进行扩展的向量,以及沿途评估过的其他向量。

  • 存储它们与查询的距离。这样就可以对候选向量进行排序,并保留当前的前 K 个近邻向量。

随着时间的推移,评估的候选向量越来越多,发现的改进却越来越少,结果列表就会趋于稳定。一旦进一步的图探索不太可能产生更接近的向量,搜索就会终止,并返回结果列表作为最终答案。

简单来说,候选列表控制着探索,而结果列表记录着迄今为止发现的最佳答案

这种基于图的方法首先使大规模向量搜索变得实用。通过浏览图而不是扫描每个向量,系统只需接触数据集的一小部分,就能找到高质量的结果。

然而,这种效率并不是免费的。基于图的搜索揭示了准确性与成本之间的基本权衡

  • 探索更多的邻居可以覆盖图的更大部分,降低遗漏真正近邻的几率,从而提高准确率。

  • 与此同时,每一次额外的扩展都会增加工作量:更多的距离计算、更多的图结构访问以及更多的向量数据读取。随着搜索的深入或扩大,这些成本就会累积起来。根据索引的设计方式,它们会表现为更高的 CPU 使用率、更大的内存压力或额外的磁盘 I/O。

在高召回率与高效资源利用之间取得平衡,是基于图的搜索设计的核心。

DISKANNAISAQ都是围绕这一矛盾而构建的,但它们在支付这些成本的方式和地点上做出了不同的架构选择。

DISKANN 是迄今为止最有影响力的基于磁盘的 ANN 解决方案,也是 NeurIPS Big ANN 竞赛的官方基准,该竞赛是十亿规模向量搜索的全球基准。它的意义不仅在于性能,还在于它证明了:基于图的 ANN 搜索不一定要完全在内存中才能实现快速搜索

通过将基于固态硬盘的存储与精心选择的内存结构相结合,DISKANN 证明了大规模向量搜索可以在商品硬件上实现高精度和低延迟,而无需占用大量 DRAM 空间。为此,它重新考虑了搜索的哪些部分必须快速哪些部分可以容忍较慢的访问速度

在高层次上,DISKANN 将访问频率最高的数据保留在内存中,而将访问频率较低的大型结构转移到磁盘上。这种平衡是通过几个关键的设计选择实现的。

1.使用 PQ 距离扩展候选列表

扩展候选列表是基于图的搜索中最频繁的操作符。每次扩展都需要估算查询向量与候选节点的邻居之间的距离。如果使用完整的高维向量来执行这些计算,就需要频繁地从磁盘随机读取数据,这在计算和 I/O 方面都是一项昂贵的操作符。

DISKANN 将向量压缩为乘积量化(PQ)代码并保存在内存中,从而避免了这一成本。PQ 代码比全向量小得多,但仍能保留足够的信息来近似估计距离。

在候选扩展过程中,DISKANN 会使用这些内存中的 PQ 代码计算距离,而不是从 SSD 中读取完整向量。这大大减少了图遍历过程中的磁盘 I/O,使搜索能快速高效地扩展候选对象,同时将大部分 SSD 流量保持在关键路径之外。

2.在磁盘上共定位全向量和邻居列表

并非所有数据都能压缩或近似访问。一旦确定了有希望的候选数据,搜索仍需要访问两类数据才能获得准确结果:

  • 邻居列表,用于继续图遍历

  • 完整(未压缩)向量,用于最终重排

与 PQ 代码相比,这些结构的访问频率较低,因此 DISKANN 将其存储在 SSD 上。为了尽量减少磁盘开销,DISKANN 将每个节点的邻居列表及其完整向量放在磁盘的同一物理区域。这确保了单次 SSD 读取就能检索到这两个数据。

通过共同定位相关数据,DISKANN 减少了搜索过程中所需的随机磁盘访问次数。这一优化提高了扩展和 Rerankers 的效率,尤其是在大规模扩展时。

3.并行节点扩展,提高固态硬盘利用率

基于图的 ANN 搜索是一个迭代过程。如果每次迭代只扩展一个候选节点,系统每次只进行一次磁盘读取,固态硬盘的大部分并行带宽就会闲置。为了避免这种低效率,DISKANN 在每次迭代中扩展多个候选节点,并向固态硬盘发送并行读取请求。这种方法能更好地利用可用带宽,并减少所需的迭代总数。

波束宽度比(beam_width_ratio)参数可控制并行扩展候选数据的数量:波束宽度 = CPU 内核数 × 波束宽度比例。比例越大,搜索范围越宽,可能会提高准确性,但同时也会增加计算量和磁盘 I/O。

为了抵消这一影响,DISKANN 引入了一个search_cache_budget_gb_ratio ,用于保留内存以缓存频繁访问的数据,从而减少 SSD 的重复读取。这些机制共同帮助 DISKANN 在准确性、延迟和 I/O 效率之间取得平衡。

为什么这很重要--以及限制出现在哪里

DISKANN 的设计是基于磁盘的向量搜索向前迈出的重要一步。通过将 PQ 代码保留在内存中,并将较大的结构推送到固态硬盘,与完全在内存中的图索引相比,它大大减少了内存占用。

同时,这种架构仍然依赖于始终在线的 DRAM来处理搜索关键数据。PQ 代码、缓存和控制结构必须保留在内存中,以保持高效遍历。当数据集增长到数十亿向量,部署增加了副本或区域时,内存需求仍会成为限制因素。

AISAQ就是要解决这一问题。

AISAQ 的工作原理和重要性

AISAQ 直接基于 DISKANN 背后的核心理念,但引入了一个关键的转变:它不再需要在 DRAM 中保留 PQ 数据。AISAQ 不再将压缩向量视为搜索关键、始终在内存中的结构,而是将其移至 SSD,并重新设计图数据在磁盘上的布局,以保持高效的遍历。

为了实现这一目标,AISAQ 对节点存储进行了重组,以便将图搜索过程中所需的数据(全向量、邻居列表和 PQ 信息)在磁盘上以优化访问定位的模式进行排列。这样做的目的不仅是将更多数据推送到更经济的磁盘上,而且不会破坏前面所述的搜索过程

为了满足不同的应用需求,AISAQ 提供了两种基于磁盘的存储模式:性能模式和规模模式。从技术角度看,这两种模式的主要区别在于搜索过程中如何存储和访问 PQ 压缩数据。从应用角度看,这两种模式可满足两种不同类型的要求:低延迟要求(在线语义搜索和推荐系统的典型要求)和超大规模要求(RAG 的典型要求)。

AISAQ 性能:优化速度

AISAQ-performance 将所有数据保存在磁盘上,同时通过数据主机托管保持较低的 I/O 开销。

在这种模式下

  • 每个节点的完整向量、边列表及其邻居的 PQ 代码都一起存储在磁盘上。

  • 访问一个节点仍然只需要读取一次固态硬盘,因为候选扩展和评估所需的所有数据都被集中在一起。

从搜索算法的角度来看,这与 DISKANN 的访问模式如出一辙。尽管所有搜索关键数据现在都在磁盘上,但候选扩展依然高效,运行时性能也不相上下。

需要权衡的是存储开销。因为一个邻居的 PQ 数据可能出现在多个节点的磁盘页面中,这种布局会带来冗余,并显著增加整体索引的大小。

因此,AISAQ-性能模式优先考虑低 I/O 延迟,而不是磁盘效率。从应用的角度来看,AiSAQ-Performance 模式可以提供在线语义搜索所需的 10 毫秒范围内的延迟。

AISAQ 规模:优化存储效率

AISAQ-Scale 采用了相反的方法。它旨在尽量减少磁盘使用量,同时仍将所有数据保存在固态硬盘上。

在这种模式下:

  • PQ 数据单独存储在磁盘上,没有冗余。

  • 这样就消除了冗余,并显著减少了索引大小。

权衡的结果是,访问一个节点及其邻居的 PQ 代码可能需要多次读取 SSD,从而增加了候选扩展期间的 I/O 操作符。如果不进行优化,这将大大降低搜索速度。

为了控制这一开销,AISAQ-Scale 模式引入了两项额外的优化:

  • PQ 数据重新排列,根据访问优先级对 PQ 向量进行排序,以提高定位性并减少随机读取。

  • DRAM 中的 PQ 缓存pq_read_page_cache_size ),用于存储频繁访问的 PQ 数据,避免重复读取磁盘的热条目。

通过这些优化,AISAQ-Scale 模式的存储效率大大高于 AISAQ-Performance,同时还能保持实用的搜索性能。该性能仍然低于 DISKANN,但没有存储开销(索引大小与 DISKANN 相似),内存占用也大大减少。从应用角度看,AiSAQ 提供了在超大规模下满足 RAG 要求的方法。

AISAQ 的主要优势

通过将所有搜索关键数据移至磁盘并重新设计数据访问方式,AISAQ 从根本上改变了基于图的向量搜索的成本和可扩展性状况。其设计具有三个显著优势。

1.DRAM 使用量最多可降低 3,200 倍

乘积量化能显著减小高维向量的大小,但在十亿分规模下,内存占用仍然很大。在传统设计中,即使经过压缩,PQ 代码在搜索过程中也必须保留在内存中。

例如,在具有 10 亿 128 维向量的基准SIFT1B 上,仅 PQ 代码就需要大约30-120 GB 的 DRAM(取决于配置)。存储未压缩的完整向量则需要额外的~480 GB。虽然 PQ 将内存使用量降低了 4-16倍,但剩余的占用空间仍然很大,足以影响基础设施成本。

AISAQ 完全消除了这一要求。通过将 PQ 代码存储在固态硬盘而不是 DRAM 上,内存不再被持久索引数据消耗。DRAM 仅用于候选列表和控制元数据等轻量级瞬时结构。在实践中,这将内存使用量从数十 GB 减少到约 10 MB。在具有代表性的十亿规模配置中,DRAM 从32 GB 降至 10 MB减少了 3200 倍

与 DRAM 相比,固态硬盘存储的单位容量成本大约是 DRAM的 1/30,因此这种转变对系统总成本产生了直接而巨大的影响。

2.无额外 I/O 开销

将 PQ 代码从内存移至磁盘通常会增加搜索过程中的 I/O 操作符数量。AISAQ 通过仔细控制数据布局和访问模式避免了这种情况。AISAQ 不会将相关数据分散到磁盘上,而是将 PQ 代码、全向量和邻居列表放在同一位置,以便一起检索。这确保了候选扩展不会带来额外的随机读取。

为了让用户控制索引大小和 I/O 效率之间的权衡,AISAQ 引入了inline_pq 参数,该参数决定每个节点内联存储多少 PQ 数据:

  • 较低的 inline_pq:较小的索引大小,但可能需要额外的 I/O

  • 较高的 inline_pq:索引大小较大,但保留了单读访问功能

当配置为inline_pq = max_degree 时,AISAQ 会在一次磁盘操作中读取节点的完整向量、邻居列表和所有 PQ 代码,与 DISKANN 的 I/O 模式相匹配,同时将所有数据保留在 SSD 上。

3.顺序 PQ 访问提高计算效率

在 DISKANN 中,扩展一个候选节点需要 R 次随机内存访问,以获取其 R 个邻居的 PQ 代码。AISAQ 通过单次 I/O 获取所有 PQ 代码并按顺序存储在磁盘上,从而消除了这种随机性。

顺序布局有两个重要优势:

  • 顺序 SSD 读取比分散随机读取快得多

  • 连续数据对缓存更友好,使 CPU 能够更高效地计算 PQ 距离。

这提高了 PQ 距离计算的速度和可预测性,有助于抵消在固态硬盘而非 DRAM 上存储 PQ 代码的性能成本。

AISAQ 与 DISKANN:性能评估

在了解了 AISAQ 与 DISKANN 在架构上的不同之处后,下一个问题就直截了当了:这些设计选择在实践中对性能和资源使用有何影响?本评估从搜索性能、内存消耗和磁盘使用这三个在十亿规模上最重要的方面对 AISAQ 和 DISKANN 进行了比较。

我们特别考察了 AISAQ 在内联 PQ 数据量 (INLINE_PQ) 发生变化时的表现。该参数直接控制着索引大小、磁盘 I/O 和运行效率之间的权衡。我们还在低维和高维向量工作负载上对这两种方法进行了评估,因为维数对距离计算成本和存储要求有很大影响

实验设置

所有实验都在单节点系统上进行,以隔离索引行为,避免网络或分布式系统效应的干扰。

硬件配置

  • CPU:英特尔® 至强® Platinum 8375C CPU @ 2.90GHz

  • 内存速度:3200 MT/s,类型:DDR4DDR4,大小:32 GB

  • 磁盘:500 GB NVMe SSD

索引构建参数

{
  "max_degree": 48,
  "search_list_size": 100,
  "inline_pq": 0/12/24/48,  // AiSAQ only
  "pq_code_budget_gb_ratio": 0.125,
  "search_cache_budget_gb_ratio": 0.0,
  "build_dram_budget_gb": 32.0
}

查询参数

{
  "k": 100,
  "search_list_size": 100,
  "beamwidth": 8
}

基准测试方法

DISKANN 和 AISAQ 均使用 Milvus 使用的开源向量搜索引擎Knowhere 进行测试。本次评估使用了两个数据集:

  • SIFT128D(1M 向量):著名的 128 维基准,常用于图像描述符搜索。(原始数据集大小 ≈ 488 MB)

  • Cohere768D(1M 向量):基于变换器语义搜索的典型 768 维嵌入集。(原始数据集大小 ≈ 2930 MB)

这些数据集反映了两种截然不同的真实世界场景:紧凑的视觉特征和大型语义嵌入。

搜索结果

Sift128D1M (全向量 ~488MB)

Cohere768D1M(全向量 ~2930MB)

分析结果

SIFT128D 数据集

在 SIFT128D 数据集上,当所有 PQ 数据被内联,使每个节点所需的数据完全容纳在一个 4 KB SSD 页面(INLINE_PQ = 48)中时,AISAQ 的性能可与 DISKANN 相媲美。在这种配置下,搜索过程中所需的每一条信息都被集中在一起:

  • 全向量512B

  • 邻居列表48 × 4 + 4 = 196B

  • 邻居的 PQ 代码:48 × (512B × 0.125) ≈ 3072B

  • 总计:3780B

由于整个节点位于一页内,每次访问只需一次 I/O,AISAQ 可以避免随机读取外部 PQ 数据。

然而,当只有部分 PQ 数据被内联时,其余的 PQ 代码必须从磁盘的其他地方获取。这就引入了额外的随机 I/O 操作,急剧增加了 IOPS 需求,导致性能大幅下降。

Cohere768D 数据集

在 Cohere768D 数据集上,AISAQ 的性能比 DISKANN 差。原因是一个 4 KB SSD 页面无法容纳 768 维向量:

  • 全向量3072B

  • 邻居列表48 × 4 + 4 = 196B

  • 邻居的 PQ 代码:48 × (3072B × 0.125) ≈ 18432B

  • 总计:21,700 B(≈ 6 页)

在这种情况下,即使所有 PQ 代码都被内联,每个节点也会跨越多个页面。虽然 I/O 操作符的数量保持一致,但每次 I/O 必须传输的数据要多得多,消耗 SSD 带宽的速度也快得多。一旦带宽成为限制因素,AISAQ 就无法跟上 DISKANN 的步伐,尤其是在高维工作负载中,每个节点的数据足迹增长很快。

注意:

AISAQ 的存储布局通常会将磁盘上的索引大小增加4 到 6 倍。这是一种有意的权衡:全向量、邻接表和 PQ 代码都集中在磁盘上,以便在搜索过程中实现高效的单页访问。虽然这增加了固态硬盘的使用量,但磁盘容量比 DRAM 便宜得多,而且在数据量大时更容易扩展。

在实践中,用户可以通过调整INLINE_PQ 和 PQ 压缩率来调整这种权衡。这些参数可以根据工作负载要求平衡搜索性能、磁盘占用空间和系统总体成本,而不是受制于固定的内存限制。

结论

现代硬件的经济性正在发生变化。DRAM 价格居高不下,而固态硬盘的性能却突飞猛进--PCIe 5.0 硬盘的带宽现已超过14 GB/s。因此,将搜索关键数据从昂贵的 DRAM 转移到价格低廉得多的 SSD 存储的架构正变得越来越有吸引力。由于固态硬盘每千兆字节的容量成本不到DRAM 的30 倍,这些差异不再是微不足道的,而是会对系统设计产生重大影响。

AISAQ 反映了这一转变。通过消除对大型、始终在线内存分配的需求,它使向量搜索系统能够根据数据大小和工作负载要求而不是 DRAM 限制进行扩展。这种方法符合 "全存储 "架构的大趋势,在这种架构中,快速固态硬盘不仅在持久性方面,而且在主动计算和搜索方面都发挥着核心作用。通过提供两种操作模式(性能和规模),AiSAQ 可以同时满足语义搜索(需要最低延迟)和 RAG(需要非常高的规模,但延迟适中)的要求。

这种转变不太可能仅限于向量数据库。类似的设计模式已经出现在图处理、时间序列分析,甚至部分传统关系系统中,因为开发人员重新思考了长期以来关于数据必须位于何处才能实现可接受性能的假设。随着硬件经济的不断发展,系统架构也将随之改变。

有关此处讨论的设计的更多详情,请参阅文档:

有问题或想深入了解最新 Milvus 的任何功能?加入我们的 Discord 频道或在 GitHub 上提交问题。您还可以通过 Milvus Office Hours 预订 20 分钟的一对一课程,以获得见解、指导和问题解答。

了解有关 Milvus 2.6 功能的更多信息

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    扩展阅读