自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

抖音云原生向量數(shù)據(jù)庫從“非主流”到“新常態(tài)”的演變

云計算 云原生 其他數(shù)據(jù)庫
隨著深度學(xué)習廣泛應(yīng)用于多種場景,一切皆可Embedding已成為行業(yè)共識,同時對embedding的產(chǎn)物——向量的檢索需求也隨之出現(xiàn)。然而,向量檢索和傳統(tǒng)結(jié)構(gòu)化數(shù)據(jù)檢索所面臨的挑戰(zhàn)并不完全相同。本文將介紹抖音在向量檢索方面逐步迭代的工程實踐經(jīng)驗。

一、向量數(shù)據(jù)庫產(chǎn)生的背景

1、非結(jié)構(gòu)化數(shù)據(jù)檢索問題

結(jié)構(gòu)化數(shù)據(jù)是指可以表示成二維表格的數(shù)據(jù),它有明確固定的字段和類型。而非結(jié)構(gòu)化數(shù)據(jù)是指不能表示成二維表格的數(shù)據(jù),例如:文本、圖片、視頻。抖音集團的產(chǎn)品矩陣每天都會產(chǎn)生海量的數(shù)據(jù),其中結(jié)構(gòu)化數(shù)據(jù)只占一小部分,大部分數(shù)據(jù)都是非結(jié)構(gòu)化數(shù)據(jù),業(yè)界通常認為非結(jié)構(gòu)化數(shù)據(jù)會占全部數(shù)據(jù)的80%,但是對于抖音集團的業(yè)務(wù)形態(tài),非結(jié)構(gòu)化數(shù)據(jù)的占比只會更高。如何利用好這些非結(jié)構(gòu)化數(shù)據(jù)對我們產(chǎn)品功能的完善,業(yè)務(wù)效果的提升都至關(guān)重要。

圖片

對非結(jié)構(gòu)化數(shù)據(jù)的檢索,以文本檢索為例,傳統(tǒng)上使用倒排索引,結(jié)合BM25,TF-IDF算法進行。這種方法有一些問題:

  • 文本泛化能力、語義檢索能力不足。
  • 基于切詞結(jié)果,難以推廣到圖片視頻等多模態(tài)場景。
  • 數(shù)據(jù)持續(xù)增長時性能不足。

但是,現(xiàn)在有了深度學(xué)習,這產(chǎn)生了向量表示法,通過語言模型(如doc2vec、bert、LLM等),將文本轉(zhuǎn)換為向量,從而將非結(jié)構(gòu)化數(shù)據(jù)檢索問題轉(zhuǎn)化為向量近似檢索問題。

圖片

2、向量檢索的核心概念

向量檢索是從一堆向量里找到和某個給定向量相似的一批向量,這里有三個問題需要明確:

  • 如何衡量向量間的相似性?通常使用的度量方式有歐氏距離、內(nèi)積和余弦距離。
  • 需要檢索出多少個結(jié)果?通常指定一個整數(shù)topK。
  • 如何評估檢索效果?需要平衡檢索精度和檢索效率兩個指標

通常受限于算力和響應(yīng)時間,向量檢索得到的是近似最優(yōu)結(jié)果。常見的做法可以分為三類(三類也可結(jié)合進行):

  • 近似最近鄰算法(ANN)。借助輔助結(jié)構(gòu)進行剪枝,以加快檢索速度,常見的有:HNSW,IVF。
  • 量化算法。通過降低相關(guān)性計算開銷來加速檢索過程,如PQ算法,標量量化。
  • 實現(xiàn)上的優(yōu)化。SIMD硬件指令集加速方案;內(nèi)存編排:提高cache命中率。

抖音集團實踐:

  • 在ANN算法方面,我們對開源HNSW進行了優(yōu)化,并自主研發(fā)了IVF算法,在保持檢索精度的同時提高了性能;
  • 在量化方面,除了PQ量化外,我們還自主研發(fā)了一套標量量化算法,支持int16、int8和int4量化,實現(xiàn)了單張T4顯卡(2億候選向量)的檢索;
  • 在SIMD和內(nèi)存編排等實現(xiàn)層面的優(yōu)化上也做了大量的工作。

圖片

3、從檢索算法到向量數(shù)據(jù)庫

把向量檢索的這些功能整合起來,就形成了向量數(shù)據(jù)庫。

向量數(shù)據(jù)庫的接口包括存儲和檢索向量。在功能劃分上,包含存儲、檢索和分析。同時,作為在線服務(wù),高可用、高性能和易用性都要具備。

