Zilliz顧鈞:如何構建非結構化的數據服務 | CCF-GAIR AI源創專場
- 2020 年 8 月 20 日
- AI
AI源創專場現場迎來了Zilliz合伙人兼技術佈道師顧鈞。顧鈞同時代表Zilliz擔任Linux AI基金會技術諮詢委員會的投票成員,此前他歷任華為IT戰略專家,摩根士丹利副總裁等職務,現在致力於完善Milvus開源項目並推動該項目的商業化。

(顧鈞在CCF-GAIR 2020 AI源創專場演講)
顧鈞的演講主題為《Milvus:構建非結構性的數據服務》,他在演講中著重介紹了Milvus開源項目的工作狀況。他認為,數據分成結構化的數據,半結構化的數據,和非結構化數據。非結構化數據的總量非常巨大,但是如果想要從中挖掘更多的業務和價值,一直是非常困難的。
如何從非結構化數據中挖掘價值,顧鈞提供了一些思路:首先會經過模型推理。模型推理這層主要負責的工作是把模型做出高效的、實時的服務(Service),通過特徵學習的方式,把非結構化數據轉化成特徵向量,這些可以在數據這層為所有這些的特徵向量做集中的數據服務。
Milvus 開源項目的想法出現在2018年10月,即不應使用結構化的資料庫解決向量的問題,而應該為向量構建專門的數據服務。在第一個版本發布4個月後,去年8月,該案例放在了GitHub ,並於次年3月加入LF基金進行孵化。
相對來說 ,Milvus 所需的硬體成本比較低。以 WPS 辦公軟體的智慧助手為例,當用戶發起寫作需求的時候,智慧助手會根據模型進行進一步的加工,通過向量的技術,從人民網、新華社等數據中找到合適的自然語言的文本,最終將文章的初稿組合起來交還給用戶。
顧鈞還提到了企查查與小米瀏覽器的例子,他認為,AI 的轉型始之於演算法,繼之於服務。AI 的算力不單單是硬體的發展,同時也是軟體演算法的發展,軟體演算法的發展,從演算法的迭代上得到的好處可能比使用新型硬體帶來的更多。
以下為顧鈞的現場演講內容,AI研習社進行了不改變原意的編輯及整理:
大家下午好!非常榮幸參加這次全球人工智慧與機器人峰會,非常高興能在這裡和大家一起分享我們的開源項目Milvus,我們希望幫大家在AI的場景下,以Milvus構建非結構性的數據服務。
我們的Milvus項目是為AI場景下提供數據服務的功能。我認為我們現在正處於一個從數字化轉型向AI轉型過渡的時期,並且我們處於AI轉型的過程中非常關鍵的臨界點。我們已經有了大量的可用的模型和演算法,這些模型和演算法都是開源的模型演算法,模型很容易用起來形成初始的原型,而要把原型真正部署到生產的時候會面臨怎麼樣處理好海量數據的問題,Milvus是針對AI場景下如何服務海量數據,解決這個問題的開源項目。

簡單介紹一下研發技術軟體的團隊,我們的團隊叫做Zilliz,是大數據相關的創業公司,以開源項目的模式在推進我們的開發工作。我們認為對基礎軟體來說,開源是目前來說最重要的商業模式中的第一步。Milvus項目是LF AI項目組的項目,希望大家參與到這個項目中,無論是使用還是開發。目前Zilliz這個公司的角色是Linux AI基金會項目的主要貢獻者。
首先跟大家分享一下非結構數據服務究竟是什麼意思。大家了解數據類的服務、雲計算的話,中間有RDS的概念。RDS主要是針對關係型的數據提供數據服務,我們主要是針對非結構化數據提供的數據服務,我們稱自己為UDS。

