HM-ANN: Efficient Billion-Point Nearest Neighbor Search on Heterogenous Memory 是一篇被 2020 年 Conference on Neural Information Processing Systems (NeurIPS 2020). 本文提出了一種基於圖的相似性搜索的新型算法,稱爲 HM-ANN。
該算法在現代硬件設置中同時考慮了內存異質性和數據異質性。HM-ANN 可以在單臺機器上實現十億級的相似性搜索,同時沒有采用任何數據壓縮技術。異質存儲器(HM)代表了快速但小的 DRAM 和緩慢但大的 PMem 的組合。
動機
還有其他的變通方法來避免讓 DRAM 以原始格式存儲十億規模的數據集。當一個數據集太大,無法裝入單臺機器的 DRAM 時,就會使用數據壓縮的方法,如對數據集的點進行乘積量化。但是,由於量化過程中精度的損失,這些索引在壓縮數據集上的召回率通常很低。Subramanya 等人[1]探索了利用固態硬盤 SSD 實現十億級 ANN 搜索的方法,該方法稱爲 Disk-ANN ,其中原始數據集存儲在 SSD 上,壓縮後的表示方法存儲在 DRAM 上。
Heterogeneous Memory 的介紹
內存/存儲的層次結構與HM
圖片來源: http://nvmw.ucsd.edu/nvmw2021-program/nvmw2021-data/nvmw2021-paper63-presentation_slides.pdf
PMem 像 SSD 一樣可以在斷電情況下持久化數據,又像 DRAM 一樣可由 CPU 直接對每一個 Byte 尋址。Renen 等人 [2] 發現,在配置的實驗環境中,PMem 的讀取帶寬比 DRAM 低 2.6 倍,而寫入帶寬低 7.5 倍。
HM-ANN 的設計
圖片來源: https://arxiv.org/pdf/1603.09320.pdf
上層的元素,只包括數據集的子集,消耗了整個存儲消耗的一小部分。這一現象使它們非常合適去被放置在 DRAM 中。這樣一來,HM-ANN 上的大部分搜索都會發生在上層,這就最大限度地利用了 DRAM 的快速訪問特性。然而,在 HNSW 中大多數搜索發生在底層。
-
最底層承載着整個數據集,這使得它適合被放在 PMem 中。由於訪問第 0 層的速度較慢,最好是每個查詢只訪問一小部分,並降低訪問頻率。
圖構建算法
HM-ANN 沒有使用 HNSW 的 random selection for promotion,而是使用高度推廣策略 high-degree promotion strategy,將第 0 層中度數最高的元素推廣到第1層。對於更高的層,HM-ANN 根據 promotion rate 將高度數節點推廣到上層。
HM-ANN 將更多的節點從第 0 層 promote 到第 1 層,併爲第 1 層的每個元素設置更大的最大鄰居數。上層節點的數量是由可用的 DRAM 空間決定的。由於第 0 層不存儲在 DRAM 中,因此使存儲在 DRAM 中的每一層更密集,可以提高搜索質量。
圖搜索算法
HM-ANN的索引搜索例子
efSearchL1
,這限制了第 1 層的 candidate list 的大小。HNSW 只使用一個 entry point ,但在 HM-ANN 中,第 0 層和第 1 層之間的關係比任何其他兩層之間處理得更加特別。
HM-ANN 在 DRAM 中實現了一個 software-managed buffer,在 DRAM 訪問發生之前從 PMem 中 prefetch 數據。當搜索第 1 層時,HM-ANN 異步地將 efSearchL1
中的那些 candidates 的鄰居元素及其在第 1 層的連接從 PMem 複製到 buffer。當第 0 層的搜索發生時,一部分數據已經在 DRAM 中被 prefetched 了,這就隱藏了訪問 PMem 的延遲,導致了更短的查詢時間。這與 HM-ANN 的設計目標相吻合,即大部分內存訪問發生在 DRAM 中,而 PMem 中的內存訪問被減少。
性能測試
在 HM-ANN 這個論文中,對這個新索引算法進行了廣泛的評估。所有的實驗都是在一臺裝有 Intel Xeon Gold 6252 [email protected] 的機器上進行的。它使用DDR4(96GB)作爲快速內存,Optane DC PMM(1.5TB)作爲慢速內存。對五個數據集進行了評估。BIGANN、DEEP1B、SIFT1M、DEEP1M 和 GIST1M。對於十億規模的測試,包括以下方案:基於十億規模量化的方法(IMI+OPQ 和 L&C),以及非壓縮的方法(HNSW 和 NSG)。
十億規模的算法比較
在 Figure 1 中,對不同索引的查詢性能進行了分析。圖1(a)和(b)顯示,HM-ANN 在 1 毫秒內取得了 >95% 的 top-1 召回率。圖1(c)和(d)顯示, HM-ANN 在 4 毫秒內獲得了 >90% 的 top-100 召回率。與其他所有方法相比,HM-ANN 提供了更好的 latency-recall 性能。
百萬規模的算法比較
在 Figure 2 中,不同索引的查詢性能在純 DRAM 環境下進行了分析。HNSW、NSG 和 HM-ANN 是用一個適合 DRAM 容量的 300 萬規模的數據集進行評估的。HM-ANN 仍然取得了比 HNSW 更好的查詢性能。原因是,當它們都旨在實現 99% 的召回率目標時,HM-ANN 的距離計算總數(平均 850 次/查詢)要少於 HNSW(平均 900 次/查詢)。
High-degree promotion的效果
內存管理技術的性能
結論
一種新的基於圖的索引和搜索算法,稱爲 HM-ANN,將基於圖的 ANN 搜索算法的分層設計與 HM 中的快慢內存異質性進行了映射。評估表明,HM-ANN 是一種新的最先進的適用於十億數據集的索引。
Github @Milvus-io|CSDN @Zilliz Planet|Bilibili @Zilliz-Planet
Zilliz 以重新定義數據科學爲願景,致力於打造一家全球領先的開源技術創新公司,並通過開源和雲原生解決方案爲企業解鎖非結構化數據的隱藏價值。
Zilliz 構建了 Milvus 向量數據庫,以加快下一代數據平臺的發展。Milvus 目前是 LF AI & Data 基金會的畢業項目,能夠管理大量非結構化數據集。我們的技術在新藥發現、計算機視覺、推薦引擎、聊天機器人等方面具有廣泛的應用。
本文分享自微信公衆號 - ZILLIZ(Zilliztech)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。