大数跨境
0
0

向量搜索算法:HNSW vs DiskANN

向量搜索算法:HNSW vs DiskANN 王老师运营实战
2025-10-02
3
导读:向量搜索库(引擎)基本都实现了以HNSW为基础的搜索算法,基本可以解决在中小规模(千万级数据或以下)数据集场景下的全部问题,高召回、低延迟。但大规模场景下要求的内存资源较多,如果再要求高QPS,机器成
向量搜索库(引擎)基本都实现了以HNSW(Hierarchical Navigable Small World,层次可导航小世界)为基础的搜索算法,比如Elasticsearch/Milvus/Qdrant等,基本可以解决在中小规模(千万级数据或以下)数据集场景下的全部问题,高召回、低延迟。但大规模场景下要求的内存资源较多,如果再要求高QPS,机器成本会成为巨大的问题。
DiskANN则是针对海量向量数据集专门设计的算法,相较于HNSW的全内存设计,diskann对内存要求没有这么严格(这并不意味着可以完全不需要内存,仅表示可以大幅减少内存占用),对磁盘的IO有要求,至少要求SSD,最好可以上NVME。
HNSW

HNSW 是一种图-based ANN 算法,构建一个多层图结构

  • 图结构:将向量表示为图中的节点,每层是一个小世界图(节点通过长/短边连接,形成高效导航路径)。顶层(高层)节点稀疏,用于快速粗粒度导航;底层(低层)节点密集,用于精细搜索。层数通常为 log(N),其中 N 是向量数量。
  • 高层(L2/L1)的点数量较少,底层(L0)保护全部点。
  • 构建过程:插入向量时,从顶层开始贪婪搜索最近邻(efConstruction 参数控制候选邻居数),然后逐层下降,建立连接(每个节点的最大连接数为 M,通常 16~32)
  • 搜索过程:查询从顶层入口点开始,贪婪遍历到局部最小点,然后下降到下一层,重复直到底层。在底层进行 beam search(梁搜索)精炼结果。时间复杂度约为 O(log N),召回率高(可达 95%以上),但依赖内存随机访问
优势:搜索延迟低(微秒级),易于实现,支持增量更新(注意大规模更新需重建)。
局限:全内存依赖,图结构复杂导致高内存开销。
内存占用计算:所有向量 + 图连接(每个节点 M 个出边 + M 个入边指针)+ 元数据。
  • 估算:每个向量内存 ≈ 向量大小(d * 4 字节,d 为维度) + 图开销(2 * M * 4 字节指针)。
  • M=16-32 时,每节点额外 128-256 字节。
  • 1 百万 768 维向量:100w * 768 * 4 字节 + 100w * 2 * 16 * 4 字节 ≈2.98 GB,当前仅按最小来算,再加上元数据、数据结构对齐、其他辅助信息,内存占用会更高。
  • M 越大,开销越高;高召回需更大 ef 参数,增加临时内存。
DiskANN

DiskANN 是微软开发/开源的磁盘优化 ANN 算法,基于 Vamana 图一种扁平图结构,依然是图-base),旨在处理无法全载入内存的亿级数据集。它将索引存储在 SSD 上,仅在内存中保持压缩表示和导航结构。

  • 图结构:使用 Vamana 算法构建扁平搜索图(非层次),节点对应向量或簇,边连接“相对接近”的节点。Vamana 通过剪枝(pruning)优化图:每个节点连接 R 个最近邻(搜索半径),然后保留 L 个最优邻居(平衡图直径和度)。为减少磁盘 I/O,先用 k-means 聚类数据,分别构建子图并合并。
  • Vamana是单层图结构,可以添加更长的边。
  • 构建过程:预处理阶段在内存中构建 Vamana 图,然后量化向量(使用产品量化 PQ 等压缩),全图和完整向量存储到 SSD。图布局优化为连续块存储相关节点,减少随机读。
  • 搜索过程:分两阶段:(1) 在内存中用量化向量粗搜索 Vamana 图,找到候选节点(限制读入 SSD 的次数,通常 50-100 个);(2) 从 SSD 读入完整向量精炼结果。使用缓存机制避免重复 I/O。时间复杂度 O(log N),但受 SSD/NVME 磁盘延迟影响(毫秒级)。
优势:支持动态更新(插入/删除无需全重建),在有限内存下处理亿级数据,召回率高(95%+)。
局限:构建时间长,搜索延迟高于纯内存算法,受 SSD/NVME 磁盘性能影响。
Other
1. HNSW 是全内存的,为什么ES可以在内存较小的机器上工作?
堆外内存(pagecache,通过mmap读取),内存不足时性能非常差。
2. ES中,虽然是使用HNSW,但不断的在迭代量化能力,比如int8量化、BBQ量化方案,是否可以解决大规模数据的成本问题?
可以大幅降低内存成本,但可能带来召回率的下降,并且随机访问的问题并没有改善。


【声明】内容源于网络
0
0
王老师运营实战
跨境分享园 | 每天记录实用知识
内容 42170
粉丝 1
王老师运营实战 跨境分享园 | 每天记录实用知识
总阅读211.6k
粉丝1
内容42.2k