DiskANN 会为RAM 中的每个向量保留一个微小的PQ 压缩副本,并在SSD 上保存完整的向量及图结构。搜索过程通过低成本的RAM 比较遍历图,随后通过少量高成本的磁盘读取对顶级候选向量进行重新排序。
单个SSD 即可轻松容纳磁盘端数据。RAM 端可适配任何笔记本电脑。若没有PQ 这一技巧,您甚至需要一台配备数百GBRAM 的服务器才能加载该数据集。
PQ ≈ 1 µs, SSD ≈ 100 µs。实际数值取决于硬件。R ),针对顺序磁盘布局进行了优化。无层级结构——仅有一个大型图。L 的候选向量池。弹出最佳向量,扩展其邻域,仅使用in-RAM PQ 代码估算距离。走法过程中不进行磁盘I/O。思维模型: PQ 是一种低成本的“这个邻域有前景吗?”测试。磁盘读取则是高成本的“让我实际验证一下”检查。DiskANN 主要通过低成本测试完成大部分工作。
DiskANN 是一种基于图的近似最近邻索引,专为无法放入RAM 的数据集设计。它构建了一个单层Vamana 图,其布局旨在实现高效的磁盘访问;在内存中为每个向量保留一个微小的乘积量化(PQ )代码;并将全精度向量和图边存储在SSD 上。 搜索过程通过低成本的RAM PQ 比较在图中导航,仅在对少数入围候选结果进行重新排序时才访问磁盘。
在Milvus 中,DiskANN 支持磁盘索引选项:拥有数十(而非数百)吉字节RAM 的机器上,可对数十亿级别的集合进行搜索,而磁盘重新排序步骤则使召回率保持在接近内存图索引的水平。
R (图度数、构建时间): Vamana 图中每个节点的最大边数。R值越高,连通性和召回率越好,但代价是磁盘上图的体积更大且构建速度更慢。L /search_list (查询时间):在束搜索过程中维护的候选向量池——这是影响召回率/延迟的主要参数,相当于HNSW 中的ef 。其值必须至少等于您的top-K 。当数据集(或内存占用)超出RAM 的处理能力时,请选择DiskANN :它仅需极少内存即可处理高召回率的查询,但会以毫秒级延迟为代价,该延迟主要由SSD 读取操作引起。如果所有数据都能轻松装入内存,HNSW 的响应速度更快。如果您需要快速构建索引或在不涉及磁盘的情况下节省适度内存,IVF 的变体方案则介于两者之间。
当您的向量不再能容纳于RAM 中——或者存储它们的RAM 所需成本超出您的预算时。10亿个768维浮点向量在HNSW 中需要约3 TB内存,但在RAM 中仅需数十GB,外加一个SSD ,并采用DiskANN 。如果数据集能轻松容纳于内存中,HNSW 仍是延迟更低的选择。
快速NVMe SSD 是关键要求,因为查询延迟主要由少数随机磁盘读取操作(每次约100 µs)所决定。RAM 需求较为温和:大致相当于PQ 代码(例如每个向量32–64字节)加上工作缓冲区。
就单次查询而言,确实如此——通常为个位数的毫秒级,而内存中的HNSW 则在亚毫秒级,因为每次磁盘重新排序的速度比RAM 访问慢约100倍。其权衡在于成本:DiskANN 处理同一数据集时,RAM 的消耗减少了一个数量级,同时将召回率保持在90–95%以上。
PQ 代码仅用于引导图遍历,而非生成最终分数。在返回结果之前,DiskANN 会从SSD 读取顶级候选向量的全精度向量,并对其进行精确重新排序,从而纠正了像IVF_PQ 这类基于纯PQ 的索引无法解决的量化误差。
深入了解:请阅读《DiskANN 》文档以了解设置要求,或参阅《Index Explained》获取完整的决策指南。