完成這些后,一個具備核心向量檢索功能的向量數(shù)據(jù)庫就誕生了。這是一個存算一體的向量數(shù)據(jù)庫。

圖片

二、向量數(shù)據(jù)庫的技術(shù)演進

1、向量標量混合檢索

當向量數(shù)據(jù)庫推向業(yè)務(wù)場景時,我們發(fā)現(xiàn),向量數(shù)據(jù)通常與結(jié)構(gòu)化數(shù)據(jù)配合使用。例如,在將文檔表示為向量的同時,還需要存儲文檔所屬的部門,以方便在檢索時進行權(quán)限過濾。這類需求可以抽象為使用與向量相關(guān)的結(jié)構(gòu)化數(shù)據(jù)進行過濾。

業(yè)界對于這種過濾需求通常有兩種解決方案:

  • 后過濾。將topK的結(jié)果擴大一定倍數(shù),檢索出更多的向量,然后用結(jié)構(gòu)化數(shù)據(jù)做過濾,留下topK個。對于向量檢索和DSL過濾結(jié)果的重合較少的情況,可能會出現(xiàn)召回結(jié)果不足topK的情況。因此,這種方法適用于結(jié)構(gòu)化過濾掉的比例較低,向量召回結(jié)果比例較高的場景。
  • 先過濾。先使用DSL過濾數(shù)據(jù)集,然后在結(jié)果中進行向量檢索。這種方案適用于DSL過濾結(jié)果較少的場景;如果結(jié)果較大的話,性能會有明顯的下降。

業(yè)界通常結(jié)合兩種方案,對檢索任務(wù)進行編排,通過分析數(shù)據(jù)分布,來決定使用哪種方案。但是,隨著數(shù)據(jù)量的增加,仍然可能會出現(xiàn)兩種檢索鏈路性能都不好的情況。

抖音集團實踐:為解決這一問題,技術(shù)團隊研發(fā)了DSL定向引擎,支持在檢索過程中同時進行向量檢索和DSL過濾(結(jié)構(gòu)化過濾)。該引擎具有以下特點:

  • 高性能:因為在進行DSL過濾時,只需提取部分向量進行相似度計算,這會打斷內(nèi)存連續(xù)性,從而降低向量檢索的性能。因此,DSL過濾判斷的開銷必須足夠低,要求它遠低于向量檢索的開銷,以確保在線檢索性能。
  • 邏輯完備:DSL語法可以支持根據(jù)場景和用戶的不同定制相應(yīng)的檢索過濾條件,以支持業(yè)務(wù)在線檢索。
  • 按需終止:如果在向量檢索和過濾過程中遍歷了足夠多的節(jié)點,可以保證檢索效果,則應(yīng)盡快退出該檢索過程。
  • 執(zhí)行計劃優(yōu)化:根據(jù)DSL過濾結(jié)果預(yù)估結(jié)合向量分布情況,綜合決策要執(zhí)行的檢索鏈路。

除了DSL定向引擎之外,我們還實現(xiàn)了子索引拆分、自適應(yīng)精度調(diào)節(jié)和在線多路索引歸并等多種定制化能力,打造了一整套向量檢索工具庫。

圖片

2、存算一體升級為存算分離

盡管功能逐漸完備,但我們向量數(shù)據(jù)庫在初期是基于存算一體(存儲和計算都在同一臺機器上)的架構(gòu)實現(xiàn)的,但在推廣過程中,這種架構(gòu)在使用上的一些問題也逐漸顯現(xiàn)出來。比如在文檔檢索的場景中,一部分文檔質(zhì)量較高,需要高精度的召回,全局的文檔作為補充,我們還需要區(qū)分部門內(nèi)和部門外的文檔列表來分開展示。這就要求在同一份向量數(shù)據(jù)上產(chǎn)生不同的可檢索集、不同精度的索引以及不同的候選集。

在存算一體框架下,為了避免影響線上檢索流程,我們使用少量線程異步地完成索引的重建流程。為適配數(shù)據(jù)分布的變化,這個索引還要定期重建。另外,在有些業(yè)務(wù)場景中,需要使用不同候選、不同精度的檢索策略。如果為每種策略都建立一套索引,這會進一步放大索引構(gòu)建的資源消耗,導(dǎo)致索引構(gòu)建效率低、還會影響在線服務(wù)穩(wěn)定性。

為此,我們逐步開展了存算分離的架構(gòu)升級工作。

我們的存算分離架構(gòu),主要分成三個部分:

  • 向量存儲。用戶將他們的向量存儲在向量存儲中。
  • 批式構(gòu)建。批式構(gòu)建集群自動調(diào)度向量索引的構(gòu)建流程。在此過程中,會篩選候選集,根據(jù)不同的精度要求適配不同的參數(shù),構(gòu)建相應(yīng)的索引,然后通過P2P管道分發(fā)給在線的多副本檢索服務(wù)。
  • 在線檢索服務(wù)。負責實時在線檢索。

