Pivotal Greenplum —— 全世界首個開源、多雲資料平臺,專為高階分析而打造。作為一個開放的資料計算平臺,它整合了對資料進行挖掘和分析的高階功能,通過這些功能,使用者可以直接在Greenplum資料庫裡使用高階分析演算法,對資料進行分析和處理。
本篇文章將從最近較熱的 人工智慧應用場景說起,詳細為大家介紹如何運用 Greenplum 的內建演算法進行 機器學習,幫助企業或使用者從1到N,快速處理分析海量資料,獲得行業洞察。
首先來講 Greenplum,我相信大家對 Greenplum 多少有些瞭解。Greenplum 是一個MPP架構的分散式資料庫,其特點是可以做非常大規模的資料計算,它可以在幾百個節點的伺服器規模的叢集內做資料的擴充,並且可以在 PB級,就是一千個T或者幾千個T的資料容量上,做快速的資料儲存和計算。
傳統來講,它是一個資料庫,但實質上 Greenplum 不只是一個資料庫,因為我們在庫內整合了很多高階分析的功能。這些高階分析的功能,可以使使用者更方便的使用資料,因為資料本身要進行挖掘才能產生價值,對於傳統的友商,比如說像 Oracle、MySQL 或者 SQLServer 這樣的資料庫產品來講,它可能只是一個資料庫,您只能對資料進行傳統的,基於SQL的分析。但在 Greenplum,作為一個開放的資料計算平臺,我們在庫內整合了非常多的資料探勘和分析功能,通過這些功能,您不再需要把資料從庫內拿出來,直接在 Greenplum 資料庫裡就可以使用高階分析演算法,對資料進行分析和處理。
在 Greenplum 內部我們整合了對地理資訊的處理演算法包、對文字處理的元件、對 Python 或者 R 等一些資料科學家使用的演算法包、圖計算演算法包以及機器學習的演算法包等等。今天重點要介紹的就是 Greenplum 庫內整合的機器學習演算法包和文字處理元件。通過這種庫內的整合演算法,客戶可以直接在庫內對資料進行挖掘,不用把資料搬進搬出資料庫,從而提高資料的使用效率,降低資料探勘的成本。
目前 Pivotal 研發人員正在試圖實現對整合深度學習演算法庫內整合,接下來我們一起看下 Greenplum 目前在對機器學習領域的已有功能以及正在研發的路線圖。
可擴充套件的機器學習演算法庫:MADlib
在 Greenplum 裡面整合的基於機器學習或者人工智慧分析的演算法包,叫 MADlib。您也許聽說過 MADlib 擴充套件包,這個擴充套件包已經是 Apache 基金會頂級開源專案,這個元件裡面整合了大量的基於傳統數學分析統計的演算法、圖計算的演算法以及一些常見的機器學習的演算法。
這個演算法庫直接在庫內整合,您可以直接到 MADlib.apache.org 的網站上下載,然後在 Greenplum 或者 Postgres 資料庫裡部署。因為 Greenplum 是跟 Postgres 社群是深度整合的,所以我們這個 MADlib 演算法庫會提供 Postgres 和 Greenplum 的版本。
MADlib 的發展歷程
簡單說一下 MADlib 的發展歷程。 MADlib 是 Pivotal 從2011年就開始的產研結合專案,公司跟 UC伯克利大學的 Hellerstein 教授一起合作開發的。到今天為止,包括 UC伯克利、史丹佛、維斯康辛、佛羅里達大學等眾多知名高校中的很多教授或科研人員,都加入了這個專案,為它做出持續的貢獻,因此也是一個非常好的產研結合案例。
目前,我們已經實現的在庫內整合的演算法包括哪些呢?在機器學習方面,有 監督學習演算法,比如支援向量機; 迴歸類的演算法,比如邏輯迴歸、線性迴歸、聚類; 樹型模型,比如隨機森林、決策樹等。現在的 MADlib1.5 版本里,已經完全整合上述演算法可以直接接下載並在庫內運算。
除了機器學習演算法,MADlib 還包括 Graph 處理,比如最短路徑,圖形直徑等等演算法,此外還有一些效用函式、線性求解,或者傳統的統計分析類的彙總函式、統計分析函式、交叉驗證選型函式,都在庫內整合,非常方便。
如果您之前使用過相關機器學習演算法,可能會用到隨機森林或者決策樹這樣的模型,或者用 Python 的庫函式包,用的時候需要把儲存在資料庫裡(如Oracle)的資料抽出來,抽取到一個文字或者圖形化工具裡面,然後再用 Python 程式對資料進行處理。有了這個演算法庫之後,就不需要把資料來回倒騰,直接把資料存在 Greenplum 裡面,在 Greenplum 裡面使用這些演算法庫,可以直接對這些資料進行模型訓練、預測或者是評估操作,會大大簡化操作過程。
此外我們整個演算法都是整合在 SQL 介面裡面的,可以非常方便的使用 SQL 語句,像呼叫函式一樣來呼叫這些模型的訓練,可以直接把您資料表的名字作為一個引數,您要分析的資料列也作為一個引數,那些模型需要調整的引數作為引數直接傳到函式裡面,然後直接用 SQL 語法就可以完成訓練,使用起來非常簡便,學習成本低。
1+1>2:MADlib + Greenplum 的優勢
接下來您可能會問,MADlib 加上 Greenplum 的優勢到底是什麼?傳統來講,這些演算法都是公開提出的一些 paper,經過漫長工業界的使用,形成了演算法庫,有 Python 演算法庫,有R演算法庫,包括 MADlib 也是一種演算法庫。包括神經網路、隨機森林的模型,都是八九十年代的演算法,最終進行工業化落地的產品。您可能做了很多 Python 方面的程式設計。那麼用 MADlib 和 Greenplum 究竟有什麼樣的優勢呢?
首先,Greenplum 是一個MPP架構的分散式計算的框架, Greenplum + MADlib 之後,就等於我們在 MADlib 的基礎上把 MADlib 放到了一個分散式計算框架的裡面,這樣做的好處就是我們可以併發對很大規模的資料進行模型訓練或者統計分析計算。而在一個單機分析體系裡,是沒有辦法實現的。通過這樣的結合,演算法併發度更好,因為作為 Greenplum 來講,我們的資料是分散儲存在不同節點上的,一些演算法也可以在不同的節點上對部分資料進行計算、訓練,再把最後的結果彙總後返回,這樣就會有一個非常好的併發度和擴充套件性。
這兩個功能可以使我們獲得更好的預測精度。因為在做模型訓練的時候,如果沒有像Greenplum + MADlib 這樣的架構的話,就只能做取樣模型訓練,不能使用全量資料。比如您有一百億條資料,可能訓練模型的時候只能使用其中的一百萬或者一千萬條資料做訓練,然後再用這個模型去對一百億條資料進行預測,這個模型和預測的結果肯定準確度不如有條件做一百億條訓練出來的模型那麼準確。
我們在 MADlib + Greenplum 的架構下面,由於分散式儲存、分散式計算框架,您可以把資料直接在 Greenplum 的分散式儲存計算結構裡面進行模型訓練,也就是說可以用全量資料進行模型訓練,這樣一來預測的精度肯定會比用部分取樣資料高得多。這就是我們說的,如果採用 MADlib + Greenplum 分析平臺可以得到的好處。
前面我們也提到了很多演算法,而傳統的機器學習的演算法,比如向量機或者隨機森林等演算法,在CPU上都可以得到很好的模型訓練。但對於一些深度學習的演算法,在CPU上已經沒有辦法很好的支援這種演算法的模型的訓練了,包括一些預測。因為神經網路的演算法需要消耗大量的算力,需要大量的計算節點同時工作,才能夠滿足這種計算的要求,所以我們在 Apache MADlib1.5的版本上面,主要是整合了在CPU上能夠很好處理的演算法。
還有一部分是深度學習的演算法,可能需要在基於GPU的計算框架下才能夠發揮它的優勢,或者說才能真正跑起來。我們正在做的 Apache MADlib2.0 裡,就在試圖把這些深度學習的演算法也整合到 MADlib 庫裡邊。比如卷積神經網路、迴圈神經網路,長短期記憶的模型,生成式的對抗網路等模型。而為了更好的支援這些演算法,還我們會在整個計算框架上有一些調整從而來實現GPU加速等,這些是我們目前研發的重點方向。
人工智慧演算法概覽
下面跟大家介紹一下人工智慧和機器學習的關係圖譜。人工智慧是一個非常大的範疇,它可能包括諸多領域的高深理論。而目前現在在工業界和IT行業能夠落地實現的,主要是指 機器學習,通過機器學習實現部分人工智慧應用的方法,機器學習僅僅是人工智慧的一部分實現。機器學習包括傳統的機器學習,像前面提到的隨機森林、樹型、向量機、線性迴歸、邏輯迴歸等等上世紀提出的一些演算法的模型,以及近些年提出的深度學習演算法。
深度學習演算法是試圖模仿生物大腦的工作原理,大腦工作原理裡有很多神經元,有一層一層的網路,通過輸入、輸出,以及中間很多層級的網路處理,讓每一層的輸出是基於上一層的輸入來計算得到分層次學習的概念,可能演算法會非常複雜。
深度學習是機器學習的一部分,機器學習是人工智慧的一部分,而我們在做資料分析或者資料探勘的時候,管自己叫資料科學家或者資料分析員。資料科學裡面使用了很多深度學習的演算法和機器學習的演算法,包括其他人工智慧領域的傳統資料統計分析的演算法和方法論。包括Pivotal也有很好的資料科學團隊,來幫助您怎麼樣用、用什麼樣的模型、什麼樣的方式更好的來做資料的挖掘和創作。
常見的深度學習演算法有 多層感知器(MLP),MLP是上世紀90年代的演算法模型,它是一個最初級的淺層的神經網路模型,當時該模型的整個計算框架和理論模型被向量機模型逐漸取代,MLP也不能叫完全的深度學習。但它的確是一個模擬人腦工作的方式,是一個淺層的神經網路的演算法。隨著這幾年深度學習慢慢火熱起來,MLP也逐漸重新回到人們的視野中。
此外,遞迴神經網路和卷積神經網路是目前比較常見的深度學習演算法,卷積神經網路在影像識別領域,主要做一些模式的匹配。遞迴神經網路的演算法,主要用於語義的分析、自然語言處理用得比較多。前面我們講的長短期記憶模型,也是對遞迴神經網路演算法的一個加強。
目前,資料探勘分析來說,深度學習演算法在這些領域,比方說對自然語音的識別,包括對視覺處理,對影像識別、模式匹配,包括對視訊流的建模和處理,包括對翻譯自然語言語義的分析,以及對生物學的預測和探索,會應用得比較廣泛。
但是所有這些演算法並不是每一個領域都可以拿來就用的,它只是一個工具,大家需要根據不同的領域、不同的資料型別、不同的應用來選擇。至於說怎麼用這個工具,比如把語音識別這樣的業務處理好,其實還是需要很多的打磨。
採用GPU加速的資料庫實現方式
前面我們提到的深度學習演算法,很多是基於一個前提的,即現在的 CPU 處理很難滿足深度學習演算法的算力要求,因為深度學習演算法很多程度上需要用大量的資料去訓練模型,這樣這個模型才能更好的學習或者預測的更精確。大量的資料訓練就不是 CPU 擅長的工作方式,CPU 的工作方式是面向延時的,要求延時非常低。而 GPU 的工作方式是面向吞吐量的,通過很小的處理核加上很小的快取,進行大量的相對簡單的資料計算。所以說深度學習演算法很多時候是依賴於 GPU 加速的方式,才能很好的進行訓練和使用。
採用GPU加速的資料庫實現方式
加速所有查詢的效能 :
- 通常都是從資料底層實現的徹底改變。
- 例如:Kinetica, MapD, SQream, Blazegraph, BlazingDB, Brytlyt, PG-Strom
針對特定深度學習演算法的加速 :
- 在現有資料庫基礎上對特定演算法的擴充套件,對企業來說更容易適應。
- 例如:Greenplum with Apache MADlib
因此在異構計算方面,其實也有不同的路徑。包括現在基於GPU加速的記憶體資料庫產品,通常從整個資料庫的底層演算法開始做GPU加速。通過用GPU對大批量資料的同時的計算,來加快資料處理的過程,是對從下至上整個資料庫的完全的改造。比如SQream,MapD等等基於GPU的資料庫產品。
還有一種是現在Pivotal的想法,在現有的資料庫基礎上對特定的演算法進行GPU加速擴充套件,怎麼說呢?就是對傳統的SQL、比如傳統的雜湊等,因為其效能已經在很大程度上滿足了企業級應用的要求效能,CPU的算力上已經足夠了。但是對於深度學習的演算法,CPU是沒辦法滿足算力要求的,所以我們就針對Apache MADlib2.0裡面的深度學習演算法,對這些特定的深度學習演算法進行GPU的加速。通過這樣一種組合方式,能夠給使用者提供更好的體驗,而且整個適應的過程和成本都是最低的。因為一般的業務或者非深度學習類的業務,還是跑在CPU的計算的平臺上面。而對深度學習的演算法,是跑在GPU新的算力平臺上面的。通過這樣一種結合的方式,就可以提供更加強大的計算平臺給到企業客戶。
常規訓練深度學習演算法的模型是這麼一個架構,會在一臺機器上插多塊GPU的處理卡,這是常規進行深度學習演算法訓練的體系架構。
Greenplum現在的架構是,沒有GPU卡,但是是一個MPP的架構,儲存、CPU都可以通過MPP演算法把一個大的叢集整合起來。如果把MPP架構和GPU的算力整合起來,會是什麼效果呢?那就是在叢集內部,每一臺節點上都可以插一塊到多塊GPU,大家可以想象一下,如果是這樣一種架構的話,能夠進行多大規模的深度學習的模型的訓練,或者預測。對客戶來講,包括對深度學習整個演算法體系來講,可能都是一個非常好的平臺架構,可以直接在庫內對這些深度學習演算法,進行全量資料的加速的模型訓練、預測、評估的整套過程。
當然這個是我們現在正在研發、正在做的部分。在實現了以上想法之後,我們可以通過用對庫內內建的R和Python這樣的語言,直接對GPU進行一些處理,深度學習演算法直接把這些負載分配到GPU上,而對傳統的資料庫操作還在CPU裡計算,這樣的體系架構才是值得期待的。即在一個非常大的規模上進行擴充套件的計算,大規模叢集計算的情況下,以後的想象空間是非常誘人的。
當前Pivotal在深度學習庫內挖掘這部分的主要研發方向是研究在MADlib裡面實現使用GPU加速的深度學習演算法在Greenplum裡面落地。尤其是Keras,Keras是一個演算法庫,是跑在Tensorflow上面的演算法庫、演算法包,我們希望把Keras裡面的這些演算法能夠整合到MADlib2.0裡面去,同時因為Keras這些深度學習演算法真的需要GPU加速才能很好的使用,畢竟GPU算力跟CPU還是有量級上的區別。我們需要把Keras整合到MADlib產品裡面去並通過GPU加速它的落地。
我們目前也可以在Greenplum裡用Tensorflow或者keras的演算法。比如您可以直接把Tensorflow和keras裝到Greenplum裡面,用Python來調演算法庫裡的內容,但是可能有些演算法是跑不出來的,因為沒有GPU加速,並且很多演算法沒有辦法進行分散式計算,還需要後續演算法的優化。
我們研發的方向會有兩個主題,一個是在真的需要大量資料做建模和分析的時候,需要把keras裡面相應的一些演算法做一個分散式的處理,這樣就可以把算力分配到整個叢集上去,也是前面說的,實現一個全量資料或者大量資料處理的方式。
當前的研發方向
- 積極探索在 madlib 中實現通過 GPU 加速的深度學習演算法在 Greenplum 中落地的可能。
- Keras 是當前工作的重點。
- 主題:
- 分散式的演算法模型
- 併發資料的演算法模型
此外,另一個是需要併發性的,比如有的資料可以按照國家或者一定的欄位進行分組,可以建立很多個模型同時對不同的資料進行處理,每個模型可能放在一個節點上去做。其實這兩塊都是可能會對當前正在做的方向。
前面我們講述的都是 MADlib 這部分,整合了機器學習的機器學習、資料分析的演算法庫,非常簡便易用。
結構化分析與非結構化分析的完美結合:GPText
接下來為大家介紹GPText產品, GPText產品是在Greenplum裡可以直接內建在庫內的對非結構化的文字進行快速索引和檢索的元件,GPText整合了solr文字分析引擎,把結構化分析和非結構化分析完美的結合在一起,可以通過SQL對非結構化文字進行快速的檢索和索引。
GPText SQL 資料倉儲 + 文字分析
- 文字檢索
- 將文字分析功能與結構化資料分析完美整合
支援內、外部資料來源的索引
- 多種資料來源支援(GPDB, 外部資料來源)
- 多種資料型別(word,pdf,excel,圖片)等
自然語言處理和AI的整合
- 與Madlib整合使用機器學習演算法對文字資料進行分析
- 與PL/Python 、PL/Java 整合進行自然語言處理
- 與Open NLP演算法庫的整合
這種效果與剛才 MADlib + Greenplum 的效果是一樣的,因為 Greenplum 是一個分散式計算的框架、平臺,結合了 solr 這個引擎之後,也可以把 solr 放到整個處理的大的平臺上面,做分散式的文字的檢索,對資料量的處理的效率和能夠處理的能力有一個非常大的擴充套件。它可以支援比方說Word、PDF等等檔案直接存入 Greenplum 裡面去,並且通過對文字的處理,再結合跟MADlib機器學習的演算法對文字內容進行的分析。後面也會有一個例子專門介紹結合 GPText 的索引加上 MADlib 的模型分析,把非結構化文字,處理成我們結構化公告的例子。
此外,我們對 Open NLP 的演算法包整合,可以直接用 Open NLP 的演算法包,通過 PL/Python 的方式直接對庫記憶體儲的文字進行分析和處理。
GPText 的分散式框架
GPText 的分散式框架就是通過對 solr 引擎的整合,把 solr 放到每一個資料庫處理的例項上面,每一個 solr 例項都有相應的高可用配置,通過這樣操作,可以對非常大規模的文字檔案資訊進行高速有效的處理。