← 返回

DiskANN Explorer:十億級向量搜尋來自SSD

DiskANN 會將每個向量以微小的PQ- 壓縮副本儲存於RAM ,並將完整向量與圖存於 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 距離的束走法(Beam-walk):從固定起點(聚類中心)開始,維持大小為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 加上SSD 並搭配DiskANN 時,僅需數十 GB 的空間。若資料集能輕鬆容納於記憶體中,HNSW 仍是延遲較低的首選。

DiskANN 需要什麼硬體?

快速的NVMe SSD 是關鍵需求,因為查詢延遲主要取決於少數幾次隨機磁碟讀取(每次約100 µs)。RAM 的需求相當溫和:大致為PQ 的程式碼(例如每個向量32–64位元組)加上工作緩衝區。

DiskANN 是否比HNSW 等內存索引更慢?

就單次查詢而言,確實如此——通常為個位數的毫秒級,相較於記憶體內HNSW 的亞毫秒級,這是因為每次磁碟重新排序的速度約比RAM 存取慢100倍。其代價在於成本:DiskANN 處理相同資料集時,RAM 的消耗減少了一個數量級,同時仍能將召回率維持在90–95%以上。

儘管採用了PQ 壓縮,DiskANN 是如何維持高召回率的?

PQ 代碼僅用於引導圖走訪,而非產生最終分數。在返回結果之前,DiskANN 會從SSD 讀取頂尖候選向量的全精度向量,並精確地重新排序,藉此修正純粹基於PQ 的索引(如IVF_PQ )無法解決的量化誤差。

深入了解:請閱讀《DiskANN 》文件以了解設定要求,或參閱《Index Explained》以獲取完整的決策指南。

繼續探索