AI生成存儲基座:自研超大規(guī)模向量數(shù)據(jù)庫 Dolphin VectorDB
一、業(yè)務(wù)背景
隨著以O(shè)penAI為代表的AI生成式技術(shù)不斷突破,在萬物皆可向量化的時(shí)代直接帶動向量計(jì)算和存儲需求大幅提升,讓向量存儲和計(jì)算技術(shù)關(guān)注度達(dá)到新高,業(yè)界涌現(xiàn)出各類向量數(shù)據(jù)庫。阿里媽媽擁有豐富的AI應(yīng)用場景,我們基于過去在向量引擎的積累和AI場景下需求,在近五年時(shí)間里不斷迭代升級,沉淀出Dolphin VectorDB,具有大規(guī)模、高性能、低成本且易開發(fā)的優(yōu)勢,在媽媽內(nèi)容風(fēng)控、營銷知識問答、達(dá)摩盤人群AI圈人和AI經(jīng)營分析師等場景中落地應(yīng)用。尤其在支持內(nèi)容風(fēng)控10億級超大規(guī)模向量檢索場景中,使用Dolphin VectorDB表現(xiàn)出性能、成本及易用性綜合優(yōu)勢,獲得顯著收益:
- 索引構(gòu)建加速:索引構(gòu)建時(shí)間減少71%。
- 檢索速度更快:檢索RT快3倍。
- 資源使用更省:服務(wù)資源節(jié)省75%。
- 研發(fā)效能提升:開發(fā)向量召回業(yè)務(wù)效率從天/小時(shí)提升到分鐘級別。
二、行業(yè)技術(shù)調(diào)研
業(yè)界主要分為向量數(shù)據(jù)庫和有向量能力的數(shù)據(jù)庫兩條技術(shù)路線:
- 向量數(shù)據(jù)庫 (Specified Vector Database):提供基于SDK的RPC/HTTP調(diào)用,專門用于向量數(shù)據(jù)的構(gòu)建、存儲和查詢。
- 支持向量能力的數(shù)據(jù)庫:基于已有各類通用數(shù)據(jù)庫系統(tǒng),再結(jié)合向量庫(Vector Library)實(shí)現(xiàn)向量數(shù)據(jù)的構(gòu)建、存儲和查詢能力。

2.1 業(yè)界現(xiàn)狀
業(yè)界向量數(shù)據(jù)庫百花齊放,但面臨復(fù)雜業(yè)務(wù)場景仍有些不足:
- 傳統(tǒng)支持向量能力的數(shù)據(jù)庫主要面向靜態(tài)向量數(shù)據(jù),不適用于索引數(shù)據(jù)頻繁更新場景,不支持實(shí)時(shí)向量寫入及更新。
- 向量數(shù)據(jù)庫普遍支持在線計(jì)算,但沒有專門針對離線批量計(jì)算場景,而真實(shí)場景同一業(yè)務(wù)會有在線和離線批量兩類計(jì)算需求,很多情況下在線和離線計(jì)算不是一套服務(wù),導(dǎo)致在線和離線因索引不同查詢結(jié)果不一致。
- 現(xiàn)有產(chǎn)品在大規(guī)模、高性能和低成本這三個方面很難平衡,既能滿足大規(guī)模、高性能,還能保證低成本的挑戰(zhàn)很大。
基于當(dāng)前現(xiàn)狀,Dolphin VectorDB選擇第二條技術(shù)路線(支持向量能力的數(shù)據(jù)庫),基于Dolphin多年在MPP數(shù)據(jù)庫方向能力積累,實(shí)現(xiàn)高性能向量數(shù)據(jù)庫能力。
三、技術(shù)演進(jìn)
Dolphin(延展閱讀:??Dolphin:面向營銷場景的超融合多模智能引擎??)自2019年開始探索向量計(jì)算,向量引擎底層計(jì)算能力經(jīng)歷從最初版使用Hologres內(nèi)置向量插件,到基于Faiss自研2.0版,逐步迭代到3.0版基于DFS共享存儲(DFS類似開源的HDFS),最后升級到現(xiàn)在的Dolphin VectorDB,每一次升級背后都是業(yè)務(wù)規(guī)模擴(kuò)展和新功能需求,推動技術(shù)不斷迭代進(jìn)化。