什麼是非結構化數據?
通常來講,我們會把數據分成:結構化的數據,主要是金融領域中常見的數值、字元串。我們有大量的結構化資料庫,就是為了解決結構化數據的挑戰,包括大數據的技術,解決海量結構化數據的挑戰。
二是半結構化的數據,有一定格式的文本資訊,包括各種IT系統生成的日誌。占數據總量大概80%左右的數據被稱之為非結構化數據,包括圖片、影片、語音、自然語言的文本等。為什麼這些數據會佔到80%?微信上發一條資訊,今天手機上拍一張照片是幾兆,非結構化數據的總量非常巨大,過去數字化轉型的階段,把圖片、影片、語音、自然語言轉成數據資產,存儲到IT系統中,如果想要從中挖掘更多的業務和價值,可以為我們帶來更多的創新服務,但這是非常困難的。

近幾年深度學習的發展,非常感謝先驅為我們做了很多好用的模型和演算法,他們可以將非結構化的數據轉化成電腦比較容易處理的資訊,通常來說是向量型的資訊,將非結構數據的處理變成一種對向量計算和搜索的過程。
有人認為向量數據是中間結果,可能是圖片的中間結果,最終要做一些圖片的分類。深度學習的場景中,傳統的機器學習場景中有一個術語叫做特徵工程,發揮數據科學家的經驗、技能,去對數據進行篩選、清洗,結合自己的經驗和知識形成一些特徵。
深度學習要注重另外一個術語叫做特徵學習,所有的特徵是通過數據科學家、數據工程師的經驗和知識,通過人為的因素生成,不是通過模型學習出來的,所以從這個角度來講,向量並不僅僅只是非結構數據處理的中間結果,向量在特徵處理的場景下,就是非結構數據經過深度學習模型加工之後的知識表達,是一種新型知識的表達,所以構建數據服務是非常重要的部分。現在AI應用中,為什麼要對數據提供服務?究竟看到了什麼樣的問題?基於流的AI應用,怎麼樣來理解?

通過模型、框架,我們可以為影片數據構建操作流,有的是形成一些圖片,經過CDA的模型轉換成特徵的資訊,特徵的向量。
因為它是一個影片,影片可能蘊含著聲音的資訊,可以把聲音提取出來形成一些模型的轉換,特徵的向量,還有一些其他的標籤。不論是人工的標籤,還是其他的標籤,都可以附加為影片數據載入一些標籤的資訊。
我們發現,整個模式是比較靈活的,需要什麼樣的結果,需要什麼樣的操作,就建什麼樣的 Python,每個流水線可能都是端到端的應用,從最原始的一段非結構數據,最後會衍生出不同端到端的應用中,都散落一點點的數據片斷。
基於這個因素來考慮的話,我們認為有必要為這些非常零散的、散落在各個不同角落的數據提供整體的、完整的非結構數據服務。

