Milvus 是什麼?
Milvus 是一個高效能、高度可擴充的向量資料庫,可在從筆記型電腦到大型分散式系統等各種環境中有效率地執行。它同時以開源軟體和雲端服務的形式提供。
Milvus 是 LF AI & Data Foundation 的開源專案,以 Apache 2.0 授權釋出。大多數的貢獻者都是來自高效能運算 (HPC) 社群的專家,專精於建立大型系統和優化硬體感知程式碼。核心貢獻者包括來自 Zilliz、ARM、NVIDIA、AMD、Intel、Meta、IBM、Salesforce、阿里巴巴和微軟的專業人士。
非結構化資料、嵌入式與 Milvus
非結構化資料,例如文字、圖片和音訊,格式各異,並帶有豐富的基本語意,因此分析起來極具挑戰性。為了管理這種複雜性,我們使用 embeddings 將非結構化資料轉換成可捕捉其基本特徵的數值向量。這些向量隨後會儲存在向量資料庫中,以實現快速、可擴展的搜尋和分析。
Milvus 提供強大的資料建模功能,讓您能夠將非結構化資料或多模式資料組織成結構化的集合。它支援各種不同屬性建模的資料類型,包括常見的數值和字元類型、各種向量類型、陣列、集合和 JSON,讓您省去維護多個資料庫系統的麻煩。
非結構化資料、嵌入與 Milvus
Milvus 提供三種部署模式,涵蓋各種資料規模 - 從 Jupyter Notebooks 中的本機原型,到管理數百億向量的大型 Kubernetes 集群:
- Milvus Lite 是一個 Python 函式庫,可輕鬆整合至您的應用程式。Milvus Lite 是 Milvus 的輕量版,非常適合在 Jupyter Notebooks 中快速建立原型,或在資源有限的邊緣裝置上執行。瞭解更多資訊。
- Milvus Standalone 是單機伺服器部署,所有元件都綁定在單一 Docker 映像檔中,方便部署。進一步瞭解。
- Milvus Distributed 可部署在 Kubernetes 集群上,其雲端原生架構專為十億級或更大規模的場景而設計。此架構可確保關鍵元件的備援。進一步瞭解。
是什麼讓 Milvus 如此快速?
Milvus 從一開始就被設計成高效率的向量資料庫系統。在大多數情況下,Milvus 的效能比其他向量資料庫高出 2 至 5 倍 (請參閱 VectorDBBench 結果)。這種高效能是幾個關鍵設計決策的結果:
硬體感知最佳化:為了讓 Milvus 適用於各種硬體環境,我們特別針對許多硬體架構和平台優化了其效能,包括 AVX512、SIMD、GPU 和 NVMe SSD。
進階搜尋演算法:Milvus 支援廣泛的記憶體內與磁碟上索引/搜尋演算法,包括 IVF、HNSW、DiskANN 等,這些演算法都經過深度最佳化。與 FAISS 和 HNSWLib 等熱門實作相比,Milvus 的效能提升了 30%-70%。
C++ 搜尋引擎:向量資料庫超過 80% 的效能取決於其搜尋引擎。由於 C++ 語言的高效能、低階最佳化和有效率的資源管理,Milvus 使用 C++ 來處理這個關鍵元件。最重要的是,Milvus 整合了許多硬體感知的程式碼最佳化,從匯編等級向量化到多執行緒平行化和排程,以充分發揮硬體能力。
面向列:Milvus 是一個面向列的向量資料庫系統。其主要優勢來自資料存取模式。在執行查詢時,面向列的資料庫只讀取查詢所涉及的特定欄位,而不是整行,這大大減少了存取的資料量。此外,針對以列為基礎的資料進行的作業可以輕鬆地向量化,讓作業可以一次套用整個列,進一步提升效能。
是什麼讓 Milvus 具備如此高的可擴展性?
2022 年,Milvus 支援十億級向量;2023 年,Milvus 以一致的穩定性擴充至百億級向量,為超過 300 家主要企業的大型應用程式提供支援,包括 Salesforce、PayPal、Shopee、Airbnb、eBay、NVIDIA、IBM、AT&T、LINE、ROBLOX、Inflection 等。
Milvus 的雲原生與高度解耦的系統架構,可確保系統能隨著資料成長而持續擴充:
Milvus 高度解耦的系統架構
Milvus 本身是完全無狀態的,因此可借助 Kubernetes 或公有雲輕鬆擴展。此外,Milvus 各個元件都有很好的解耦功能,其中最重要的三個任務 - 搜尋、資料插入和索引/壓縮 - 都被設計成容易並行化的流程,並將複雜的邏輯分離出來。這可確保相對應的查詢節點、資料節點和索引節點都能獨立擴充,以最佳化效能和成本效益。
Milvus 支援的搜尋類型
Milvus 支援多種類型的搜尋功能,以滿足不同用例的需求:
- ANN 搜尋:找出最接近您查詢向量的前 K 個向量。
- 過濾搜尋:在指定過濾條件下執行 ANN 搜尋。
- 範圍搜尋:尋找距離您的查詢向量指定半徑範圍內的向量。
- 混合搜尋:根據多向量領域進行 ANN 搜尋。
- 全文搜尋:根據 BM25 進行全文搜尋。
- 重新排序:根據附加條件或輔助演算法調整搜尋結果的順序,精煉最初的 ANN 搜尋結果。
- 擷取:依據主鍵擷取資料。
- 查詢:使用特定的表達方式擷取資料。
全面的功能集
除了上述的關鍵搜尋功能外,Milvus 還提供了一系列圍繞 ANN 搜尋實施的功能,以便您能充分利用其功能。
API 與 SDK
- RESTful API(官方)
- PyMilvus(Python SDK) (官方)
- Go SDK(官方)
- Java SDK(官方)
- Node.js(JavaScript) SDK (官方)
- C#(微軟提供)
進階資料類型
除了原始資料類型外,Milvus 還支援各種進階資料類型及其各自適用的距離度量。
加速
搜尋演算法 Milvus 支援一組可調整的索引和搜尋演算法。如需詳細資訊,請參閱「記憶體內索引」、「磁碟上索引」和「GPU 索引」。
分區和分區鍵值 分區是 Milvus 資料集中的子分區。您可以選擇標量欄位作為分割鍵,以獲得更好的搜尋效能。如需詳細資訊,請參閱管理分割區和 使用分割區金鑰。
可調整的一致性模型 一致性可確保每個 Milvus 節點或副本在特定時間寫入或讀取資料時,擁有相同的資料視圖。在 Milvus 中執行 ANN 搜尋時,您可以輕鬆調整一致性層級。如需詳細資訊,請參閱一致性。
高通量資料匯入 要匯入大量資料到 Milvus,而不是一個接一個地插入,請考慮使用我們的高通量資料匯入工具。詳情請參閱準備來源資料和匯入資料。
多租用支援 Milvus 實現了許多面向多租用場景的功能,包括分區鑰匙、集群鑰匙等。詳情請參閱多租戶策略。
安全性與授權
可調整的一致性模型 一致性確保每個 Milvus 節點或副本在特定時間寫入或讀取資料時,擁有相同的資料視圖。在 Milvus 中執行 ANN 搜尋時,您可以輕鬆調整一致性層級。如需詳細資訊,請參閱一致性。
資料隔離及資源控制 對於多租戶情境,資料隔離是基本的安全需求。Milvus 實現了多種功能來解決您的安全問題。如需詳細資訊,請參閱管理資源 群組與群集壓縮。
AI 整合
嵌入式模型整合 嵌入式模型將非結構化資料轉換成高維資料空間中的數值表示,以便您可以將它們儲存在 Milvus 中。目前 Python SDK PyMilvus 整合了多種嵌入模型,讓您可以快速將資料準備成向量嵌入。如需詳細資訊,請參閱嵌入概述。
重排模型 (Reranking Model Integrations) 在資訊檢索與生成式人工智慧領域中,重排器 (reranker) 是優化初始搜尋結果順序的重要工具。PyMilvus 也整合了幾個 reranking 模型來優化從初始搜尋返回結果的順序。詳情請參閱Rerankers 總覽。
LangChain 與其他 AI 工具整合 在 GenAI 時代,LangChain 等工具獲得許多應用程式開發人員的關注。作為核心元件,Milvus 通常在這些工具中扮演向量儲存的角色。要了解如何將 Milvus 整合到您最喜愛的 AI 工具中,請參考我們的整合與教學。
工具與生態系統
Attu Attu 是一個多合一的直覺式圖形使用者介面,可協助您管理 Milvus 及其儲存的資料。如需詳細資訊,請參閱Attu資源庫。
Birdwatcher Birdwatcher 是 Milvus 的調試工具。使用它連線到 etcd,您可以檢查 Milvus 系統的狀態或即時設定。如需詳細資訊,請參閱BirdWatcher。
Promethus & Grafana 整合 Prometheus 是 Kubernetes 的開放原始碼系統監控與警示工具套件。Grafana 是可與所有資料來源連接的開放原始碼視覺化堆疊。您可以使用 Promethus & Grafana 作為監控服務提供者,以視覺化方式監控 Milvus 分散式的效能。詳情請參閱部署監控服務。
Milvus 備份 Milvus 備份是一個允許使用者備份和還原 Milvus 資料的工具。它同時提供 CLI 和 API,以適合不同的應用情境。詳情請參閱Milvus 備份。
Milvus Capture Data Change (CDC) Milvus-CDC 可以捕捉和同步 Milvus 實例中的增量數據,並通過源實例和目標實例之間的無縫傳輸來確保業務數據的可靠性,從而實現簡便的增量備份和災難恢復。詳情請參閱Milvus CDC。
Milvus Connectors Milvus 已經規劃了一套連接器,讓您可以無縫整合 Milvus 與第三方工具,例如 Apache Spark。目前,您可以使用我們的 Spark Connector 將 Milvus 資料饋送至 Apache Spark 進行機器學習處理。如需詳細資訊,請參閱Spark-Milvus Connector。
矢量傳輸服務 (VTS) Milvus 提供了一套工具,讓您可以在 Milvus 實例和一堆資料來源之間傳輸資料,包括 Zilliz 集群、Elasticsearch、Postgres (PgVector) 和另一個 Milvus 實例。詳情請參閱遷移。