跳到主要内容
← 返回研究笔记
论文笔记 NeurIPS 2019 2019

06. DiskANN — 磁盘友好的向量近似最近邻

Microsoft NeurIPS 2019 — 把向量索引迁到 SSD,10x 容量、几乎不掉延迟

06. DiskANN — 十亿向量 SSD 索引(向量索引侧基础参考)

元数据

  • 论文标题:DiskANN: Fast Accurate Billion-point Nearest Neighbor Search on a Single Node
  • 出处:NeurIPS 2019(Microsoft Research)
  • 后续:FreshDiskANN(2021,流式更新)、Filtered DiskANN(SIGMOD 2024,带过滤)
  • 关键词:billion-scale ANN、graph-based、SSD-resident

一句话精髓

把图索引(类似 HNSW)的”邻居表”放在 SSD,只在 RAM 里保留极小的导航结构,实现单机十亿向量召回——证明了”向量索引完全可以驻留 SSD”。

解决的问题

向量近似最近邻(ANN)主流是图索引(HNSW、NSG),但图本身随向量数线性增长——10 亿向量的图占几百 GB,根本塞不进 RAM。已有磁盘方案要么召回率低,要么延迟爆炸。

关键 idea

设计内容
Vamana 图算法一种比 HNSW 更适合磁盘访问的单层图,搜索路径短
量化导航表 in RAM全量向量做 PQ(Product Quantization)放 RAM,用于快速过滤候选
完整向量 + 邻居表 in SSD真正的精确比较和图遍历从 SSD 拉
批量异步 IO一次 search 的多次 SSD 读用 io_uring/libaio 并发
构建侧用 RAM 构建子图 + 合并,避免一次性把全图放 RAM

关键架构图

RAM:
  ┌─────────────────────────────────────┐
  │ PQ-compressed vectors(全量,~10× 压缩)│
  │ Entry points(图入口)                │
  └─────────────────────────────────────┘
       │ 用 PQ 距离粗筛候选

SSD:
  ┌─────────────────────────────────────┐
  │ Full vectors(fp32/fp16)             │
  │ Adjacency list(邻居表)              │
  └─────────────────────────────────────┘
       │ 异步并发读真实邻居

   精确距离 → 更新候选堆 → 收敛返回 top-k

关键数据(论文公开)

  • 单机十亿规模,95%+ 召回 @ 5 ms 量级延迟(在当时 NVMe + 内存配置下)
  • RAM 占用从”数百 GB”降到 几十 GB 量级
  • Recall vs latency 曲线在 SSD 方案里长期是 SOTA

局限

  • 更新友好性差:原版只支持批量重建,FreshDiskANN 才补了流式更新
  • 单查询延迟对 SSD random read 敏感,P99 抖动比纯内存大
  • 没考虑带过滤(filter) 的查询(后续 Filtered DiskANN 才补)
  • 多模态/异构数据没原生支持(只有向量)

对本项目的启示

🌟 向量索引层级化的标杆——证明了”向量库不必塞 RAM”。本项目要把这套思路扩展:

  1. 三级化:DiskANN 是 RAM-SSD 二级,我们要做 HBM-DRAM-SSD 三级——HBM 放最热的几百万向量(GPU 可加速),DRAM 放 PQ-compressed,SSD 放完整
  2. 与 KV / 多模态共享存储池:DiskANN 假设它独占 SSD,但生产环境向量库要和 KV cache、原始图像 blob 共住——调度器要平衡几路 IO
  3. LLM 检索路径融合:Agent 长记忆 = 向量召回 + KV 复用,两件事的存储应该同源(参考 AlayaDB 笔记 07)
  4. 过滤 + 长记忆:Filtered DiskANN 已经做了”带 metadata 过滤的 ANN”,我们要做”按 user_id / 时间窗”的 Agent 级过滤
  5. 流式更新:FreshDiskANN 思想是对的,但 Agent 长记忆的更新频率可能比它假设的还高,需要重新考虑

横向对比

系统主索引位置更新支持过滤规模
HNSW(in-mem)RAM后处理千万级
DiskANNSSD仅批量十亿
FreshDiskANNSSD流式十亿
SPANN(NeurIPS’21)cluster + SSD中等部分十亿
AlayaDB(2025)多级 + LLM-aware流式LLM 集成TBD
本项目目标HBM/DRAM/SSD 三级 + Agent 语义过滤流式多维度TB 级

待精读

  • DiskANN 的 IO pattern(每次 search 读 SSD 多少次?块大小?)
  • Filtered DiskANN 怎么实现 attribute filter
  • FreshDiskANN 的更新放大系数