DiskANN 會將每個向量以微小的PQ- 壓縮副本儲存於RAM ,並將完整向量與圖存於 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 加上SSD 並搭配DiskANN 時,僅需數十 GB 的空間。若資料集能輕鬆容納於記憶體中,HNSW 仍是延遲較低的首選。
快速的NVMe SSD 是關鍵需求,因為查詢延遲主要取決於少數幾次隨機磁碟讀取(每次約100 µs)。RAM 的需求相當溫和:大致為PQ 的程式碼(例如每個向量32–64位元組)加上工作緩衝區。
就單次查詢而言,確實如此——通常為個位數的毫秒級,相較於記憶體內HNSW 的亞毫秒級,這是因為每次磁碟重新排序的速度約比RAM 存取慢100倍。其代價在於成本:DiskANN 處理相同資料集時,RAM 的消耗減少了一個數量級,同時仍能將召回率維持在90–95%以上。
PQ 代碼僅用於引導圖走訪,而非產生最終分數。在返回結果之前,DiskANN 會從SSD 讀取頂尖候選向量的全精度向量,並精確地重新排序,藉此修正純粹基於PQ 的索引(如IVF_PQ )無法解決的量化誤差。
深入了解:請閱讀《DiskANN 》文件以了解設定要求,或參閱《Index Explained》以獲取完整的決策指南。