從這張圖上,我們把剛才基於流式的AI應用換一個角度看,用最傳統的IT系統層次型的視角看的話,這上面是輸入,我們原始的非結構化數據,首先會經過模型推理。模型推理這層主要負責的工作是把我們的模型做高效的、實時的服務(Service),這不是容易的工作,我們可以找到比較好的工具或是框架。Google想做TensorFlow,通過特徵學習的方式,把非結構化數據,轉化成特徵向量,我們可以在數據這層為這些所有的特徵向量做集中的數據服務。
一部分非結構數據作為原始的存儲可以放在對象存儲中,提取出來的特徵資訊可以放在我們想要構建的項目中,為特徵向量提供一些基礎的服務。其實不單單是向量一塊的內容,它包含了四個部分:一是最基礎的向量,向量包含了稀疏性的向量、稠密型的向量,從現在的角度來講對於稠密型的向量支援比較好,稀疏向量在不同的場景下的支援和操作的要求都不太一樣,後面的分享例子中可以看到,稀疏向量主要是化學領域的化合物分子的結構稀疏向量。
除了向量之外,剛才講的標籤型的數據和標量型的數據,我們在這個月的版本中,會把標量數據的功能加入進去,剩下的是一些業務層更緊密,包括多模態的搜索以及作出的結果要進行集中的重新打分過程,都會在我們後續的版本中不停的迭代加入到項目中來。
大家從剛才的介紹中,有點理解向量會是新型的數據,我們需要提供專門的服務,接下來的問題是,已經有了這麼多的資料庫,有了通用計算框架,為什麼不可以把向量的功能、向量的計算附著在資料庫、通用的計算框架上?為什麼需要單獨的新型基礎組件為向量提供服務?還有數字的序列,向量和數字之間,通常會計算向量之間的相似度,我這邊給的例子是計算Operation距離的例子,向量計算通常會是高性能計算的場景,上午我聽AI晶片專場,清華大學的教授介紹他們做計算存儲一體化新型的AI晶片,就是為了解決速度不夠的問題,向量場景就是計算和存儲雙密集的場景。
第二個不同,兩個數字之間可以比較大小,海量的數據構建索引的話,我們可以用這種離疏型的方式構建高效的索引,向量的場景中,因為兩個向量中沒有大小的關係,只有三個向量、ABC三個向量才能按照A向量和B向量比較像還是和C向量比較像,完全沒有辦法使用傳統樹形結構構建高效的索引,向量的計算或是搜索技術,我給了兩個例子,一個是左邊基於空間劃分,會有一些小的空間,搜索的時候尋找、選取一些子空間,這是我們不在全量空間中尋找,而是在子空間尋找我們想要的空間,它是近似的搜索,可以極大減少搜索的數量,提升搜索的速度。
異構計算的部分,現在的計算資源是比較多的,我們的項目中,向量搜索中也用到不同的業務計算的資源,最好的是X86的晶片,上面也有SSE的指令集指令,可以更好的適配各種不同的X86的晶片,可以充分發揮X86晶片的算力。另外一部分是在GPU上,一個項目帶GPU和不帶GPU的程式碼量是不一樣的。ARM這塊,主要是支援ARM86架構的晶片。感謝鵬城實驗室提供鯤鵬的測試環境,我們已在鯤鵬上做過驗證,包括和金山雲合作的時候,也在Loogson上做了一些試驗,這是關於異構計算的部分。
我們處理引擎部分的演算法的部分,引用並改進了比較成熟的演算法庫,開源項目接觸很多的客戶,索引我們集成在搜索的演算法部分中,這些其他的Sensor部分我們正在開發的過程中,8月15日我們會把向量、標量混合的搜索部分補上。

藍色部分是關於數據模擬的部分,要做為向量服務的資料庫、搜索引擎。
數據管理是非常重要的部分,怎麼樣支援更大的數據量,包括支援高速的流式載入的場景,流式要求比傳統數據大得多,比如說影片處理的場景,大家可以想像,影片處理的場景,一個攝像拍攝影片的話,可以產生24幀到30幀的數據,哪怕截取關鍵幀、保留關鍵幀的操作,一秒進入三幅圖片、三條數據,100個攝影機,1000個攝影機;包括在偏向於To C端的場景,一些智慧客服,現在當你打開淘寶、京東和客服聊天,大概率或基本上碰不到真實的客服,客戶問的問題可以轉成向量數據,發送到後台的搜索部分進行匹配和交互,實時注入的要求比一般我們想像中的大得多,如何支援流式的場景也是我們在數據服務中需要解決的問題。

最後是關於SDK,本身是C++的項目,C++的SDK、Python的SDK等。這是在分散式的場景下,我們提供分散式的代理,向量雖然是計算和IO密集的場景,它相對簡單一些,很容易做一些分散式的擴展,有點類似於傳統的分散式的場景,可以在多個節點進行一部分的數據量交匯,形成一定的結果。

向量不會像資料庫有TPC,但是也有開源界比較公認的,其實有三位開發者一起做了AWS的雲伺服器上的測試,這個測試是ANN原生的測試,單執行緒的測試;多執行緒的測試在網站上是可以找到的,包括單執行緒測試也可以在ANN的網站上找到。

