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,讓您省去維護多個資料庫系統的麻煩。

Untructured data, embeddings, and Milvus 非結構化資料、嵌入與 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 的雲原生與高度解耦的系統架構,可確保系統能隨著資料成長而持續擴充:

Highly decoupled system architecture of Milvus Milvus 高度解耦的系統架構

Milvus 本身是完全無狀態的,因此可借助 Kubernetes 或公有雲輕鬆擴展。此外,Milvus 各個元件都有很好的解耦功能,其中最重要的三項任務 - 搜尋、資料插入和索引/壓縮 - 都被設計成容易並行化的流程,並將複雜的邏輯分離出來。這可確保相對應的查詢節點、資料節點和索引節點都能獨立擴充,以最佳化效能和成本效益。

Milvus 支援的搜尋類型

Milvus 支援多種類型的搜尋功能,以滿足不同用例的需求:

  • ANN 搜尋:找出最接近您查詢向量的前 K 個向量。
  • 過濾搜尋:在指定過濾條件下執行 ANN 搜尋。
  • 範圍搜尋:尋找距離您的查詢向量指定半徑範圍內的向量。
  • 混合搜尋:根據多向量領域進行 ANN 搜尋。
  • 全文搜尋:根據 BM25 進行全文搜尋。
  • 重新排序:根據附加條件或輔助演算法調整搜尋結果的順序,精煉最初的 ANN 搜尋結果。
  • 擷取:依據資料的主鍵擷取資料。
  • 查詢:使用特定的表達方式擷取資料。

全面的功能集

除了上述的關鍵搜尋功能外,Milvus 還提供了一系列圍繞 ANN 搜尋實施的功能,以便您能充分利用其功能。

API 與 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