這種設(shè)計除了解決一份向量多個索引、支持多個場景的問題,還帶來以下優(yōu)勢:

  • 節(jié)省了索引構(gòu)建資源,一次構(gòu)建,多處分發(fā)。
  • 加快索引構(gòu)建,因為存算一體中,為了不影響實時檢索性能,構(gòu)建過程只能使用少量線程(不能使CPU滿負荷運行),而存算分離后,就沒有這個限制,可以將CPU滿負荷運行。
  • 在線檢索服務(wù)穩(wěn)定性得到明顯提升,因為構(gòu)建過程不再影響在線檢索服務(wù)。
  • 對自動調(diào)參特別友好。基于這套存算分離的框架,我們搭建了一套自動調(diào)參的工具庫,支持用戶在寫入向量數(shù)據(jù)后、在索引構(gòu)建前以及上線后,持續(xù)對索引的構(gòu)建參數(shù)和檢索參數(shù)進行調(diào)優(yōu)。

圖片

3、流式更新

隨著對時效性要求較高的業(yè)務(wù)接入,如何有效的提升新內(nèi)容的檢索效率,成為業(yè)務(wù)關(guān)注的重點。例如,在文檔檢索場景中,如果一篇文檔剛寫完,或者新授權(quán)了一個文檔,用戶需要等待半個小時才能檢索到,這在業(yè)務(wù)上是無法接受的。為了解決這個問題,我們開發(fā)了流式更新能力。

加入了流式更新能力的索引構(gòu)建過程分為兩個部分。

  • 優(yōu)化批式加流式的更新事件產(chǎn)生過程。在新版本的索引上線之前,有一個批式構(gòu)建過程,這個過程需要一些時間。在構(gòu)建過程中,仍有新的數(shù)據(jù)更新事件出現(xiàn),這需要在批式版本更新完成時,將流式更新事件訂閱回撥到批式更新開始時的事件時間。等到追平這個延遲后,再繼續(xù)流式更新事件。
  • 對索引更新的改造。為了實時更新索引,我們對向量索引進行了并發(fā)安全的改造,包括HNSW和IVF索引。在提供在線檢索服務(wù)的同時,我們基本可以實現(xiàn)向量的增刪改查。這里單獨把DSL索引提出來,是因為DSL索引對數(shù)據(jù)一致性的要求比較高,一條DSL更新操作寫入的字段較多,數(shù)據(jù)一致性安全和更新并發(fā)性安全會明顯影響在線檢索性能。因此,我們采用了雙buf的方案,寫入操作只發(fā)生在更新buf上,檢索Buf支持無鎖的檢索流程,整體的雙buf方案也能做到秒級的更新延遲。

4、云原生轉(zhuǎn)變

隨著抖音集團產(chǎn)品矩陣中的產(chǎn)品越來越多接入向量數(shù)據(jù)庫,為每個業(yè)務(wù)都搭建一套存算分離的框架的成本較高,包括部署成本、運維成本和硬件成本。為解決這一問題,我們對存算分離的框架進行了進一步迭代。

  • 多租戶編排改造

①向量存儲部分改造為向量存儲集群。

②索引構(gòu)建部分改造為索引構(gòu)建集群。

③在線檢索服務(wù)改造成支持多租戶形式。

我們的資源調(diào)度模塊可以自動化的去拉取數(shù)據(jù)開始索引構(gòu)建任務(wù),然后分發(fā)給在線多租戶檢索服務(wù)。改造后的在線檢索服務(wù)支持多路索引,這能進一步降低在線服務(wù)的開銷。在初期,為了保證服務(wù)穩(wěn)定性,我們的在線檢索服務(wù)編排是手動進行的。

  • 自動化調(diào)度

隨著業(yè)務(wù)增長,索引體積越來越大,為了保證多租戶服務(wù)的穩(wěn)定性。優(yōu)化手動編排,人工選擇集群不合理等問題。我們開發(fā)了自動化調(diào)度框架。

對在線檢索服務(wù)編排的改造,主要采用slot化的方式。一個slot是索引的一個最小調(diào)度單元。通過索引元信息管理調(diào)度服務(wù)會根據(jù)在線檢索服務(wù)配額和實時調(diào)用流量,自動調(diào)入調(diào)出slot。