這是我們項目的開源歷程,我們從2018年10月份有一個初始的想法,當時我們有一個結構化的資料庫解決向量的問題,後來發現非常的痛苦,應該為向量構建專門的數據服務,我們是在去年4月份發布的0.1的版本,當時沒有開源,0.1版本非常粗糙,我們找到第一個種子用戶,種子用戶和我們有同一個投資人,願意接納新興的事物和概念,經過打磨覺得自己差不多的情況下,我們去年8月份先把我們的案例放在GitHub上看大家的反映,反響不錯,3月份加入LF基金會進行孵化,我們基金會屬於開發相對比較活躍的項目,我們也是每個月會做一些迭代、做一些Bug的修復,有的時候是大功能、小功能的引入。

這是我們現在開源的狀況,這是之前的狀態,數字會有一些變化,commits 5.3K,已知的用戶200多家。

去年10月份開源到現在,其實是比較年輕的項目,最核心的兩點是,整個項目上來講,比較容易使用,相對來說硬體成本比較低,這是大家接受這個項目最重要的原因。後面我會跟大家分享真實的案例。

大家知道WPS是一個辦公軟體,在微信上做了智慧型的助手,很多自然語言的文本是從人民網、新華社拿過來的,也會有一些社區的數據,通過它的模型加工之後,最終它的文本向量會匯總,當用戶發起寫作需求的時候,也會根據模型進行進一步的加工,通過向量的技術,將文章的初稿組合起來之後交還給用戶,微信小程式試用一下還是蠻有趣的,大家有興趣可以試用一下,這就是我們分享非常簡單的、直觀的架構,中間是模型與演算法發揮的作用,最下面是我們的數據服務提供的支撐。

我認為AI的轉型始之於演算法,繼之於服務。當你打開小米瀏覽器會有新聞推薦,很多的瀏覽器都有新聞推薦的工作,這上面小米瀏覽器的演算法工程師,也是用它做新聞相關的推薦工作,日中的晶片標題放在Milvus,也有一些實時的流,比較熱門的新聞也會有一些流,搜集進來,經過模型的轉換,用戶打開瀏覽器的時候,會根據行為在熱門新聞推薦中呈現出來。

接下來是企查查的例子,他們有5500萬張的中國企業商標的圖片,他們對圖片的收集非常的完整,他們也希望為自己的用戶提供更好的服務。怎麼樣去讓用戶可以搜這些商標圖片?
他們原來想了很多的方法,效果都不是特別理想,當中有多種原因,一些是演算法的原因,一些是實際部署的成本。大家可以想一想,當你提供一個商標圖片搜索的功能以後,究竟會為企查查帶來多少收費用戶,會帶來多少新的用戶,因為這一個功能而成為你的付費用戶?
這個問題是困擾所有技術公司最大的問題,當你要做一個AI功能的時候,你要投入演算法工程師,你要投入硬體的資源。但你的收益不是可以量化的,你知道AI的功能可以提升產品的科技感,可以更有吸引力,但是很難用虛的東西說服你的老闆投這個東西,對他們來講,最重要的是硬體的成本以及上手難度,通過Milvus,他們把模型放在端側進行部署。
子結構的搜索,當你給出一個片斷,完整的分子式去搜索它所有包含的片斷,當你給出一個片斷搜索可能包含它的超結構的分子,公開數據是可以達到8億的分子式,通過Milvus承載搜索引擎,單台機上只需要500毫秒。AI的算力不單單是硬體的發展,同時也是軟體演算法的發展,軟體演算法的發展,從演算法的迭代上得到的好處,可能比使用新型硬體帶來的更多。
最後是我們的項目相關的鏈接,我們也在網站上提供一些非常有趣、簡單的DEMO,DEMO的程式碼上也在GitHub上,我今天的分享就到這裡,謝謝。
GitHub:github.com/milvus-io/milvus





