撰稿 | 王瑞平
審校 | 云昭
開源、Github標(biāo)星狂飆2萬、CVP(即,ChatGPT+VectorDB+Prompt)架構(gòu)...又一匹數(shù)據(jù)庫黑馬突出重圍。
它就是Milvus向量數(shù)據(jù)庫,幾年前便在Github上開源,瞬間引爆全球,不僅完美詮釋了新興CVP架構(gòu),也成為“群模亂舞”當(dāng)下的一股清流。
圖片
Milvus旨在為AI應(yīng)用程序和嵌入相似度搜索提供支持,使非結(jié)構(gòu)化數(shù)據(jù)更易于搜索和訪問,無論部署環(huán)境如何都能使用戶獲得相同的體驗。
1、AIGC新紀(jì)元從“向量數(shù)據(jù)庫”邁入“大模型記憶體”
Milvus以4個月5000星的速度邁入Github 2萬星項目的隊列,越來越多開發(fā)者也正在為Milvus進入AIGC新紀(jì)元注入更多力量。
2019年,GitHub上將Milvus的源代碼開源。彼時,行業(yè)尚無“向量數(shù)據(jù)庫”一說,用戶最關(guān)心的問題是“什么是向量數(shù)據(jù)庫”。
2023年,ChatGPT 引發(fā)AIGC熱潮,在這個大模型恣意生長的年份,越來越多的人關(guān)心“向量數(shù)據(jù)庫可以做什么?”
在大語言模型時代,向量數(shù)據(jù)庫必不可少,它不僅是大模型的記憶體,還能通過向量檢索讓大模型變得博聞強識。
在此過程中,AIGC開發(fā)者可以看到的是Milvus在2.2.9版本和中新增了JSON、動態(tài)schema和PartitionKey三大功能,簡化了開發(fā)者使用門檻,并接入了開源項目GPTCache,提升LLM應(yīng)用性能。
2、大模型時代,數(shù)據(jù)庫也需要跟上
我們正處在擁抱人人互聯(lián)新時代,傳輸電子郵件、社交媒體照片傳輸、蛋白質(zhì)分子結(jié)構(gòu)解析等過程中都會產(chǎn)生海量的非結(jié)構(gòu)化數(shù)據(jù)(文本文件、電子表格等)。
然而,你絕不能任由這些數(shù)據(jù)“滿天飛”!所以,它們必須被計算機定期處理!那么,如何處理呢?
首先,embedding技術(shù)可以將這些數(shù)據(jù)轉(zhuǎn)化為“向量”。隨后,Milvus會存儲這些“向量”并為其建立索引,這就形成了傳說中的“向量數(shù)據(jù)庫”。
與現(xiàn)有的主要可用作處理結(jié)構(gòu)化數(shù)據(jù)的關(guān)系型數(shù)據(jù)庫不同,Milvus在底層設(shè)計上就是為了處理由各種非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換而來的Embedding向量而生。
該數(shù)據(jù)庫可以對接包括圖片識別、視頻處理、聲音識別、自然語言處理等深度學(xué)習(xí)模型,從而為向量化后的非結(jié)構(gòu)數(shù)據(jù)提供搜索分析服務(wù)。
你可以使用Milvus搭建符合個人場景需求的向量相似度檢索系統(tǒng),具體可應(yīng)用在以圖搜圖、視頻去重、音頻檢索、文本搜索等場景下。
3、快速入門:安裝Milvus
圖片
你需要首先明確的是:Milvus使用Docker Compose控制服務(wù)的啟動和暫停,過程包括:
- 新建工作目錄,下載YAML文件
- 啟動Milvus容器:
sudo docker-compose up -d
- 停止Milvus容器:
sudo docker-compose down
4、用例:以圖搜圖
Milvus官方還給出了以圖搜圖的用例,具體流程分為構(gòu)建圖像向量庫和執(zhí)行搜索:
圖片
1)構(gòu)建圖像向量庫
首先準(zhǔn)備圖像數(shù)據(jù)集,使用深度學(xué)習(xí)庫提取圖像特征,獲得每張圖像的特征向量,最后將特征向量存儲到Milvus數(shù)據(jù)庫中。
2)執(zhí)行搜索
輸入一張待檢索圖像,經(jīng)過深度學(xué)習(xí)庫獲取圖像對應(yīng)的特征向量,然后將這個向量與Milvus中所有圖像的特征向量進行相似度對比,從而獲得距離最近的圖像結(jié)果。
5、整體性能夠硬,生態(tài)已成氣候
從上述的安裝與使用過程中我們不難看出,Milvus作為一款云原生向量數(shù)據(jù)庫,具備高可用、高性能、易拓展的特點,可用于海量向量數(shù)據(jù)的實時召回。
圖片
Github上也對其整體性能做出了完整總結(jié):
- 高性能:性能高超,可對海量數(shù)據(jù)集進行向量相似度檢索。
- 簡化管理:專為數(shù)據(jù)科學(xué)工作流設(shè)計的豐富API;
- 高可用、高可靠:Milvus支持云上擴展,其容災(zāi)能力能夠保證服務(wù)高可用;
- 高度可擴展和彈性:組件級可伸縮性使按需擴展和縮減成為可能。
- 混合查詢:Milvus支持在向量相似度檢索過程中進行標(biāo)量字段過濾,實現(xiàn)混合查詢;
- 開發(fā)者友好:支持多語言、多工具Milvus生態(tài)系統(tǒng);
- 社區(qū)支持,行業(yè)認可:擁有超過1000名企業(yè)用戶以及活躍的開源社區(qū)。
6、系統(tǒng)架構(gòu):四個層次
Milvus作為一款云原生向量數(shù)據(jù)庫,采用存儲與計算分離的架構(gòu)設(shè)計,所有組件均為無狀態(tài)組件,極大增強系統(tǒng)彈性和靈活性。
圖片
整個系統(tǒng)架構(gòu)可分為四個層次:
- 接入層:系統(tǒng)的門面,由一組無狀態(tài)proxy組成。對外提供用戶連接的endpoint,負責(zé)驗證客戶端請求并合并返回結(jié)果。
- 協(xié)調(diào)服務(wù):系統(tǒng)的大腦,負責(zé)分配任務(wù)給執(zhí)行節(jié)點。協(xié)調(diào)服務(wù)共有四種角色,分別為 root coord、data coord、query coord 和 index coord。
- 執(zhí)行節(jié)點:系統(tǒng)的四肢,負責(zé)完成協(xié)調(diào)服務(wù)下發(fā)的指令和 proxy 發(fā)起的數(shù)據(jù)操作語言(DML)命令。執(zhí)行節(jié)點分為三種角色,分別為 data node、query node 和 index node。
- 存儲服務(wù):系統(tǒng)的骨骼,負責(zé)Milvus數(shù)據(jù)的持久化,分為元數(shù)據(jù)存儲(meta store)、消息存儲(log broker)和對象存儲(object storage)三個部分。
7、2.0重磅升級
在Milvus官網(wǎng)上,我們找到了Milvus1.0與2.0究竟有哪些區(qū)別,具體如下表:
圖片
事實上,自Milvus升級至2.0版本以來,仍在不斷改進優(yōu)化,推出了諸如從文件中批量導(dǎo)入數(shù)據(jù)、基于磁盤的近似最近鄰(ANN)索引算法等新功能,也提升了元數(shù)據(jù)存儲、批量導(dǎo)入等性能。
遠的不說,從Milvus 2.2到Milvus 2.3版本都進行了哪些變化和升級呢?
Milvus 2.2提升了向量搜索的穩(wěn)定性、搜索速度,具有靈活的擴縮容能力,提供了一系列新的 API,用于支持從文件中更有效率地批量導(dǎo)入數(shù)據(jù)。
此外,Milvus 2.2還修復(fù)了部分bug并進行了諸多改進以增強Milvus穩(wěn)定性、可觀測性和性能。
而在2.3版本中,Milvus移除了Annoy索引,降低了維護成本,還會支持count接口,用于統(tǒng)計collection的行數(shù)。新增的count接口除了能計算collection行數(shù)外,還支持query的查詢表達式用于統(tǒng)計帶條件的行數(shù)。
8、用戶:使用Milvus,并不孤單
從最初的Milvus到2.3版本,每一次版本升級背后都離不開用戶的支持與建議。升級、迭代,每次更新過后,Milvus都會趨向于完美。
截至目前,GitHub在上已達到2.08萬星。因此,當(dāng)在活躍的開源社區(qū)中使用Milvus時,你并不孤單!
參考資料:
https://www.yii666.com/blog/393941.html?actinotallow=onAll
https://github.com/milvus-io/milvus
https://blog.csdn.net/hello_dear_you/article/details/127841589