為了配合自動化調(diào)度方案的上線,我們開發(fā)了很多輔助模塊。例如,索引的流量感知模塊,用于為調(diào)度服務(wù)提供信息,以盡快響應(yīng)整個索引的流量變化。再比如索引配額管理系統(tǒng),避免有的索引流量突增,影響整個在線檢索集群的穩(wěn)定性。

其中一個關(guān)鍵的模塊是索引的精確計價系統(tǒng)。為了降低整體在線服務(wù)的計算成本,我們會將一些小內(nèi)存的、低請求量的索引調(diào)度到同一個實例上。此時,如何統(tǒng)計和分攤成本就很關(guān)鍵了。我們實現(xiàn)了一個精確到時鐘周期的開銷監(jiān)控,以進行服務(wù)的成本統(tǒng)計和分攤。

圖片

5、火山引擎向量數(shù)據(jù)庫VikingDB技術(shù)全景

隨著大語言模型的浪潮興起,向量數(shù)據(jù)庫的商業(yè)價值也慢慢凸顯出來。我們決定在火山引擎上線我們的云原生向量數(shù)據(jù)庫,提供和抖音集團內(nèi)部向量數(shù)據(jù)庫完全一致的服務(wù),也會把內(nèi)部探索和優(yōu)化的成果同步到這個產(chǎn)品上。

它整體的產(chǎn)品結(jié)構(gòu)如下圖所示。整個產(chǎn)品基于火山引擎的云基礎(chǔ)設(shè)施,提供經(jīng)過我們深度打磨和優(yōu)化的各個引擎,提供從多模態(tài)數(shù)據(jù)寫入,到向量生成,再到在線檢索,以及上線后的彈性調(diào)度和監(jiān)控的一整套全鏈路解決方案。

圖片

用戶接入時,通過我們的多語言SDK或http API寫入自己的非結(jié)構(gòu)化數(shù)據(jù)。然后,使用查詢分析工具對數(shù)據(jù)進行管理和分析。進行簡單配置后,即可自動化調(diào)度。從非結(jié)構(gòu)化數(shù)據(jù)到向量生產(chǎn)的pipeline,都通過平臺自動化調(diào)度實現(xiàn)。數(shù)據(jù)寫入完成后,還支持在索引上線前進行自動調(diào)參,上線后進行流式更新,以及持續(xù)的自動調(diào)參以優(yōu)化整體在線檢索效果和資源成本。在在線檢索階段,支持整體服務(wù)的按需自適應(yīng)彈性調(diào)度。從數(shù)據(jù)寫入到在線檢索的各個階段,有全鏈路的監(jiān)控和告警,以保證在線服務(wù)的穩(wěn)定性。基于這套產(chǎn)品,我們預(yù)期會在大語言模型的智能問答、智能搜索、智能推薦廣告、版權(quán)去重等場景下展開廣泛應(yīng)用。

這套云原生向量數(shù)據(jù)庫有以下幾個關(guān)鍵優(yōu)勢。

  • 極致性能:內(nèi)置多種火山引擎內(nèi)部自研索引算法,支持內(nèi)部多個百億庫,百億級向量檢索規(guī)模,檢索性能在10ms內(nèi)。
  • 實時性:支持向量數(shù)據(jù)實時寫入、實時更新,支持實時索引、自動索引。
  • 穩(wěn)定高效:存算分離架構(gòu),單數(shù)據(jù)多場景,節(jié)約計算資源,提高在線穩(wěn)定性,保證高可用性。
  • 多場景最佳實踐:20+內(nèi)部業(yè)務(wù),多個百億級別庫檢索實踐,內(nèi)部多個大模型場景的落地實踐,例如:飛書問答,飛書文檔,搜索中臺、電商搜索等。

圖片

三、向量數(shù)據(jù)庫的應(yīng)用展望

介紹完我們在云原生向量數(shù)據(jù)庫上的技術(shù)和優(yōu)勢后,這一節(jié)對向量數(shù)據(jù)庫做一些展望。

1、對大語言模型(LLM)的能力補充

在大語言模型中,prompt是給大語言模型的輸入。prompt的信息含量會影響最終回答的質(zhì)量。然而,由于算法原理和計算能力的限制,prompt的長度是有限制的。無論是多輪調(diào)校,還是個性化問答的感知,還是特定領(lǐng)域的知識灌入,都需要更長的prompt。其次,由于訓(xùn)練樣本的限制,大語言模型的時效性存在缺陷,只能知道訓(xùn)練數(shù)據(jù)截止時輸入的信息,對于需要時效性回答的場景需要支持手段。對于這個問題,向量數(shù)據(jù)庫可以在一定程度上解決。