3.1 向量引擎1.0
為支撐阿里媽媽達(dá)摩盤和直通車BP人群Lookalike業(yè)務(wù)(Lookalike是一種基于種子人群特征放大人群規(guī)模的算法技術(shù)),Dolphin向量引擎1.0版基于Hologres實(shí)現(xiàn)1.0版本向量計(jì)算能力(延展閱讀:??阿里媽媽Dolphin智能計(jì)算引擎基于Flink+Hologres實(shí)踐??),通過計(jì)算種子人群中心向量,然后從總體中召回Top K實(shí)現(xiàn)人群擴(kuò)展。整個人群Lookalike擴(kuò)展過程如下圖所示。

在業(yè)務(wù)支持中Dolphin初步集成基于Hologres的向量召回能力。
3.2 向量引擎2.0
在1.0版技術(shù)方案中,單shard模式有單點(diǎn)瓶頸,集群CPU利用率不高,多shard會構(gòu)建分布式索引,但性能一般。為解決性能瓶頸,我們基于GreenPlum(下文簡稱“GP”)數(shù)據(jù)庫和faiss自研實(shí)現(xiàn)2.0版(方案已開源,gpdb-faiss-vector 項(xiàng)目地址:https://github.com/AlibabaIncubator/gpdb-faiss-vector),延展閱讀:??Dolphin:面向營銷場景的超融合多模智能引擎??),基于UDF實(shí)現(xiàn)索引構(gòu)建和查詢能力,并采用共享緩存方案減少索引切換開銷,性能上實(shí)現(xiàn)支持總向量百萬規(guī)模,單類目幾十萬規(guī)模的向量召回計(jì)算。

基于GP的方案,對于小規(guī)模索引我們采用復(fù)制表可大幅提升QPS;對于帶類目(cate_id)的場景我們使用分布式表方案,其中對于復(fù)制表場景壓測QPS(800CU資源)可以達(dá)到5000+qps。

此外還做了復(fù)制表和分布式表測試,其中復(fù)制表是把索引復(fù)制到每一個計(jì)算節(jié)點(diǎn);分布式表是按cate把索引劃分到不同節(jié)點(diǎn),對每個cate_id構(gòu)建一份索引。

此外為支持Lazada算法千萬級大規(guī)模批量向量召回需求,我們基于GP實(shí)現(xiàn)離線批量計(jì)算方案,雖然自研方案性能有較大提升,但是索引構(gòu)建是在數(shù)據(jù)庫進(jìn)行,會受限于數(shù)據(jù)庫存儲限制,最大構(gòu)建的索引限制為1G,導(dǎo)致更大規(guī)模的索引無法使用數(shù)據(jù)庫構(gòu)建,于是我們又進(jìn)行新一輪升級。
3.3 向量引擎3.0
從系統(tǒng)架構(gòu)上來看,Dolphin向量引擎2.0本質(zhì)上是基于數(shù)據(jù)庫的插件實(shí)現(xiàn),其索引構(gòu)建與召回流程完全依賴于數(shù)據(jù)庫系統(tǒng)內(nèi)核和執(zhí)行器調(diào)度,存在諸多限制,比如索引大小不能超過1G的數(shù)據(jù)庫字段限制,單個集群構(gòu)建的索引只能自用無法共享等。
為支持構(gòu)建億級向量索引,我們設(shè)計(jì)3.0方案,在數(shù)據(jù)庫segment節(jié)點(diǎn)實(shí)現(xiàn)外置獨(dú)立向量服務(wù),只依賴于數(shù)據(jù)庫的數(shù)據(jù)分發(fā)與SQL化接口能力,理論上可以實(shí)現(xiàn)任意大小索引構(gòu)建存儲和查詢。
從執(zhí)行流程上看,通過對索引構(gòu)建和向量召回的流程進(jìn)行拆分,并將構(gòu)建好的索引導(dǎo)入DFS存儲,實(shí)現(xiàn)了一次索引構(gòu)建可供在線、批量甚至多個集群讀取使用,并以本地磁盤、內(nèi)存實(shí)現(xiàn)索引多級緩存,極大提升了召回流程效率,同時(shí)也保障了在線向量召回集群不會受索引構(gòu)建任務(wù)影響。

Dolphin向量引擎3.0可以很好支持超大規(guī)模向量索引構(gòu)建和在離線一致性查詢能力,但面對大模型實(shí)時(shí)寫入更新場景還無法支持。
3.4 Dolphin VectorDB
Dolphin VectorDB源于跟內(nèi)容風(fēng)控團(tuán)隊(duì)合作共建,??內(nèi)容風(fēng)控業(yè)務(wù)涉及圖文、視頻內(nèi)容的安全底線??,過去在很多重要風(fēng)控事件中發(fā)揮重要作用,對向量召回能力要求低延遲、高吞吐、一致性和易用性。過去內(nèi)容風(fēng)控主要使用集團(tuán)內(nèi)DII、BE和Proxima CE 三套檢索引擎來實(shí)現(xiàn)業(yè)務(wù)需求,但是仍面臨巨大挑戰(zhàn):
- 低延遲:在線審核鏈路要求低延遲、實(shí)時(shí)增量更新黑圖、文相似樣本庫,同時(shí)因?yàn)閷V告主審核有體感,需要非常高的穩(wěn)定性保障要求。
- 高吞吐:離線會面臨百億級別歷史全量廣告送審內(nèi)容的高吞吐壓力,例如敏感圖文問題,此外還必須按照監(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套方案,每一種方案針對特定的問題都能很好的解決,但會出現(xiàn)在離線不一致和維護(hù)成本高的問題。

面對風(fēng)控復(fù)雜的場景需求和大模型場景新需求,我們基于向量引擎3.0版本進(jìn)一步升級為Dolphin VectorDB,實(shí)現(xiàn)體系化的數(shù)據(jù)接入、查詢和索引構(gòu)建等標(biāo)準(zhǔn)向量數(shù)據(jù)庫能力,實(shí)現(xiàn)一套引擎高效支持在線和離線業(yè)務(wù)需求。
四、技術(shù)架構(gòu)
Dolphin VectorDB整體技術(shù)架構(gòu)分為五個模塊,包括數(shù)據(jù)接入、查詢、執(zhí)行、存儲及元數(shù)據(jù)管理。

4.1 模塊介紹
4.1.1 數(shù)據(jù)接入模塊
數(shù)據(jù)接入模塊是整個VectorDB的向量數(shù)據(jù)入口,負(fù)責(zé)外部實(shí)時(shí)及批量數(shù)據(jù)接入,元數(shù)據(jù)記錄以及調(diào)用執(zhí)行模塊構(gòu)建向量索引。數(shù)據(jù)接入分為兩個鏈路:
- 實(shí)時(shí)鏈路:業(yè)務(wù)方通過SDK的請求經(jīng)過消息隊(duì)列Kafka,然后實(shí)時(shí)更新到在線集群向量數(shù)據(jù)表中。
- 離線鏈路:負(fù)責(zé)將odps數(shù)據(jù)表批量導(dǎo)入到在線集群,同時(shí)控制執(zhí)行模塊對向量數(shù)據(jù)使用離線集群構(gòu)建索引,導(dǎo)入存儲模塊DFS提供給不同集群使用。
4.1.2 查詢模塊
查詢模塊負(fù)責(zé)接收HTTP/RPC/SDK請求,先查詢元數(shù)據(jù)并對請求進(jìn)行轉(zhuǎn)譯,再經(jīng)過負(fù)載均衡路由到執(zhí)行模塊。
- HTTP/RPC:用戶輸入向量查詢SQL,直接轉(zhuǎn)譯、路由、執(zhí)行
- SDK:先對用戶輸入?yún)?shù)組裝為查詢SQL,然后走轉(zhuǎn)譯、路由、執(zhí)行流程
4.1.3 執(zhí)行模塊
執(zhí)行模塊是與向量索引數(shù)據(jù)的計(jì)算直接相關(guān)的模塊,它的基本功能包括:
- 接收數(shù)據(jù)接入模塊索引構(gòu)建請求,從存儲模塊讀取原始的向量數(shù)據(jù),構(gòu)建向量索引文件存回遠(yuǎn)端存儲
- 將索引加載到不同的線上任務(wù)集群
- 執(zhí)行在線向量檢索服務(wù)和離線批量向量召回任務(wù)計(jì)算。
因此執(zhí)行層是溝通其他各層的橋梁,接收數(shù)據(jù)接入層和查詢層的訪問。
執(zhí)行模塊由多個負(fù)責(zé)在線、離線、索引構(gòu)建任務(wù)的GP分布式數(shù)據(jù)庫集群組成,每個GP集群獨(dú)立負(fù)責(zé)對應(yīng)的工作,互相之間共享一份向量索引。集群中的每個計(jì)算節(jié)點(diǎn)執(zhí)行獨(dú)立或分布式并行計(jì)算。計(jì)算節(jié)點(diǎn)由GP數(shù)據(jù)庫進(jìn)程和基于Faiss的向量引擎RPC服務(wù)進(jìn)程構(gòu)成,GP負(fù)責(zé)數(shù)據(jù)表存儲、SQL執(zhí)行與任務(wù)分發(fā),與向量引擎進(jìn)程溝通。而向量引擎會實(shí)際執(zhí)行從與存儲模塊溝通的數(shù)據(jù)讀寫,F(xiàn)aiss向量索引構(gòu)建,執(zhí)行單條或批量的向量召回計(jì)算。
4.1.4 存儲模塊
負(fù)責(zé)存儲原始向量數(shù)據(jù)和構(gòu)建好的向量索引。
1. 負(fù)責(zé)原始向量和構(gòu)建好的向量索引存儲
2. 執(zhí)行層需要數(shù)據(jù)可以直接從存儲層讀取。
4.1.5 元數(shù)據(jù)模塊
負(fù)責(zé)存儲索引構(gòu)建的參數(shù)和表名信息,包括在線和離線場景數(shù)據(jù),在線元數(shù)據(jù)用于查詢轉(zhuǎn)譯使用。
五、核心能力
5.1 在離線一致性
向量召回在線場景和離線場景往往是不同引擎,即使相同參數(shù)也大概率會有召回不一致,這對很多場景其實(shí)影響不大,但對于風(fēng)控這類底線安全的場景,結(jié)果不一致會導(dǎo)致清理不完全風(fēng)險(xiǎn)外露,過去風(fēng)控場景使用BE作為在線引擎,Proxima CE作為離線計(jì)算引擎,對在離線一致性的需求非常大。Dolphin VectorDB設(shè)計(jì)索引構(gòu)建存儲和計(jì)算分離方案,構(gòu)建好的索引存儲在共享存儲DFS,分別提供給在線計(jì)算服務(wù)和離線計(jì)算服務(wù),這樣實(shí)現(xiàn)索引一次構(gòu)建多場景使用,不僅減少構(gòu)建成本,還保證在離線查詢結(jié)果一致。

