深度 | 資料大變革,向量資料庫大牛揭祕設計理念
新資料庫時代,資料庫領域有哪些新技術、新應用?誰將改變資料庫的遊戲規則?
未來 80% 的資料是非結構化的,然而傳統的資料分析手段很難挖掘非結構化資料中所蘊含的資訊,也沒法對這些資訊進行統一的表示。如何深入理解這些棘手的「新資料」?Zilliz 研發工程團隊「三劍客」郭人通、欒小凡、易小萌共同撰文,探討了面向 AI 的通用向量資料庫的設計和實踐,以及當前主要的技術挑戰。
以下是 Zilliz 技術骨幹的長文乾貨,快和 Z 寶一起閱讀他們的思想結晶吧:
面向 AI 的通用向量資料庫系統設計及實踐
導讀
現代資料應用面臨著這樣一種窘境,對於佔比不到 20% 的傳統結構化資料,具備豐富且成熟的基礎軟體棧。但對於超過 80% 的非結構化資料卻還存在著巨大空洞。本文基於此深入探討了傳統資料分析手段挖掘非結構化資料的痛點,由此進行了面向AI的通用向量資料庫系統設計及實踐,及其當前面臨的主要技術挑戰。
作者簡介
郭人通,Zilliz 合夥人、研發總監,華中科技大學計算機軟體與理論博士, CCF 分散式計算與系統專委會委員。主要工作領域為資料庫、分散式系統、快取系統、異構計算,相關研究成果在 SIGMOD, USENIX ATC, ICS, DATE, IEEE TPDS 等國際頂級會議與期刊上發表。目前致力於探索麵向AI的大型資料庫系統技術,是 Milvus 專案的系統架構師。
欒小凡,Zilliz 合夥人、工程總監,LF AI & Data 基金會技術諮詢委員成員,康奈爾大學計算機工程碩士。他先後任職於 Oracle 美國總部、軟體定義儲存創業公司 Hedvig、阿里雲資料庫團隊,曾負責阿里雲開源 HBase 和自研 NoSQL 資料庫 Lindorm 的研發工作。
易小萌,Zilliz 高階研究員、研究團隊負責人,華中科技大學計算機系統結構博士。主要工作領域為向量近似搜尋演算法和分散式系統的資源排程,相關研究成果在 IEEE Network Magazine, IEEE/ACM TON, ACM SIGMOD, IEEE ICDCS, ACM TOMPECS 等計算機領域國際頂級會議與期刊上發表。
AI 時代的資料變革
隨著 5G、IoT 技術的高速發展,各行業都在著手構建豐富的資料採集通路,我們正在把現實世界更加立體地投射到數字空間。這給產業升級帶來了巨大紅利,同時也帶來了嚴峻挑戰。其中最棘手的一個問題就是,如何深入地理解這些“新資料”?
據 IDC 統計,在 2020 年這一年中,全球共產生了超過 40,000Exabytes 的新資料。其中,80% 以上都是非結構化資料,結構化資料佔比不到 20%。結構化資料的主要單元是數值與符號,資料型別高度抽象且易於組織。基於數值運算與關係代數,可以輕鬆地對結構化資料進行分析。與之相比,非結構化資料在資料形態和語義內容等方面都表現得異常豐富,常見的型別包括文字、影象、音訊、視訊,也包括領域相關的型別,如病毒程式碼、社交關係、時空資料、化合物結構、點雲等。
傳統的資料分析手段難以挖掘非結構化資料中所蘊含的資訊,也沒辦法對這些資訊進行統一的表示。幸運的是,我們現在同時經歷“非結構化資料”與“人工智慧”兩場變革,各類神經網路為我們提供了理解非結構化資料的途徑。如圖1 所示,通過神經網路,可以有效地將非結構化資料中的資訊編碼成向量。
圖1 資料結構化過程
Embedding 這類技術由來已久,在 Word2vec 出現以後迅速流行起來。發展到現在,“萬物皆可 embedding”這種講法已經開始大行其道。這樣,就出現了兩個主要的資料層。底層是原始資料層,包括非結構化資料和部分結構化資料。通過各類神經網路的 embedding,在原始資料層之上又形成了一個新的資料層,這個資料層中的資訊主要以向量的方式存在。 向量化的資料層具有一系列很好的性質:
-
Embedding 向量是一種抽象的資料型別,針對抽象的資料型別可以構建統一的代數系統,從而避免非結構化資料豐富的形態所帶來的複雜性;
-
Embedding 向量的物理表示是一種稠密的浮點數向量,這有助於利用現代處理器的 SIMD 能力提升資料分析速度,降低平均算力成本;
-
Embedding 向量這種資訊編碼形式,通常比原始的非結構化資料要小得多,佔用儲存空間更低,並能提供更高的資訊傳輸效率。
-
Embedding 向量也有與其對應的算子系統,最常用的運算元是語義近似匹配。圖2 給出了一個跨模態語義近似匹配的例子。需要注意的是,圖中給出的是匹配的結果。在具體運算過程中,文字和圖片都會被對映到同一個 Embedding Space,在這個空間內進行向量化的語義近似分析。
圖2 基於多模態神經語言模型的視覺化語義嵌入
除此之外,還有語義上的加法操作,如圖3 所示的例子。
圖3 基於多模態神經語言模型的統一化視覺語義嵌入
除了上述玩具性的功能,在實際應用場景中,這些運算元還可以支援很複雜的查詢語句。推薦系統是一個比較典型的例子,它所用到的資料主要是使用者行為、內容兩大類。通常會對每個內容及使用者的瀏覽偏好進行 embedding,通過對使用者偏好與內容間的向量進行語義相似度分析,就可以回答這樣的查詢語句:“一個使用者在刷下一批新的內容時,哪些是他現在最想看的?”除此之外,向量資料層上的應用還包括電商、病毒程式碼檢測、資料去重、生物特徵驗證、化學分子式分析、金融、保險等。
非結構化資料需要完善的基礎軟體棧
資料應用的基礎是系統軟體,在過去半個多世紀裡,我們所構建的資料系統軟體,如資料庫、資料分析引擎等,主要都是面向結構化資料。但從上文例舉的應用場景不難看出,新興的資料應用將以非結構化資料作為資料基礎,並以 AI 作為運算手段。這些資料基礎與運算手段,在傳統的資料基礎軟體的構建過程中還未出現,因此這些內容也很難被考慮到系統的設計中。
現代的資料應用面臨了這樣一種窘境——面向佔比不到 20% 的傳統結構化資料,我們擁有豐富且成熟的基礎軟體棧;但對於超過 80% 的非結構化資料,基礎軟體的探索才剛剛開始,在產業界的資料應用中出現了巨大的基礎軟體空洞。
為了應對這個問題,我們研發出了一個面向 AI 的通用向量資料庫系統,命名為 “Milvus” 並將其開源(見參考資料1~2)。與傳統的資料庫系統相比,它作用於不同的資料層。傳統的資料庫,如關係資料庫、KV 資料庫、文字資料庫、影象/視訊資料庫都作用於原始資料層,而 Milvus 則作用於其上的向量化資料層,解決 Embedding 向量的儲存與分析問題。
在後續的幾個章節中,我們將結合自身在專案中的思考及實踐經驗,和大家聊一聊這種面向 AI 與非結構化資料的向量資料庫應該具備哪些特性、需要怎樣的系統架構,以及面臨著哪些技術挑戰。
向量資料庫的主要特性
向量資料庫,顧名思義,首先解決的是向量儲存、檢索和分析的問題。其次,作為一個數據庫,需要提供標準的訪問介面和資料插入查詢刪除更新的能力。除了這些“標準”的資料庫能力外,一個好的向量資料庫還應該具備以下特性:
- 高效支援向量運算元
分析引擎中對向量運算元的支撐主要在兩個層面。首先是運算元型別,如上述的“語義相似性匹配”、“語義上的加法”等運算元,其次是對相似性度量的支援。向量運算元在底層執行的過程中都需要對“相似性”進行有效度量。這種相似性通常會被量化到空間上資料之間的距離,常見的距離量化方式包括歐式距離、餘弦距離、內積距離等。
- 向量索引能力
相比傳統資料庫基於 B 樹、LSM 樹等結構索引,高維向量索引往往計算量更大,屬於計算密集型場景。在索引演算法層面,多采用聚類、圖等技術。運算層面,以矩陣運算、向量為主。因此,充分挖掘現代處理器的向量加速能力,對於降低向量資料庫的算力成本至關重要。
- 跨部署環境的一致使用體驗
向量資料庫通常會有不同的部署環境,這是由資料科學流程決定的。在前面階段,資料科學家、演算法工程師用系統主要是筆記本或工作站,因為他們關注驗證速度和迭代速度。驗證好後就需要部署,這就對應著私有叢集或雲上的大規模部署。因此,需要在不同的部署環境中都能讓系統具備良好的表現。
- 支援混合查詢
近年來,隨著向量資料庫的不斷髮展,越來越多的新需求湧現出來。其中最常見的一個需求就是其他資料型別和向量混合查詢,比如基於標量過濾後再執行最近鄰查詢,基於全文檢索和向量檢索相結合的多路召回,以及時空時序資料和向量資料的結合。這要求向量資料庫具備更加靈活的擴充套件能力以及更智慧的查詢優化,使向量引擎可以與 KV 引擎、文字檢索引擎等進行高效協作。
- 雲原生
隨著非結構化資料規模快速增長,向量資料的體量也在不斷增長,千億規模的高維向量對應著數百 TB 級別的儲存。這種儲存規模遠遠超過了單機所能承擔的範圍,因此,橫向擴充套件能力對於向量資料庫而言也就變得非常重要。一個成熟的向量資料庫應該滿足使用者對彈性和部署敏捷性的要求,藉助雲基礎設施降低系統運維的複雜度,提升可觀測性。此外,使用者對於多租戶隔離、資料快照和備份、資料加密、資料視覺化等傳統資料庫能力也提出了越來越高的需求。
向量資料庫的系統架構
目前,Milvus 已演進至 2.0 版本,其設計遵循日誌即資料、流批一體、無狀態化和微服務化的準則,整體架構設計可參見圖4。
圖4 向量資料庫整體系統架構設計圖
首先我們來看日誌即資料,在 2.0 版本中沒有維護物理上的表,而是通過日誌持久化和日誌快照來保證資料的可靠性。日誌系統作為系統的主幹,承擔了增量資料持久化和解耦的作用。通過日誌的釋出-訂閱機制,將系統的讀、寫元件解耦。如圖5 所示,整個系統主要由兩個角色構成,分別是“日誌序列(Log Sequence)”與“日誌訂閱者(Log Subscriber)”。其中的“日誌序列”記錄了所有改變庫表狀態的操作,“日誌訂閱者”通過訂閱日誌序列更新本地資料,以只讀副本的方式提供服務。釋出-訂閱機制的出現也給系統預留了很大的拓展空間,便於 Change data capture(CDC)、全球部署等功能的拓展。
圖5 日誌儲存簡化模型
再看流批一體化,藉助日誌流實現資料的實時更新,保證資料的實時可達。再將資料批量轉換成日誌快照,通過對日誌快照構建向量索引實現更高的查詢效率。查詢時,通過合併增量資料和歷史資料的查詢結果,保證使用者可以獲取完整的資料檢視。這種設計較好地滿足了實時性和效率的平衡,降低了傳統 Lambda 架構下使用者維護離/線上兩套系統的負擔。
第三個設計準則是無狀態化。藉助雲基礎設施和開源儲存元件,實現自身元件不需要保證資料的持久化。當前,Milvus 的資料持久化依賴三種儲存,分別為元資料儲存、訊息儲存和物件儲存。常見的元資料儲存如 Etcd、Zookeeper,主要負責元資訊的持久化和服務發現、節點管理。訊息儲存如 Kafka、Pulsar,主要負責增量資料的持久化和資料的釋出訂閱。物件儲存如 S3、Azure Blob、MinIO,主要負責使用者日誌快照、索引以及一些中間計算結果的儲存。
最後是微服務化,其嚴格遵循資料流和控制流分離、讀寫分離、離線和線上任務分離。整體分為四個層次,分別為接入服務、協調服務、執行服務和儲存服務。各個層次相互獨立,獨立擴充套件和容災。接入層作為系統的門面,主要負責處理客戶端連結,進行請求檢查和轉發。協調服務作為系統的大腦,負責叢集拓撲管理、負載均衡、資料宣告和管理。執行節點作為系統的四肢,負責執行資料更新、查詢和索引構建等具體操作。儲存層作為系統的骨骼,主要負責資料本身的持久化和複製。微服務化的設計保證了可控的複雜度,每一個元件專注於相對單一的功能。通過定義良好的介面清晰地表述服務邊界,更細粒度的拆分也有利於更加靈活的擴充套件和更精確的資源分配。
向量資料庫的技術挑戰
在向量查詢領域,以往的研究工作主要專注於高效率向量索引結構和查詢方法的設計,與之相對應的業界主流產品為各式各樣的向量搜尋演算法庫(見參考資料3~5)。近年來,越來越多的學者和業界團隊開始從系統設計的角度去審視和思考向量查詢問題,並逐漸產生了一些針對向量搜尋問題系統化的解決方案。通過對現有工作以及使用者需求的總結,大致上可以將向量資料庫系統的主要技術挑戰分為以下三個方面:
- 針對負載特性的成本-效能優化
由於向量資料的高維特性,其分析過程相對傳統資料型別具有更高的儲存和計算成本。另一方面,不同使用者的向量查詢負載特性以及成本-效能偏好往往是不盡相同的。例如,部分使用者的資料規模巨大,達到了百億甚至千億級別。此類使用者通常需要較低成本的資料儲存方案,同時能夠容忍一定的查詢延遲。另外也存在一些使用者對查詢效能非常敏感,通常要求單條查詢的延遲穩定保持在若干毫秒。為了滿足不同使用者的偏好,向量資料庫的核心索引元件需要有能力將索引結構和查詢演算法與不同型別的儲存和計算硬體進行適配。
例如,為了降低儲存成本,需要考慮將向量資料和索引結構儲存在比記憶體更為廉價介質中(如 NVM 和 SSD)。然而,現有的向量搜尋演算法幾乎都是基於資料可以完全駐留在記憶體中而設計的。為了儘量避免使用 NVM 或 SSD 帶來的效能損失,需要結合搜尋演算法充分挖掘和利用資料訪問區域性性,並結合儲存介質特性對資料和索引結構的儲存方式進行調整(見參考資料6~8)。對於查詢效能敏感的使用者,目前主流的探索方向為使用 GPU、NPU、FPGA 等專有硬體加速查詢過程(見參考資料9)。然而,不同加速硬體和專有晶片的結構設計均不相同,如何結合這些硬體的特性對高效地執行向量索引請求目前仍是一個尚未良好解決的問題。
- 智慧化系統配置與調優
現有的幾種主流向量查詢演算法都是在儲存成本、計算效能以及查詢準確度之間尋求不同的平衡點,演算法的實際表現通常由演算法引數和資料特性共同決定。考慮到使用者對於向量查詢成本和效能要求的差異性,如何針對使用者需求以及資料特性為其選擇合適的向量查詢方法便成為了一個重要問題。
然而,由於向量資料的高維特性,使得人工方法通常難以有效分析資料分佈特性對查詢演算法的影響。針對這一問題,學術界和工業界目前主要嘗試使用基於機器學習的方法為使用者推薦合適的演算法配置(見參考資料10)。
另一方面,結合機器學習技術的智慧向量查詢演算法設計也是研究的一個熱門話題。當前的向量查詢演算法通常是在假設不知道向量資料特性的情況下進行設計的。這類演算法具有較強的通用性,能夠應對不同維度數量、不同分佈型別的向量資料。相對應的,它們無法根據使用者資料的特性進行鍼對性的索引結構設計,也就無法再進一步挖掘和利用其中的優化空間。如何使用機器學習方法有效地為不同使用者資料量身定製索引結構是一個值得探索的重要問題(見參考資料11~12)。
- 對豐富查詢語義的支援
隨著各行各業數字化程序逐漸成熟,現代應用對資料的查詢邏輯呈現出了多樣化和多元化的趨勢。一方面對向量資料查詢語義在不同應用中存在多樣性,正逐漸超越傳統近鄰查詢的範疇。另一方面,對於多個向量資料聯合搜尋,以及向量資料和非向量資料的綜合查詢需求也在逐漸產生(見參考資料13)。
具體而言,對於向量資料查詢,向量相似性的評價指標變得更加多樣。傳統的向量查詢通常使用歐式距離、內積以及餘弦距離作為向量的相似度指標。隨著 AI 技術在各行各業的普及,一些領域特定的向量相似指標,如谷本距離、馬氏距離以及用於計算化學分子超結構和子結構的距離指標正逐漸湧現。如何在現有的查詢演算法中有效地支援這些評價指標或相應地設計新型的檢索演算法成為了亟待研究的重要問題。
另一方面,隨著使用者業務的日益複雜,應用中對資料的查詢通常包含了多個向量資料和非向量資料。例如,在為使用者進行內容推薦時,通常需要結合使用者個人的興趣特徵、使用者的社交關係以及當前的熱門話題進行綜合性的分析和選擇。此類查詢通常需要結合多種資料查詢方法,甚至通過多個數據處理系統互動完成,如何高效靈活地支援此類查詢也是一個具有重要研究價值的問題。
參考資料
- Milvus Project: https://github.com/milvus-io/milvus
- Milvus: A Purpose-Built Vector Data Management System, SIGMOD'21
- Faiss Project: https://github.com/facebookresearch/faiss
- Annoy Project: https://github.com/spotify/annoy
- SPTAG Project: https://github.com/microsoft/SPTAG
- GRIP: Multi-Store Capacity-Optimized High-Performance Nearest Neighbor Search for Vector Search Engine, CIKM'19
- DiskANN: Fast Accurate Billion-point Nearest Neighbor Search on a Single Node, NIPS'19
- HM-ANN: Efficient Billion-Point Nearest Neighbor Search on Heterogeneous Memory, NIPS'20
- SONG: Approximate Nearest Neighbor Search on GPU, ICDE'20
- A demonstration of the ottertune automatic database management system tuning service, VLDB'18
- The Case for Learned Index Structures, SIGMOD'18
- Improving Approximate Nearest Neighbor Search through Learned Adaptive Early Termination, SIGMOD'20
- AnalyticDB-V: A Hybrid Analytical Engine Towards Query Fusion for Structured and Unstructured Data, VLDB'20
Zilliz 以重新定義資料科學為願景,致力於打造一家全球領先的開源技術創新公司,並通過開源和雲原生解決方案為企業解鎖非結構化資料的隱藏價值。
Zilliz 構建了 Milvus 向量資料庫,以加快下一代資料平臺的發展。Milvus 是 LF AI & Data 基金會的畢業專案,能夠管理大量非結構化資料集,在新葯發現、推薦引擎、聊天機器人等方面具有廣泛的應用。
- Lion : 超越 AdamW 的優化演算法
- ChatGPT 不是黑魔法,“替代搜尋引擎”言之尚早
- 36氪首發|推出全託管雲服務產品Zilliz Cloud,向量資料庫公司「Zilliz」完成6000萬美元B 輪融資
- Deep Dive 7:Milvus 2.0 質量保障系統詳解
- Milvus 向量資料庫如何實現屬性過濾
- 短視訊如何有效去重?vivo 短視訊分享去重實踐
- AI 收藏夾 Vol.004:虛擬愛豆出道!
- 【Zilliz專場】力扣第 271 場周賽覆盤
- 資料庫事務的三個元問題
- 從使用者到開發者,日本獨角獸 SmartNews 的社群二三事
- AI 收藏夾 Vol.002:被 AI 阻止的又一次自殺
- AI 收藏夾 Vol.003:AI 能聽懂陰陽怪氣嗎?
- 一文解析資料庫的三生三世
- FastAPI or Flask?從使用者出發,才是王道
- 畢業之後,開源給了我第一份工作
- 活用向量資料庫,普通散戶也能找到潛力股!
- 系統召回太慢?上 Milvus × PaddleRec 雙劍合璧大法!
- 13 種高維向量檢索演算法全解析!資料庫頂會 VLDB 2021 論文作者乾貨分享
- 千萬量級圖片視訊快速檢索,輕鬆配置設計師的靈感挖掘神器
- 深度 | 資料大變革,向量資料庫大牛揭祕設計理念