← 返回

DiskANN Explorer:十亿量级向量搜索来自SSD

DiskANN 会为RAM 中的每个向量保留一个微小的PQ 压缩副本,并在SSD 上保存完整的向量及图结构。搜索过程通过低成本的RAM 比较遍历图,随后通过少量高成本的磁盘读取对顶级候选向量进行重新排序。

DiskANN 存在的理由:内存壁垒

RAMPQ 代码(32 B/vec)3.2 GB
磁盘完整向量 + 图(3072 B/vec)307.2 GB
100M 向量 ×768 维度磁盘 /RAM ≈ 96×

单个SSD 即可轻松容纳磁盘端数据。RAM 端可适配任何笔记本电脑。若没有PQ 这一技巧,您甚至需要一台配备数百GBRAM 的服务器才能加载该数据集。

R5
图的度
L8
候选向量集
重新排序5
磁盘读取
速度420ms
每一步
PQ 比较(RAM) 在候选向量池中 磁盘重新排序 top-K 结果
当前步骤
30 / 30
搜索完成。 Top-3: [1, 28, 27].

迄今为止的成本

RAM PQ 比较20≈ 20 µs
SSD 读5≈ 500 µs
总延迟0.52 ms
建模基于 PQ ≈ 1 µs, SSD ≈ 100 µs。实际数值取决于硬件。

搜索统计

已访问
20 / 36
重新排序
5
Top-3
[1, 28, 27]

DiskANN 的工作原理

  1. 构建Vamana 图:一个单层kNN图(度数R ),针对顺序磁盘布局进行了优化。无层级结构——仅有一个大型图。
  2. 量化与拆分存储:每个向量都会获得一个微小的PQ 代码(例如32字节)。PQ 代码存储在RAM 中。完整的向量和图边存储在SSD 中。
  3. 采用PQ 距离的束走法:从固定入口点(聚类中心)开始,维持一个大小为L 的候选向量池。弹出最佳向量,扩展其邻域,仅使用in-RAM PQ 代码估算距离。走法过程中不进行磁盘I/O。
  4. 在磁盘上对入围者进行重新排序:候选向量池中排名前列的条目,其距离值此前通过PQ近似计算得出。从磁盘读取其完整向量,并重新计算精确距离以修正排序结果。
  5. 返回top-K 。总磁盘 I/O = 少量随机读取,通常少于 20 次。

该交易

  • 为何具有可扩展性: RAM 仅存储压缩代码。一个包含 10 亿个向量的数据集,其 32 字节的PQ 格式数据约需 32 GBRAM —— 完全可以容纳在一台工作站上。
  • 为何它比HNSW 慢: SSD 的随机读取速度比RAM 慢约 100 倍。即使只有约 10 次读取,查询延迟也主要由磁盘性能决定。
  • 为何其召回率仍优于IVF_PQ :重新排序步骤可纠正纯PQ 方法无法修复的量化误差。

思维模型: PQ 是一种低成本的“这个邻域有前景吗?”测试。磁盘读取则是高成本的“让我实际验证一下”检查。DiskANN 主要通过低成本测试完成大部分工作。

什么是DiskANN ?

DiskANN 是一种基于图的近似最近邻索引,专为无法放入RAM 的数据集设计。它构建了一个单层Vamana 图,其布局旨在实现高效的磁盘访问;在内存中为每个向量保留一个微小的乘积量化(PQ )代码;并将全精度向量和图边存储在SSD 上。 搜索过程通过低成本的RAM PQ 比较在图中导航,仅在对少数入围候选结果进行重新排序时才访问磁盘。

在Milvus 中,DiskANN 支持磁盘索引选项:拥有数十(而非数百)吉字节RAM 的机器上,可对数十亿级别的集合进行搜索,而磁盘重新排序步骤则使召回率保持在接近内存图索引的水平。

旋钮控制的内容

  • R (图度数、构建时间): Vamana 图中每个节点的最大边数。R值越高,连通性和召回率越好,但代价是磁盘上图的体积更大且构建速度更慢。
  • L /search_list (查询时间):在束搜索过程中维护的候选向量池——这是影响召回率/延迟的主要参数,相当于HNSW 中的ef 。其值必须至少等于您的top-K 。
  • 重新排序预算:有多少名决赛选手的完整向量会从SSD 中获取以进行精确评分。每次获取都相当于一次随机的磁盘读取,因此这是查询延迟的主要来源——也是PQ 近似误差得到纠正的地方。

DiskANN vsHNSW vsIVF

当数据集(或内存占用)超出RAM 的处理能力时,请选择DiskANN :它仅需极少内存即可处理高召回率的查询,但会以毫秒级延迟为代价,该延迟主要由SSD 读取操作引起。如果所有数据都能轻松装入内存,HNSW 的响应速度更快。如果您需要快速构建索引或在不涉及磁盘的情况下节省适度内存,IVF 的变体方案则介于两者之间。

常见问题

何时应使用 `DiskANN ` 而不是 `HNSW`?

当您的向量不再能容纳于RAM 中——或者存储它们的RAM 所需成本超出您的预算时。10亿个768维浮点向量在HNSW 中需要约3 TB内存,但在RAM 中仅需数十GB,外加一个SSD ,并采用DiskANN 。如果数据集能轻松容纳于内存中,HNSW 仍是延迟更低的选择。

DiskANN 需要什么样的硬件?

快速NVMe SSD 是关键要求,因为查询延迟主要由少数随机磁盘读取操作(每次约100 µs)所决定。RAM 需求较为温和:大致相当于PQ 代码(例如每个向量32–64字节)加上工作缓冲区。

DiskANN 是否比HNSW 这样的内存索引更慢?

就单次查询而言,确实如此——通常为个位数的毫秒级,而内存中的HNSW 则在亚毫秒级,因为每次磁盘重新排序的速度比RAM 访问慢约100倍。其权衡在于成本:DiskANN 处理同一数据集时,RAM 的消耗减少了一个数量级,同时将召回率保持在90–95%以上。

尽管采用了PQ 压缩,DiskANN 是如何保持高召回率的?

PQ 代码仅用于引导图遍历,而非生成最终分数。在返回结果之前,DiskANN 会从SSD 读取顶级候选向量的全精度向量,并对其进行精确重新排序,从而纠正了像IVF_PQ 这类基于纯PQ 的索引无法解决的量化误差。

深入了解:请阅读《DiskANN 》文档以了解设置要求,或参阅《Index Explained》获取完整的决策指南。

继续探索