🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus 專為大規模(想想萬億)向量相似性搜尋而設計

Milvus 專為大規模(想想萬億)向量相似性搜尋而設計

  • Engineering
January 13, 2021
milvus

每天都有無法估計的關鍵業務洞察力,因為公司無法理解自己的資料而被浪費。據估計,文字、影像、視訊和音訊等非結構化資料佔所有資料的 80%,但其中只有 1% 會被分析。幸運的是,人工智慧 (AI)、開放源碼軟體和摩爾定律讓機器規模的分析比以往更容易進行。使用向量相似性搜尋,可以從大量非結構化資料集中擷取價值。此技術包括將非結構化資料轉換為特徵向量,一種可即時處理和分析的機器友善數值資料格式。

向量相似性搜尋的應用範圍涵蓋電子商務、安全、新藥開發等。這些解決方案依賴於包含數百萬、數十億、甚至數萬億向量的動態資料集,而它們的實用性往往取決於是否能傳回接近即時的結果。Milvus是一套開放原始碼的向量資料管理解決方案,從一開始就是為了有效管理和搜尋大型向量資料集而設計。本文將介紹 Milvus 的向量資料管理方法,以及該平台如何針對向量相似性搜尋進行最佳化。

跳至:

LSM 樹讓大規模的動態資料管理保持高效率

為了提供有效率的動態資料管理,Milvus 採用 log-structured merge-tree (LSM tree) 資料結構。LSM 樹非常適合存取有大量插入和刪除的資料。有關 LSM 樹有助於確保高效能動態資料管理的特定屬性的詳細資訊,請參閱其發明者所發表的原始研究。LSM 樹是許多流行資料庫所使用的底層資料結構,包括BigTableCassandraRocksDB

向量在 Milvus 中以實體形式存在,並儲存在段中。每個區段包含 1 到 ~8 百萬個實體。每個實體都有獨特的 ID 和向量輸入欄位,後者代表 1 到 32768 個維度。

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_2.png 部落格_Milvus 是專為大規模 (Think Trillion) 向量相似性搜尋而設計_2.png

資料管理經過最佳化,以達到快速存取和有限的破碎化

當接收到插入請求時,Milvus 會寫入新的資料到前寫日誌 (WAL) 中。請求成功記錄到日誌檔後,資料會寫入可變緩衝區。最後,三個觸發器之一會導致緩衝區變為不可變並刷新到磁碟:

  1. 定時間隔:資料會以定義的間隔 (預設為 1 秒) 定期刷新到磁碟。
  2. 緩衝區大小:累積資料達到可變緩衝區的上限 (128 MB)。
  3. 手動觸發:當用戶端呼叫 flush 函式時,資料會手動刷新到磁碟。

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_3.png 部落格_Milvus 專為大規模 (Think Trillion)向量相似性搜尋而打造_3.png

使用者可以一次新增數十或數百萬個向量,當插入新向量時會產生不同大小的資料檔案。這會造成資料分散,使資料管理變得複雜,並減慢向量相似性搜尋的速度。為了防止資料過度分散,Milvus 會不斷合併資料片段,直到合併後的檔案大小達到使用者設定的上限 (例如 1 GB)。舉例來說,在上限為 1 GB 的情況下,插入 1 億個 512 維向量將只會產生 ~200 個資料檔案。

在向量同時插入與搜尋的增量計算情境中,Milvus 會先讓新插入的向量資料立即可供搜尋,然後再與其他資料合併。在資料合併之後,原始的資料檔案會被移除,改用新建立的合併檔案進行搜尋。

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_4.png 部落格_Milvus 是專為大規模 (Think Trillion) 矢量相似性搜尋而建立_4.png

Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_5.png Blog_Milvus Was Built for Massive-Scale (Think Trillion) Vector Similarity Search_5.png

透過索引向量資料加速類似性搜尋

預設情況下,Milvus 在查詢向量資料時會依賴暴力搜尋。這種方法也稱為窮盡搜尋,每次執行查詢時都會檢查所有向量資料。對於包含數百萬或數十億個多維向量的資料集來說,這個過程太慢,在大多數類似性搜尋情況下都沒有用。為了幫助加快查詢時間,我們使用演算法來建立向量索引。索引的資料會被聚類,使類似向量靠得更近,讓相似性搜尋引擎只需查詢總資料的一部分,大幅縮短查詢時間,但卻犧牲了精確度。

Milvus 支援的向量索引類型大多使用近似近鄰 (ANN) 搜尋演算法。ANN 索引種類繁多,每種都需要在效能、準確性和儲存需求之間作出取捨。Milvus 支援量化、圖形和樹狀索引,所有這些索引都服務於不同的應用場景。請參閱 Milvus 的技術文件,瞭解更多關於建立索引及其支援的向量索引特定類型的資訊。

索引建立會產生大量的元資料。例如,為保存在 200 個資料檔案中的 1 億個 512 維向量建立索引,會產生額外的 200 個索引檔案。為了有效率地檢查檔案狀態、刪除或插入新檔案,需要一個有效率的元資料管理系統。Milvus 使用線上事務處理 (OLTP),這是一種非常適合更新和/或刪除資料庫中少量資料的資料處理技術。Milvus 使用 SQLite 或 MySQL 來管理元資料。

進一步了解 Milvus

Milvus 是一個開放原始碼的向量資料管理平台,目前正在LF AI & Data(Linux 基金會的傘式組織)進行孵化。Milvus 於 2019 年由發起該專案的資料科學軟體公司Zilliz 開源。有關 Milvus 的更多資訊,請參閱其網站。如果您對向量相似性搜尋有興趣,或使用 AI 來釋放非結構化資料的潛力,請加入我們在 GitHub 上的開放原始碼社群

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    繼續閱讀