← 返回

FLAT vsIVF :反向檔案索引的運作原理

相同資料、相同查詢——但採用不同的搜尋策略。拖曳查詢點、調整 nprobe,然後按下「執行搜尋」以觀察「IVF 」如何跳過大部分資料。

nprobe2
搜尋2 中的8 個簇
速度20ms
較低 = 較快的動畫效果

FLAT — 暴力搜尋

掃描每個點
比較
200 / 200
狀態
✓ 完成
召回率
100%

IVF — 倒排索引

搜尋nprobe 聚類
比較
33 / 33
狀態
✓ 完成
召回率@5
100%

發生了什麼事?

  1. 建構階段(已完成):K-means 將200 個點劃分為8 個聚類。每個聚類都有一個聚類中心(即 × 標記)。
  2. 步驟 1 — 評估聚類中心: IVF 首先計算查詢向量與每個聚類中心的距離。這僅需8 次比較,無論資料集大小為何。
  3. 步驟 2 — 選取最接近的「nprobe 」聚類:這些聚類會亮起。其餘所有聚類將完全跳過。
  4. 步驟 3 — 掃描選定聚類內的點:僅約50 個點,佔總點數200 。

權衡:nprobe → 掃描更多聚類 → 召回率更高但速度較慢。較小 nprobe → 速度較快,但可能會遺漏位於未掃描聚類中的真實鄰居。試著將 nprobe = 1 並將查詢拖曳至叢集邊界附近,觀察召回率如何下降。

何謂「IVF 」索引?

IVF (倒排檔)是一種基於聚類的近似最近鄰索引。在建置階段,k-means 會將所有向量劃分為 nlist 簇,每個簇由其聚類中心代表。在查詢時,搜尋會先將查詢向量僅與聚類中心進行比對,挑選最接近的 nprobe 聚類,並僅掃描其中所含的向量——跳過其餘所有內容。

Milvus 提供數種IVF 變體,這些變體以記憶體為代價來換取精確度: IVF_FLAT 儲存原始向量(最精確), IVF_SQ8 將每個維度壓縮為一個位元組(記憶體用量減少約 4 倍,回憶率略有犧牲),以及 IVF_PQ 應用乘積量化以實現更高的壓縮率,但會付出更大的召回率代價。

調校nlist 以及nprobe

  • nlist (建構時間):k-means 聚類的數量。常見的起始值為 N 個向量時設定為4 × sqrt(N) 。聚類數量越多,每個聚類的規模就越小——掃描速度雖會加快,但質心掃描的計算成本會增加,且邊界效應也會隨之增強。
  • nprobe (查詢時間):每次查詢需掃描的叢集數量。這是控制召回率與延遲的主要參數——正是上方滑桿所控制的內容。建議從 nlist / 16 開始,並逐步增加,直到召回率達到您的目標為止。
  • 變體選擇:從IVF_FLAT 開始。當記憶體不足時,切換至IVF_SQ8 ;僅當資料集過大以致無法使用SQ8 時,才切換至IVF_PQ —— 並在每次降階後,使用您自己的資料驗證召回率。

IVF vsHNSW vsDiskANN

IVF 建置速度快、在向量之外的記憶體開銷小,且易於理解——但在相同的召回率目標下,HNSW 通常能在記憶體中更快地回應查詢。當您經常重建索引(建置速度至關重要)、記憶體受限(IVF_SQ8/IVF_PQ ),或希望獲得可預測且可調校的掃描行為時,請選擇IVF 。 若要獲得最低的記憶體內查詢延遲,請選擇HNSW ;當向量完全無法容納於RAM 時,則請選擇DiskANN 。

常見問題

IVF_FLAT 、IVF_SQ8 和IVF_PQ 之間有何區別?

這三者皆以相同方式對向量進行聚類;其差異在於向量在聚類內的儲存方式。「IVF_FLAT 」保留原始浮點向量(回溯率最佳)。「IVF_SQ8 」將每個維度量化為 8 位元,在回溯率略有損失的情況下,將記憶體使用量減少約 4 倍。「IVF_PQ 」則以短的乘積量化碼取代向量,以達到最高壓縮率,但回溯率損失最大。

我該如何選擇nlist 和nprobe ?

一個常見的經驗法則為:當向量數為 N 時,nlist = 4 × sqrt(N),接著在查詢時調整nprobe 。較大的nprobe 會掃描更多聚類:召回率越高,延遲也越高。建議從nlist/16 開始,並逐步增加,直到保留查詢集的召回率達到您的目標為止。

為何「IVF 」會遺漏某些真正的最近鄰?

這是由於叢集邊界所致。若查詢點位於叢集邊緣附近,其部分真實鄰居可能位於相鄰的叢集中,而該叢集並未包含在掃描的nprobe 叢集之中。您可在視覺化中拖曳查詢點至邊界附近(nprobe =1),即可觀察到此現象。

我應該使用IVF 還是HNSW ?

在相同召回率下,HNSW 通常在記憶體內搜尋時速度較快,但會佔用更多記憶體且建構速度較慢。IVF 建構速度快,且在記憶體不足時能與量化技術(SQ8/PQ )良好搭配。對於完全超出RAM 限制的資料集,請改考慮使用DiskANN 。

深入了解:請參閱IVF_FLAT 文件以了解索引參數,或參閱《索引詳解》以獲取完整的決策指南。

繼續探索