5.2 實(shí)時(shí)更新
實(shí)時(shí)索引更新是在大模型場景和風(fēng)控場景下強(qiáng)訴求,在線索引數(shù)據(jù)需要實(shí)時(shí)更新寫入到索引庫。我們基于數(shù)據(jù)庫表模型特點(diǎn),實(shí)現(xiàn)基于數(shù)據(jù)庫實(shí)現(xiàn)的高性能實(shí)時(shí)更新能力,通過離線構(gòu)建和實(shí)時(shí)寫入數(shù)據(jù)兩條鏈路,支持實(shí)時(shí)更新QPS可以達(dá)到萬級別。

實(shí)時(shí)更新設(shè)計(jì)架構(gòu)
5.3 多模式查詢
針對索引的規(guī)模大小,分為兩種查詢模式,一種是針對大規(guī)模索引的分布式查詢;第二種是面向小規(guī)模索引的segment直查模式。

- 分布式查詢:對于大規(guī)模向量(一般千萬級以上),會把向量拆分存儲到不同segment,查詢的時(shí)候會從每一個segment查詢top k,然后master對segment結(jié)果匯總?cè)∽罱Ktopk。
- 直連查詢:對于小規(guī)模索引,會只構(gòu)建一份索引,然后根據(jù)需求復(fù)制到多個節(jié)點(diǎn),每一個節(jié)點(diǎn)都可以獨(dú)立直接提供查詢,避免master轉(zhuǎn)發(fā)請求,可以顯著提升集群QPS。
六、業(yè)務(wù)支撐
6.1 內(nèi)容風(fēng)控
內(nèi)容風(fēng)控業(yè)務(wù)主要包括阿里媽媽廣告場景下文字、圖片及視頻內(nèi)容的風(fēng)險(xiǎn)識別及控制,沉淀基于音視圖文模型的風(fēng)險(xiǎn)識別能力,先把內(nèi)容轉(zhuǎn)換為向量,然后基于向量識別風(fēng)險(xiǎn),其中很重要的是向量相似計(jì)算。
通過共建合作,Dolphin VectorDB在2023雙十一期間支撐了風(fēng)控場景face人臉檢索、risk free等重要業(yè)務(wù),在升級使用Dolphin VectorDB后,風(fēng)控檢索服務(wù)在離線一致性、服務(wù)器成本、性能和易用性有顯著優(yōu)化提升,其中對于10億級超大規(guī)模向量檢索業(yè)務(wù),索引構(gòu)建時(shí)間減少71%,檢索RT快3倍,服務(wù)資源節(jié)省75%,開發(fā)效率從天/小時(shí)提升到分鐘級別。
6.2 營銷助手
在萬堂AI講師、媽媽有料問答助手和內(nèi)部知識庫通過提供營銷知識問答,解決廣告主對知識和答案"找得到"的訴求。我們把語雀和萬堂書院等私域數(shù)據(jù)進(jìn)行段落切分、知識點(diǎn)抽取、向量轉(zhuǎn)換處理后存儲在Dolphin VectorDB,然后提供在線文本向量查詢,對結(jié)果使用LLM做歸納總結(jié)。

