最火向量數(shù)據(jù)庫Milvus安裝使用一條龍!
向量數(shù)據(jù)庫是大模型應(yīng)用開發(fā)必備組件之一,因?yàn)樗R(shí)庫、語義搜索、檢索增強(qiáng)生成(RAG)等人工智能應(yīng)用中發(fā)揮著舉足輕重的作用。但向量數(shù)據(jù)有很多,為什么要使用 Milvus 呢?
常見向量數(shù)據(jù)
常見的向量數(shù)據(jù)庫有以下這些:
- Chroma
- Elasticsearch
- Milvus
- Neo4j
- OpenSearch
- Redis
- PGVector
然而目前市面上使用最多的向量數(shù)據(jù)庫還是 Milvus,為什么呢?
這點(diǎn)從企業(yè)的招聘要求中也能發(fā)現(xiàn):
為什么是 Milvus?
Milvus 設(shè)計(jì)之初就是為 AI 而生的一個(gè)高效的向量數(shù)據(jù)庫系統(tǒng),在大多數(shù)情況下,Milvus 的性能是其他向量數(shù)據(jù)庫的 2-5 倍,它能實(shí)現(xiàn)萬億級(jí)向量的毫秒級(jí)相似性搜索,而且 Milvus 還是開源的向量數(shù)據(jù)庫。
“
PS:也就說 Milvus 既開源(可以免費(fèi)使用+支持二次開發(fā))又具備高性能,這樣的數(shù)據(jù)庫誰不愛呢?
為什么 Milvus 這么快?
Milvus 運(yùn)行比較快的原因有以下幾個(gè):
- 硬件感知優(yōu)化:為了讓 Milvus 適應(yīng)各種硬件環(huán)境,我們專門針對(duì)多種硬件架構(gòu)和平臺(tái)優(yōu)化了其性能,包括 AVX512、SIMD、GPU 和 NVMe SSD。
- 高級(jí)搜索算法:Milvus 支持多種內(nèi)存和磁盤索引/搜索算法,包括 IVF、HNSW、DiskANN 等,所有這些算法都經(jīng)過了深度優(yōu)化。與 FAISS 和 HNSWLib 等流行實(shí)現(xiàn)相比,Milvus 的性能提高了 30%-70%。
- C++ 搜索引擎:向量數(shù)據(jù)庫性能的 80% 以上取決于其搜索引擎。由于 C++ 語言的高性能、底層優(yōu)化和高效資源管理,Milvus 將 C++ 用于這一關(guān)鍵組件。最重要的是,Milvus 集成了大量硬件感知代碼優(yōu)化,從匯編級(jí)向量到多線程并行化和調(diào)度,以充分利用硬件能力。
- 面向列:Milvus 是面向列的向量數(shù)據(jù)庫系統(tǒng)。其主要優(yōu)勢(shì)來自數(shù)據(jù)訪問模式。在執(zhí)行查詢時(shí),面向列的數(shù)據(jù)庫只讀取查詢中涉及的特定字段,而不是整行,這大大減少了訪問的數(shù)據(jù)量。此外,對(duì)基于列的數(shù)據(jù)的操作可以很容易地進(jìn)行向量化,從而可以一次性在整個(gè)列中應(yīng)用操作,進(jìn)一步提高性能。
Milvus 支持的搜索類型
Milvus 支持各種類型的搜索功能,以滿足不同用例的需求:
- ANN 搜索:查找最接近查詢向量的前 K 個(gè)向量。
- 過濾搜索:在指定的過濾條件下執(zhí)行 ANN 搜索。
- 范圍搜索:查找查詢向量指定半徑范圍內(nèi)的向量。
- 混合搜索:基于多個(gè)向量場進(jìn)行 ANN 搜索。
- 全文搜索:基于 BM25 的全文搜索。
- Rerankers:根據(jù)附加標(biāo)準(zhǔn)或輔助算法調(diào)整搜索結(jié)果順序,完善初始 ANN 搜索結(jié)果。
- 根據(jù)主鍵檢索數(shù)據(jù)。
- 查詢使用特定表達(dá)式檢索數(shù)據(jù)。
Milvus 安裝
Milvus 有三種部署方式:
- Milvus Lite:Milvus Lite 是一個(gè) Python 庫,可導(dǎo)入到您的應(yīng)用程序中。作為 Milvus 的輕量級(jí)版本,它非常適合在 Jupyter 筆記本或資源有限的智能設(shè)備上運(yùn)行快速原型。Milvus Lite 支持與 Milvus 其他部署相同的 API。與 Milvus Lite 交互的客戶端代碼也能與其他部署模式下的 Milvus 實(shí)例協(xié)同工作。
- Milvus Standalone:Milvus Standalone 是單機(jī)服務(wù)器部署。Milvus Standalone 的所有組件都打包到一個(gè) Docker 鏡像中,部署起來非常方便。
- Milvus Distributed:Milvus Distributed 可部署在 Kubernetes 集群上。這種部署采用云原生架構(gòu),攝取負(fù)載和搜索查詢分別由獨(dú)立節(jié)點(diǎn)處理,允許關(guān)鍵組件冗余。它具有最高的可擴(kuò)展性和可用性,并能靈活定制每個(gè)組件中分配的資源。Milvus Distributed 是在生產(chǎn)中運(yùn)行大規(guī)模向量搜索系統(tǒng)的企業(yè)用戶的首選。
“
PS:當(dāng)然中小型公司生產(chǎn)環(huán)境也可以直接購買 XXX 云的 Milvus 實(shí)例直接使用。
我們這里使用 Milvus Standalone 單機(jī)版部署方式。
硬件要求
前提條件
- 安裝 Docker Desktop:點(diǎn)擊下載軟件安裝 https://www.docker.com/get-started/
- 安裝之后,需要重啟電腦,并且電腦會(huì)進(jìn)行 Linux 子系統(tǒng)更新才能正常啟動(dòng),此過程可能會(huì)比較慢。
- 安裝 Windows Subsystem for Linux 2 (WSL 2):通常不需要單獨(dú)安裝,安裝 Docker Desktop 時(shí)會(huì)自動(dòng)安裝。
正式安裝
1.打開 PowerShell。
2.下載安裝腳本,命令如下:
Invoke-WebRequest https://raw.githubusercontent.com/milvus-io/milvus/refs/heads/master/scripts/standalone_embed.bat -OutFile standalone.bat
3.運(yùn)行下載的腳本
standalone.bat start
最終執(zhí)行效果如下:
運(yùn)行安裝腳本后,包含以下內(nèi)容:
- 名為 Milvus-standalone 的 docker 容器已在19530 端口啟動(dòng)。
- 嵌入式 etcd 與 Milvus 安裝在同一個(gè)容器中,服務(wù)端口為 2379。其配置文件被映射到當(dāng)前文件夾中的 embedEtcd.yaml。
- Milvus 數(shù)據(jù)卷映射到當(dāng)前文件夾中的 volumes/milvus。
在 Docker Desktop 也可以看到安裝的 Milvus 相關(guān)組件:
參考官方文檔:https://milvus.io/docs/zh/install_standalone-windows.md
安裝 UI 客戶端
Milvus 服務(wù)安裝成功之后,可以按照一個(gè) UI 客戶端連接 Milvus 服務(wù),使用官方提供的客戶端 attu:https://github.com/zilliztech/attu
具體安裝步驟如下:
1.訪問下載安裝包(attu-Setup-2.4.12.exe)地址:https://github.com/zilliztech/attu/releases/tag/v2.4.12
2.解壓并安裝 attu。
安裝成功之后連接本地 Milvus 服務(wù),如下圖所示:
小結(jié)
Milvus 作為開源高性能向量數(shù)據(jù)庫的代表,它的安裝也不難,如果順利的情況下,可能 5 分鐘左右就搞定了。安裝完成之后就用它加上 Spring AI 或 LangChain4j 來實(shí)現(xiàn)一下 RAG 功能吧。