Milvus 是什麼?
Milvus 是鷹科(Accipaitridae)Milvus屬的猛禽,以飛行速度快、視力敏銳、適應力強而聞名。
Zilliz 採用 Milvus 作為其開放原始碼的高效能、高擴充性向量資料庫的名稱,可在從筆記型電腦到大型分散式系統等各種環境中有效率地執行。它同時以開源軟體和雲端服務的形式提供。
Milvus 由 Zilliz 開發,並很快捐贈給 Linux 基金會下的 LF AI & Data 基金會,目前已成為全球領先的開源向量資料庫專案之一。它以 Apache 2.0 授權釋出,大部分的貢獻者都是來自高效能運算 (HPC) 社群的專家,專精於建立大型系統和優化硬體感知程式碼。核心貢獻者包括來自 Zilliz、ARM、NVIDIA、AMD、Intel、Meta、IBM、Salesforce、阿里巴巴和微軟的專業人士。
有趣的是,Zilliz 的每個開放原始碼專案都以鳥的名字命名,這個命名方式象徵著自由、前瞻性以及科技的敏捷演進。
非結構化資料、嵌入與 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#(由 Microsoft 提供)
- C++ SDK(官方)
- Rust SDK (開發中)
進階資料類型
除了原始資料類型之外,Milvus 還支援各種進階資料類型及其各自適用的距離度量。
為什麼選擇 Milvus?
高效能與高可用性
Milvus 採用分散式架構,將計算與儲存分離。Milvus 可以進行水平擴充,並適應多樣化的流量模式,透過針對讀取繁重的工作負載獨立增加查詢節點,以及針對寫入繁重的工作負載獨立增加資料節點,達到最佳效能。K8s 上的無狀態微服務可從故障中快速恢復,確保高可用性。透過在多個查詢節點上載入資料片段,對複製的支援進一步增強了容錯能力和吞吐量。請參閱效能比較基準。
支援各種向量索引類型及硬體加速
Milvus 將系統與核心向量搜尋引擎分離,使其能夠支援針對不同情境最佳化的所有主要向量索引類型,包括 HNSW、IVF、FLAT (brute-force)、SCANN 和 DiskANN,以及以量化為基礎的變化和mmap。Milvus 優化向量搜尋的進階功能,例如元資料過濾和範圍搜尋。此外,Milvus 實作硬體加速以提升向量搜尋效能,並支援 GPU 索引,例如 NVIDIA 的CAGRA。
彈性的多租戶與冷/熱儲存
Milvus 透過資料庫、資料集、分割區或分割區金鑰層級的隔離來支援多租用。靈活的策略可讓單一叢集處理數百至數百萬的租戶,也確保最佳化的搜尋效能與彈性的存取控制。Milvus 透過冷/熱儲存提升成本效益。經常存取的熱資料可儲存在記憶體或固態硬碟上,以獲得更佳效能,而較少存取的冷資料則保存在速度較慢、具成本效益的儲存設備上。此機制可大幅降低成本,同時維持關鍵任務的高效能。
用於全文檢索和混合檢索的稀疏向量
除了透過密集向量進行語意搜尋外,Milvus 也原生支援 BM25全文搜尋,以及 SPLADE 和 BGE-M3 等學習型稀疏嵌入。使用者可以在同一個集合中儲存稀疏向量和密集向量,並定義函式來重新排序多次搜尋請求的結果。請參閱混合搜尋 (Hybrid Search) 搭配語意搜尋 + 全文搜尋的範例。
資料安全與細粒度存取控制
Milvus 透過實施強制使用者驗證、TLS 加密和角色存取控制 (RBAC) 來確保資料安全。使用者驗證可確保只有擁有有效憑證的授權使用者才能存取資料庫,而 TLS 加密則可確保網路內所有通訊的安全性。此外,RBAC 可根據使用者的角色為其指定特定權限,從而實現精細的存取控制。這些功能讓 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 連結器 Milvus 已經規劃了一套連結器,讓您可以無縫整合 Milvus 與第三方工具,例如 Apache Spark。目前,您可以使用我們的 Spark Connector 將 Milvus 資料饋送至 Apache Spark 進行機器學習處理。如需詳細資訊,請參閱Spark-Milvus Connector。
Vector Transmission Services (VTS) Milvus 提供了一套工具,讓您可以在 Milvus 實例和一堆資料來源之間傳輸資料,包括 Zilliz 集群、Elasticsearch、Postgres (PgVector) 和另一個 Milvus 實例。如需詳細資訊,請參閱VTS。