6.3 人群AI圈選
在達(dá)摩盤圈人場景,過去是廣告主手動圈人,而達(dá)摩盤有上千標(biāo)簽數(shù)百萬選項(xiàng)值,對幾十萬的中長尾客戶來講學(xué)習(xí)和使用門檻極高,而通過自然語言到人群標(biāo)簽組合的方式極大降低圈人成本,降低理解和使用標(biāo)簽組合圈人成本。在該場景下,我們會根據(jù)用戶輸入自然語言,通過向量召回相似標(biāo)簽,然后組合標(biāo)簽得到圈人組合。
七、未來展望
向量計(jì)算能力是生成式AI場景下必備基礎(chǔ)能力,在搜索、推薦、廣告和大模型場景下都是重要能力依賴,其能力scope決定上層業(yè)務(wù)規(guī)模和性能,未來我們主要有兩個發(fā)展方向:
- 向量計(jì)算能力持續(xù)升級:業(yè)界對向量計(jì)算和存儲能力的需求會繼續(xù)提升,向量數(shù)據(jù)庫在超大規(guī)模場景下的計(jì)算性能、計(jì)算成本和易用性方面仍有較大發(fā)展空間,未來可拓展到百億規(guī)模計(jì)算。
- 多模計(jì)算能力融合:向量計(jì)算只是場景需求中的一個環(huán)節(jié),真實(shí)場景中向量計(jì)算會跟很多其他計(jì)算結(jié)合,Dolphin本身定位多模態(tài)融合引擎,未來會由點(diǎn)到面,解決多模態(tài)復(fù)雜計(jì)算中的性能問題。
本文轉(zhuǎn)載自?? 阿里媽媽技術(shù)??,作者: 陌奈、赫琦

