圖片

  • 補充大模型長期記憶。對于多輪調(diào)校和個性化回答,把調(diào)校過程和用戶的問答結(jié)果都通過文本編碼寫入向量數(shù)據(jù)庫中,然后在用戶提問的過程中,把問題轉(zhuǎn)化為向量,在向量數(shù)據(jù)庫中查找長期記憶去回顧歷史,找到和當前問題最相近的歷史調(diào)校結(jié)果和用戶自己的問答,灌入大語言模型的context中優(yōu)化整個回答的質(zhì)量。
  • 補充特定領(lǐng)域知識??梢栽谙蛄繑?shù)據(jù)庫中灌入領(lǐng)域知識。在用戶提問的時候,提前把相關(guān)的文本信息檢索出來,灌入大模型的context中,去優(yōu)化大語言模型在專業(yè)領(lǐng)域的回答效果。
  • 優(yōu)化大模型的時效性問題。比如實時熱點新聞,可以通過流式更新能力,把實時信息寫入向量數(shù)據(jù)庫中。在用戶提問實時熱點問題時,通過向量數(shù)據(jù)庫把熱點信息檢索出來,放到大語言模型的上下文中去優(yōu)化回答效果。

2、大語言模型(LLM)潛在的安全解決方案

大語言模型除了prompt長度限制外,另一個突出問題是數(shù)據(jù)安全問題。例如,支付行業(yè)建議大家在支付場景謹慎使用chatGPT。而在互聯(lián)網(wǎng)行業(yè),很多公司也禁用了chatGPT,這都是出于安全角度考慮。

目前,在安全方面有兩個關(guān)注點:

第一,用戶的提問會被記錄下來,這可能導(dǎo)致問題被泄露。

第二,A用戶的提問可能被作為訓(xùn)練數(shù)據(jù)訓(xùn)練模型,導(dǎo)致其他用戶B在使用時獲得A用戶提問時提供的隱私信息。這些問題預(yù)期可以通過控制問答數(shù)據(jù)的使用方式來解決。

但是,另一類問題從大語言模型的機制上就難以解決。大語言模型中包含的信息越多,回答質(zhì)量就越好。理論上,我們在訓(xùn)練大語言模型的時候,或者優(yōu)化它的時候,希望它具有全局所有的信息。然而,回歸到業(yè)務(wù)場景,企業(yè)內(nèi)部可能會有密級比較高的文檔,或者說不同人對信息的權(quán)限是不一樣的。如果大語言模型擁有了全局的信息,也就包含了高密級的信息,那么沒有權(quán)限的用戶就可能通過大語言模型的問答來獲取自己權(quán)限以外的信息。使用向量數(shù)據(jù)庫后,這一問題就可以大大緩解。我們可以通過向量數(shù)據(jù)庫的管理機制,制定分層權(quán)限的知識庫體系。這樣,每個用戶在提問時,只能從自己有權(quán)限的知識庫中檢索信息,并將檢索到的信息作為context來優(yōu)化當前這輪回答。

圖片

最后,基于向量數(shù)據(jù)庫在非結(jié)構(gòu)化數(shù)據(jù)檢索方面的能力,我們甚至整個行業(yè)都認為,向量數(shù)據(jù)庫將成為整個大模型生態(tài)的基礎(chǔ)設(shè)施,支撐大模型在業(yè)界的推廣和應(yīng)用。

責任編輯:姜華 來源: DataFunTalk
相關(guān)推薦

2020-03-27 10:54:14

數(shù)據(jù)庫工具技術(shù)

2023-09-14 17:39:19

向量數(shù)據(jù)庫火山引擎AI

2015-06-19 15:18:33

數(shù)據(jù)新常態(tài)

2018-06-05 08:36:47

內(nèi)部部署云存儲

2022-03-07 10:27:21

云原生云計算數(shù)據(jù)庫

2023-01-26 00:18:53

云原生數(shù)據(jù)庫云資源

2022-11-14 18:23:06

亞馬遜

2010-08-12 09:18:52

開源數(shù)據(jù)庫

2024-12-30 09:55:44

2020-08-03 07:00:00

SQL數(shù)據(jù)庫

2016-04-28 16:57:07

AWS

2020-09-24 22:54:46

大數(shù)據(jù)IT技術(shù)

2019-01-18 16:02:33

知識圖譜圖數(shù)據(jù)庫AI

2024-12-13 08:32:28

向量數(shù)據(jù)庫云原生LangChain

2024-03-22 11:24:56

MySQLByteHouse

2015-09-17 13:38:42

Neutron虛擬網(wǎng)絡(luò)SDN
點贊
收藏

51CTO技術(shù)棧公眾號