AI生成存儲(chǔ)基座:自研超大規(guī)模向量數(shù)據(jù)庫(kù) Dolphin VectorDB
一、業(yè)務(wù)背景
隨著以O(shè)penAI為代表的AI生成式技術(shù)不斷突破,在萬(wàn)物皆可向量化的時(shí)代直接帶動(dòng)向量計(jì)算和存儲(chǔ)需求大幅提升,讓向量存儲(chǔ)和計(jì)算技術(shù)關(guān)注度達(dá)到新高,業(yè)界涌現(xiàn)出各類(lèi)向量數(shù)據(jù)庫(kù)。阿里媽媽擁有豐富的AI應(yīng)用場(chǎng)景,我們基于過(guò)去在向量引擎的積累和AI場(chǎng)景下需求,在近五年時(shí)間里不斷迭代升級(jí),沉淀出Dolphin VectorDB,具有大規(guī)模、高性能、低成本且易開(kāi)發(fā)的優(yōu)勢(shì),在媽媽內(nèi)容風(fēng)控、營(yíng)銷(xiāo)知識(shí)問(wèn)答、達(dá)摩盤(pán)人群AI圈人和AI經(jīng)營(yíng)分析師等場(chǎng)景中落地應(yīng)用。尤其在支持內(nèi)容風(fēng)控10億級(jí)超大規(guī)模向量檢索場(chǎng)景中,使用Dolphin VectorDB表現(xiàn)出性能、成本及易用性綜合優(yōu)勢(shì),獲得顯著收益:
- 索引構(gòu)建加速:索引構(gòu)建時(shí)間減少71%。
- 檢索速度更快:檢索RT快3倍。
- 資源使用更省:服務(wù)資源節(jié)省75%。
- 研發(fā)效能提升:開(kāi)發(fā)向量召回業(yè)務(wù)效率從天/小時(shí)提升到分鐘級(jí)別。
二、行業(yè)技術(shù)調(diào)研
業(yè)界主要分為向量數(shù)據(jù)庫(kù)和有向量能力的數(shù)據(jù)庫(kù)兩條技術(shù)路線:
- 向量數(shù)據(jù)庫(kù) (Specified Vector Database):提供基于SDK的RPC/HTTP調(diào)用,專(zhuān)門(mén)用于向量數(shù)據(jù)的構(gòu)建、存儲(chǔ)和查詢(xún)。
- 支持向量能力的數(shù)據(jù)庫(kù):基于已有各類(lèi)通用數(shù)據(jù)庫(kù)系統(tǒng),再結(jié)合向量庫(kù)(Vector Library)實(shí)現(xiàn)向量數(shù)據(jù)的構(gòu)建、存儲(chǔ)和查詢(xún)能力。
2.1 業(yè)界現(xiàn)狀
業(yè)界向量數(shù)據(jù)庫(kù)百花齊放,但面臨復(fù)雜業(yè)務(wù)場(chǎng)景仍有些不足:
- 傳統(tǒng)支持向量能力的數(shù)據(jù)庫(kù)主要面向靜態(tài)向量數(shù)據(jù),不適用于索引數(shù)據(jù)頻繁更新場(chǎng)景,不支持實(shí)時(shí)向量寫(xiě)入及更新。
- 向量數(shù)據(jù)庫(kù)普遍支持在線計(jì)算,但沒(méi)有專(zhuān)門(mén)針對(duì)離線批量計(jì)算場(chǎng)景,而真實(shí)場(chǎng)景同一業(yè)務(wù)會(huì)有在線和離線批量?jī)深?lèi)計(jì)算需求,很多情況下在線和離線計(jì)算不是一套服務(wù),導(dǎo)致在線和離線因索引不同查詢(xún)結(jié)果不一致。
- 現(xiàn)有產(chǎn)品在大規(guī)模、高性能和低成本這三個(gè)方面很難平衡,既能滿(mǎn)足大規(guī)模、高性能,還能保證低成本的挑戰(zhàn)很大。
基于當(dāng)前現(xiàn)狀,Dolphin VectorDB選擇第二條技術(shù)路線(支持向量能力的數(shù)據(jù)庫(kù)),基于Dolphin多年在MPP數(shù)據(jù)庫(kù)方向能力積累,實(shí)現(xiàn)高性能向量數(shù)據(jù)庫(kù)能力。
三、技術(shù)演進(jìn)
Dolphin(延展閱讀:??Dolphin:面向營(yíng)銷(xiāo)場(chǎng)景的超融合多模智能引擎??)自2019年開(kāi)始探索向量計(jì)算,向量引擎底層計(jì)算能力經(jīng)歷從最初版使用Hologres內(nèi)置向量插件,到基于Faiss自研2.0版,逐步迭代到3.0版基于DFS共享存儲(chǔ)(DFS類(lèi)似開(kāi)源的HDFS),最后升級(jí)到現(xiàn)在的Dolphin VectorDB,每一次升級(jí)背后都是業(yè)務(wù)規(guī)模擴(kuò)展和新功能需求,推動(dòng)技術(shù)不斷迭代進(jìn)化。
3.1 向量引擎1.0
為支撐阿里媽媽達(dá)摩盤(pán)和直通車(chē)BP人群Lookalike業(yè)務(wù)(Lookalike是一種基于種子人群特征放大人群規(guī)模的算法技術(shù)),Dolphin向量引擎1.0版基于Hologres實(shí)現(xiàn)1.0版本向量計(jì)算能力(延展閱讀:??阿里媽媽Dolphin智能計(jì)算引擎基于Flink+Hologres實(shí)踐??),通過(guò)計(jì)算種子人群中心向量,然后從總體中召回Top K實(shí)現(xiàn)人群擴(kuò)展。整個(gè)人群Lookalike擴(kuò)展過(guò)程如下圖所示。
在業(yè)務(wù)支持中Dolphin初步集成基于Hologres的向量召回能力。
3.2 向量引擎2.0
在1.0版技術(shù)方案中,單shard模式有單點(diǎn)瓶頸,集群CPU利用率不高,多shard會(huì)構(gòu)建分布式索引,但性能一般。為解決性能瓶頸,我們基于GreenPlum(下文簡(jiǎn)稱(chēng)“GP”)數(shù)據(jù)庫(kù)和faiss自研實(shí)現(xiàn)2.0版(方案已開(kāi)源,gpdb-faiss-vector 項(xiàng)目地址:https://github.com/AlibabaIncubator/gpdb-faiss-vector),延展閱讀:??Dolphin:面向營(yíng)銷(xiāo)場(chǎng)景的超融合多模智能引擎??),基于UDF實(shí)現(xiàn)索引構(gòu)建和查詢(xún)能力,并采用共享緩存方案減少索引切換開(kāi)銷(xiāo),性能上實(shí)現(xiàn)支持總向量百萬(wàn)規(guī)模,單類(lèi)目幾十萬(wàn)規(guī)模的向量召回計(jì)算。
基于GP的方案,對(duì)于小規(guī)模索引我們采用復(fù)制表可大幅提升QPS;對(duì)于帶類(lèi)目(cate_id)的場(chǎng)景我們使用分布式表方案,其中對(duì)于復(fù)制表場(chǎng)景壓測(cè)QPS(800CU資源)可以達(dá)到5000+qps。
此外還做了復(fù)制表和分布式表測(cè)試,其中復(fù)制表是把索引復(fù)制到每一個(gè)計(jì)算節(jié)點(diǎn);分布式表是按cate把索引劃分到不同節(jié)點(diǎn),對(duì)每個(gè)cate_id構(gòu)建一份索引。
此外為支持Lazada算法千萬(wàn)級(jí)大規(guī)模批量向量召回需求,我們基于GP實(shí)現(xiàn)離線批量計(jì)算方案,雖然自研方案性能有較大提升,但是索引構(gòu)建是在數(shù)據(jù)庫(kù)進(jìn)行,會(huì)受限于數(shù)據(jù)庫(kù)存儲(chǔ)限制,最大構(gòu)建的索引限制為1G,導(dǎo)致更大規(guī)模的索引無(wú)法使用數(shù)據(jù)庫(kù)構(gòu)建,于是我們又進(jìn)行新一輪升級(jí)。
3.3 向量引擎3.0
從系統(tǒng)架構(gòu)上來(lái)看,Dolphin向量引擎2.0本質(zhì)上是基于數(shù)據(jù)庫(kù)的插件實(shí)現(xiàn),其索引構(gòu)建與召回流程完全依賴(lài)于數(shù)據(jù)庫(kù)系統(tǒng)內(nèi)核和執(zhí)行器調(diào)度,存在諸多限制,比如索引大小不能超過(guò)1G的數(shù)據(jù)庫(kù)字段限制,單個(gè)集群構(gòu)建的索引只能自用無(wú)法共享等。
為支持構(gòu)建億級(jí)向量索引,我們?cè)O(shè)計(jì)3.0方案,在數(shù)據(jù)庫(kù)segment節(jié)點(diǎn)實(shí)現(xiàn)外置獨(dú)立向量服務(wù),只依賴(lài)于數(shù)據(jù)庫(kù)的數(shù)據(jù)分發(fā)與SQL化接口能力,理論上可以實(shí)現(xiàn)任意大小索引構(gòu)建存儲(chǔ)和查詢(xún)。
從執(zhí)行流程上看,通過(guò)對(duì)索引構(gòu)建和向量召回的流程進(jìn)行拆分,并將構(gòu)建好的索引導(dǎo)入DFS存儲(chǔ),實(shí)現(xiàn)了一次索引構(gòu)建可供在線、批量甚至多個(gè)集群讀取使用,并以本地磁盤(pán)、內(nèi)存實(shí)現(xiàn)索引多級(jí)緩存,極大提升了召回流程效率,同時(shí)也保障了在線向量召回集群不會(huì)受索引構(gòu)建任務(wù)影響。
Dolphin向量引擎3.0可以很好支持超大規(guī)模向量索引構(gòu)建和在離線一致性查詢(xún)能力,但面對(duì)大模型實(shí)時(shí)寫(xiě)入更新場(chǎng)景還無(wú)法支持。
3.4 Dolphin VectorDB
Dolphin VectorDB源于跟內(nèi)容風(fēng)控團(tuán)隊(duì)合作共建,??內(nèi)容風(fēng)控業(yè)務(wù)涉及圖文、視頻內(nèi)容的安全底線??,過(guò)去在很多重要風(fēng)控事件中發(fā)揮重要作用,對(duì)向量召回能力要求低延遲、高吞吐、一致性和易用性。過(guò)去內(nèi)容風(fēng)控主要使用集團(tuán)內(nèi)DII、BE和Proxima CE 三套檢索引擎來(lái)實(shí)現(xiàn)業(yè)務(wù)需求,但是仍面臨巨大挑戰(zhàn):
- 低延遲:在線審核鏈路要求低延遲、實(shí)時(shí)增量更新黑圖、文相似樣本庫(kù),同時(shí)因?yàn)閷?duì)廣告主審核有體感,需要非常高的穩(wěn)定性保障要求。
- 高吞吐:離線會(huì)面臨百億級(jí)別歷史全量廣告送審內(nèi)容的高吞吐壓力,例如敏感圖文問(wèn)題,此外還必須按照監(jiān)管要求時(shí)間內(nèi)完成全量圖文內(nèi)容清理。
- 一致性:在線和離線因?yàn)槭褂貌煌軜?gòu)引擎導(dǎo)致索引召回不一致,可能有在線或離線風(fēng)險(xiǎn)外露風(fēng)險(xiǎn)。
- 易用性:內(nèi)容風(fēng)控一共20+檢索業(yè)務(wù),使用了DII、BE和Proxima 3套方案,每一種方案針對(duì)特定的問(wèn)題都能很好的解決,但會(huì)出現(xiàn)在離線不一致和維護(hù)成本高的問(wèn)題。
面對(duì)風(fēng)控復(fù)雜的場(chǎng)景需求和大模型場(chǎng)景新需求,我們基于向量引擎3.0版本進(jìn)一步升級(jí)為Dolphin VectorDB,實(shí)現(xiàn)體系化的數(shù)據(jù)接入、查詢(xún)和索引構(gòu)建等標(biāo)準(zhǔn)向量數(shù)據(jù)庫(kù)能力,實(shí)現(xiàn)一套引擎高效支持在線和離線業(yè)務(wù)需求。
四、技術(shù)架構(gòu)
Dolphin VectorDB整體技術(shù)架構(gòu)分為五個(gè)模塊,包括數(shù)據(jù)接入、查詢(xún)、執(zhí)行、存儲(chǔ)及元數(shù)據(jù)管理。
4.1 模塊介紹
4.1.1 數(shù)據(jù)接入模塊
數(shù)據(jù)接入模塊是整個(gè)VectorDB的向量數(shù)據(jù)入口,負(fù)責(zé)外部實(shí)時(shí)及批量數(shù)據(jù)接入,元數(shù)據(jù)記錄以及調(diào)用執(zhí)行模塊構(gòu)建向量索引。數(shù)據(jù)接入分為兩個(gè)鏈路:
- 實(shí)時(shí)鏈路:業(yè)務(wù)方通過(guò)SDK的請(qǐng)求經(jīng)過(guò)消息隊(duì)列Kafka,然后實(shí)時(shí)更新到在線集群向量數(shù)據(jù)表中。
- 離線鏈路:負(fù)責(zé)將odps數(shù)據(jù)表批量導(dǎo)入到在線集群,同時(shí)控制執(zhí)行模塊對(duì)向量數(shù)據(jù)使用離線集群構(gòu)建索引,導(dǎo)入存儲(chǔ)模塊DFS提供給不同集群使用。
4.1.2 查詢(xún)模塊
查詢(xún)模塊負(fù)責(zé)接收HTTP/RPC/SDK請(qǐng)求,先查詢(xún)?cè)獢?shù)據(jù)并對(duì)請(qǐng)求進(jìn)行轉(zhuǎn)譯,再經(jīng)過(guò)負(fù)載均衡路由到執(zhí)行模塊。
- HTTP/RPC:用戶(hù)輸入向量查詢(xún)SQL,直接轉(zhuǎn)譯、路由、執(zhí)行
- SDK:先對(duì)用戶(hù)輸入?yún)?shù)組裝為查詢(xún)SQL,然后走轉(zhuǎn)譯、路由、執(zhí)行流程
4.1.3 執(zhí)行模塊
執(zhí)行模塊是與向量索引數(shù)據(jù)的計(jì)算直接相關(guān)的模塊,它的基本功能包括:
- 接收數(shù)據(jù)接入模塊索引構(gòu)建請(qǐng)求,從存儲(chǔ)模塊讀取原始的向量數(shù)據(jù),構(gòu)建向量索引文件存回遠(yuǎn)端存儲(chǔ)
- 將索引加載到不同的線上任務(wù)集群
- 執(zhí)行在線向量檢索服務(wù)和離線批量向量召回任務(wù)計(jì)算。
因此執(zhí)行層是溝通其他各層的橋梁,接收數(shù)據(jù)接入層和查詢(xún)層的訪問(wèn)。
執(zhí)行模塊由多個(gè)負(fù)責(zé)在線、離線、索引構(gòu)建任務(wù)的GP分布式數(shù)據(jù)庫(kù)集群組成,每個(gè)GP集群獨(dú)立負(fù)責(zé)對(duì)應(yīng)的工作,互相之間共享一份向量索引。集群中的每個(gè)計(jì)算節(jié)點(diǎn)執(zhí)行獨(dú)立或分布式并行計(jì)算。計(jì)算節(jié)點(diǎn)由GP數(shù)據(jù)庫(kù)進(jìn)程和基于Faiss的向量引擎RPC服務(wù)進(jìn)程構(gòu)成,GP負(fù)責(zé)數(shù)據(jù)表存儲(chǔ)、SQL執(zhí)行與任務(wù)分發(fā),與向量引擎進(jìn)程溝通。而向量引擎會(huì)實(shí)際執(zhí)行從與存儲(chǔ)模塊溝通的數(shù)據(jù)讀寫(xiě),F(xiàn)aiss向量索引構(gòu)建,執(zhí)行單條或批量的向量召回計(jì)算。
4.1.4 存儲(chǔ)模塊
負(fù)責(zé)存儲(chǔ)原始向量數(shù)據(jù)和構(gòu)建好的向量索引。
1. 負(fù)責(zé)原始向量和構(gòu)建好的向量索引存儲(chǔ)
2. 執(zhí)行層需要數(shù)據(jù)可以直接從存儲(chǔ)層讀取。
4.1.5 元數(shù)據(jù)模塊
負(fù)責(zé)存儲(chǔ)索引構(gòu)建的參數(shù)和表名信息,包括在線和離線場(chǎng)景數(shù)據(jù),在線元數(shù)據(jù)用于查詢(xún)轉(zhuǎn)譯使用。
五、核心能力
5.1 在離線一致性
向量召回在線場(chǎng)景和離線場(chǎng)景往往是不同引擎,即使相同參數(shù)也大概率會(huì)有召回不一致,這對(duì)很多場(chǎng)景其實(shí)影響不大,但對(duì)于風(fēng)控這類(lèi)底線安全的場(chǎng)景,結(jié)果不一致會(huì)導(dǎo)致清理不完全風(fēng)險(xiǎn)外露,過(guò)去風(fēng)控場(chǎng)景使用BE作為在線引擎,Proxima CE作為離線計(jì)算引擎,對(duì)在離線一致性的需求非常大。Dolphin VectorDB設(shè)計(jì)索引構(gòu)建存儲(chǔ)和計(jì)算分離方案,構(gòu)建好的索引存儲(chǔ)在共享存儲(chǔ)DFS,分別提供給在線計(jì)算服務(wù)和離線計(jì)算服務(wù),這樣實(shí)現(xiàn)索引一次構(gòu)建多場(chǎng)景使用,不僅減少構(gòu)建成本,還保證在離線查詢(xún)結(jié)果一致。
5.2 實(shí)時(shí)更新
實(shí)時(shí)索引更新是在大模型場(chǎng)景和風(fēng)控場(chǎng)景下強(qiáng)訴求,在線索引數(shù)據(jù)需要實(shí)時(shí)更新寫(xiě)入到索引庫(kù)。我們基于數(shù)據(jù)庫(kù)表模型特點(diǎn),實(shí)現(xiàn)基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)的高性能實(shí)時(shí)更新能力,通過(guò)離線構(gòu)建和實(shí)時(shí)寫(xiě)入數(shù)據(jù)兩條鏈路,支持實(shí)時(shí)更新QPS可以達(dá)到萬(wàn)級(jí)別。
實(shí)時(shí)更新設(shè)計(jì)架構(gòu)
5.3 多模式查詢(xún)
針對(duì)索引的規(guī)模大小,分為兩種查詢(xún)模式,一種是針對(duì)大規(guī)模索引的分布式查詢(xún);第二種是面向小規(guī)模索引的segment直查模式。
- 分布式查詢(xún):對(duì)于大規(guī)模向量(一般千萬(wàn)級(jí)以上),會(huì)把向量拆分存儲(chǔ)到不同segment,查詢(xún)的時(shí)候會(huì)從每一個(gè)segment查詢(xún)top k,然后master對(duì)segment結(jié)果匯總?cè)∽罱Ktopk。
- 直連查詢(xún):對(duì)于小規(guī)模索引,會(huì)只構(gòu)建一份索引,然后根據(jù)需求復(fù)制到多個(gè)節(jié)點(diǎn),每一個(gè)節(jié)點(diǎn)都可以獨(dú)立直接提供查詢(xún),避免master轉(zhuǎn)發(fā)請(qǐng)求,可以顯著提升集群QPS。
六、業(yè)務(wù)支撐
6.1 內(nèi)容風(fēng)控
內(nèi)容風(fēng)控業(yè)務(wù)主要包括阿里媽媽廣告場(chǎng)景下文字、圖片及視頻內(nèi)容的風(fēng)險(xiǎn)識(shí)別及控制,沉淀基于音視圖文模型的風(fēng)險(xiǎn)識(shí)別能力,先把內(nèi)容轉(zhuǎn)換為向量,然后基于向量識(shí)別風(fēng)險(xiǎn),其中很重要的是向量相似計(jì)算。
通過(guò)共建合作,Dolphin VectorDB在2023雙十一期間支撐了風(fēng)控場(chǎng)景face人臉檢索、risk free等重要業(yè)務(wù),在升級(jí)使用Dolphin VectorDB后,風(fēng)控檢索服務(wù)在離線一致性、服務(wù)器成本、性能和易用性有顯著優(yōu)化提升,其中對(duì)于10億級(jí)超大規(guī)模向量檢索業(yè)務(wù),索引構(gòu)建時(shí)間減少71%,檢索RT快3倍,服務(wù)資源節(jié)省75%,開(kāi)發(fā)效率從天/小時(shí)提升到分鐘級(jí)別。
6.2 營(yíng)銷(xiāo)助手
在萬(wàn)堂AI講師、媽媽有料問(wèn)答助手和內(nèi)部知識(shí)庫(kù)通過(guò)提供營(yíng)銷(xiāo)知識(shí)問(wèn)答,解決廣告主對(duì)知識(shí)和答案"找得到"的訴求。我們把語(yǔ)雀和萬(wàn)堂書(shū)院等私域數(shù)據(jù)進(jìn)行段落切分、知識(shí)點(diǎn)抽取、向量轉(zhuǎn)換處理后存儲(chǔ)在Dolphin VectorDB,然后提供在線文本向量查詢(xún),對(duì)結(jié)果使用LLM做歸納總結(jié)。
6.3 人群AI圈選
在達(dá)摩盤(pán)圈人場(chǎng)景,過(guò)去是廣告主手動(dòng)圈人,而達(dá)摩盤(pán)有上千標(biāo)簽數(shù)百萬(wàn)選項(xiàng)值,對(duì)幾十萬(wàn)的中長(zhǎng)尾客戶(hù)來(lái)講學(xué)習(xí)和使用門(mén)檻極高,而通過(guò)自然語(yǔ)言到人群標(biāo)簽組合的方式極大降低圈人成本,降低理解和使用標(biāo)簽組合圈人成本。在該場(chǎng)景下,我們會(huì)根據(jù)用戶(hù)輸入自然語(yǔ)言,通過(guò)向量召回相似標(biāo)簽,然后組合標(biāo)簽得到圈人組合。
七、未來(lái)展望
向量計(jì)算能力是生成式AI場(chǎng)景下必備基礎(chǔ)能力,在搜索、推薦、廣告和大模型場(chǎng)景下都是重要能力依賴(lài),其能力scope決定上層業(yè)務(wù)規(guī)模和性能,未來(lái)我們主要有兩個(gè)發(fā)展方向:
- 向量計(jì)算能力持續(xù)升級(jí):業(yè)界對(duì)向量計(jì)算和存儲(chǔ)能力的需求會(huì)繼續(xù)提升,向量數(shù)據(jù)庫(kù)在超大規(guī)模場(chǎng)景下的計(jì)算性能、計(jì)算成本和易用性方面仍有較大發(fā)展空間,未來(lái)可拓展到百億規(guī)模計(jì)算。
- 多模計(jì)算能力融合:向量計(jì)算只是場(chǎng)景需求中的一個(gè)環(huán)節(jié),真實(shí)場(chǎng)景中向量計(jì)算會(huì)跟很多其他計(jì)算結(jié)合,Dolphin本身定位多模態(tài)融合引擎,未來(lái)會(huì)由點(diǎn)到面,解決多模態(tài)復(fù)雜計(jì)算中的性能問(wèn)題。
本文轉(zhuǎn)載自?? 阿里媽媽技術(shù)??,作者: 陌奈、赫琦
