磁碟上索引
本文介紹一種名為 DiskANN 的磁碟索引演算法。DiskANN 基於 Vamana 圖形,能夠在大型資料集中進行高效率的搜尋。
為了改善查詢效能,您可以為每個向量欄位指定索引類型。
目前,一個向量欄位只支援一種索引類型。切換索引類型時,Milvus 會自動刪除舊索引。
先決條件
要使用 DiskANN,請注意
- DiskANN 預設為停用。如果您偏好記憶體索引而非磁碟索引,建議您停用此功能以獲得更好的效能。
- 若要停用此功能,您可以在 milvus 配置文件中將
queryNode.enableDisk
改為false
。 - 若要再次啟用,您可以將
queryNode.enableDisk
設為true
。
- 若要停用此功能,您可以在 milvus 配置文件中將
- Milvus 實例在 Ubuntu 18.04.6 或更新版本上執行。
- Milvus 資料路徑應掛載至 NVMe SSD,以獲得完整效能:
- 對於 Milvus 獨立實例,資料路徑應該是實例執行所在容器中的/var/lib/milvus/data。
- 對於 Milvus 叢集實例,資料路徑應該是 QueryNodes 和 IndexNodes 執行所在容器中的/var/lib/milvus/data。
限制
要使用 DiskANN,請確保您
- 在資料中只使用至少 1 維的浮動向量。
- 僅使用 Euclidean Distance (L2)、Inner Product (IP) 或 COSINE 來測量向量之間的距離。
索引和搜尋設定
索引建立參數
建立 DiskANN 索引時,請使用
DISKANN
作為索引類型。不需要索引參數。搜尋參數
參數 說明 範圍 預設值 search_list
候選名單的大小,較大的大小提供較高的召回率,但效能會降低。 [topk, int32_max] (最大值) 16
DiskANN 相關的 Milvus 配置
DiskANN 是可調整的。您可以在${MILVUS_ROOT_PATH}/configs/milvus.yaml
中修改 DiskANN 相關的參數,以改善其效能。
...
DiskIndex:
MaxDegree: 56
SearchListSize: 100
PQCodeBugetGBRatio: 0.125
SearchCacheBudgetGBRatio: 0.125
BeamWidthRatio: 4.0
...
參數 | 說明 | 值範圍 | 預設值 |
---|---|---|---|
MaxDegree | Vamana 圖形的最大度數。 值越大,召回率越高,但會增加索引的大小和建立索引的時間。 | [1, 512] | 56 |
SearchListSize | 候選名單的大小。 較大值會增加建立索引所花費的時間,但可提供較高的召回率。 除非您需要減少建立索引的時間,否則請將它設定為小於 MaxDegree 的值。 | [1, int32_max] | 100 |
PQCodeBugetGBRatio | PQ 代碼的大小限制。 較大值可提供較高的召回率,但會增加記憶體使用量。 | (0.0, 0.25] | 0.125 |
SearchCacheBudgetGBRatio | 快取節點數與原始資料的比率。 較大值可改善索引建立效能,但會增加記憶體使用量。 | [0.0, 0.3) | 0.10 |
BeamWidthRatio | 每次搜索迭代的最大 IO 請求數目與 CPU 數目之間的比率。 | [1,max(128 / CPU 數目,16)] 4.0 | 4.0 |
疑難排解
如何處理
io_setup() failed; returned -11, errno=11:Resource temporarily unavailable
錯誤?Linux 核心提供異步非阻塞 I/O (Asynchronous non-blocking I/O, AIO) 功能,允許一個進程同時啟動多個 I/O 作業,而不必等待任何一個完成。這有助於提升可重複處理和 I/O 的應用程式的效能。
可以使用 proc 檔案系統中的
/proc/sys/fs/aio-max-nr
虛擬檔案調整效能。aio-max-nr
參數決定允許的最大並發要求數目。aio-max-nr
預設為65535
,您可以將其設定為10485760
。