中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

螞蟻金服開源的機(jī)器學(xué)習(xí)工具 SQLFlow,有何特別之處?

2019-05-12    來源:raincent

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

近日,螞蟻金服副 CTO 胡喜正式宣布開源機(jī)器學(xué)習(xí)工具 SQLFlow,他在大會(huì)演講中表示:“未來三年,AI 能力會(huì)成為每一位技術(shù)人員的基本能力。我們希望通過開源 SQLFlow,降低人工智能應(yīng)用的技術(shù)門檻,讓技術(shù)人員調(diào)用 AI 像 SQL 一樣簡單。” SQLFlow 能夠抽象出端到端從數(shù)據(jù)到模型的研發(fā)過程,配合底層的引擎及自動(dòng)優(yōu)化,具備基礎(chǔ) SQL 知識(shí)的技術(shù)人員即可完成大部分的機(jī)器學(xué)習(xí)模型訓(xùn)練及預(yù)測(cè)任務(wù)。

SQLFlow 由何而來?螞蟻金服對(duì)于 SQLFlow 未來還有哪些規(guī)劃?一起來深入了解。

SQLFlow 的目標(biāo)是將 SQL 引擎和 AI 引擎連接起來,讓用戶僅需幾行 SQL 代碼就能描述整個(gè)應(yīng)用或者產(chǎn)品背后的數(shù)據(jù)流和 AI 構(gòu)造。其中所涉及的 SQL 引擎包括 MySQL、Oracle、Hive、SparkSQL、Flink 等支持用 SQL 或其某個(gè)變種語言描述數(shù)據(jù),以及描述對(duì)數(shù)據(jù)的操作的系統(tǒng)。而這里所指的 AI 引擎包括 TensorFlow、PyTorch 等深度學(xué)習(xí)系統(tǒng),也包括 XGBoost、LibLinear、LibSVM 等傳統(tǒng)機(jī)器學(xué)習(xí)系統(tǒng)。

SQLFlow 研發(fā)團(tuán)隊(duì)認(rèn)為,在 SQLFlow 和 AI 引擎之間存在一個(gè)很大的空隙——如何把數(shù)據(jù)變成 AI 模型需要的輸入。谷歌開源的 TensorFlow 項(xiàng)目開了一個(gè)好頭,TFX Data Transform 和 feature column API 都是意圖填補(bǔ)這個(gè)空缺的項(xiàng)目。但是這個(gè)空缺很大,是各種 SQL 引擎和各種 AI 引擎的笛卡爾積,遠(yuǎn)不是 TensorFlow 的這兩個(gè)子項(xiàng)目就足以填補(bǔ)的,需要一個(gè)開源社區(qū)才行。要填補(bǔ)好這個(gè)空缺,需要先讓用戶意識(shí)到其重要性,這也是螞蟻金服開源 SQLFlow 的意圖之一。

SQLFlow 位于 AI 軟件系統(tǒng)生態(tài)的最頂端,最接近用戶,它也位于數(shù)據(jù)和數(shù)據(jù)流軟件生態(tài)之上。

其實(shí),將 SQL 和 AI 連接起來這個(gè)想法并非 SQLFlow 原創(chuàng)。谷歌于 2018 年年中發(fā)布的 BigQueryML 同樣旨在“讓數(shù)據(jù)科學(xué)家和分析師只用 SQL 語言就可以實(shí)現(xiàn)流行的機(jī)器學(xué)習(xí)功能并執(zhí)行預(yù)測(cè)分析”。除了 Google 的 BigQueryML,微軟基于 SQL Server 的 AI 擴(kuò)展,以及 Teradata 的 SQL for DL 同樣旨在連接 SQL 和 AI,讓人工智能的應(yīng)用變得像 SQL 一樣簡單。而 SQLFlow 與上述各個(gè)系統(tǒng)最根本的差異在于:SQLFlow 是開源的,以上系統(tǒng)都不是。

開發(fā) SQLFlow 的初衷

螞蟻金服和很多互聯(lián)網(wǎng)公司一樣,不同產(chǎn)品背后有很多功能都依賴于 AI,比如用戶信用的評(píng)估就是一套預(yù)測(cè)模型。到目前為止,每一個(gè)這樣的功能的實(shí)現(xiàn),都依賴一個(gè)工程師團(tuán)隊(duì)開發(fā)多個(gè)子系統(tǒng)——讀取數(shù)據(jù)庫或者在線日志流、這兩類數(shù)據(jù)的 join、各種數(shù)據(jù)篩選、數(shù)據(jù)到模型輸入(常說的 features)的映射、訓(xùn)練模型、用訓(xùn)練好的模型來做預(yù)測(cè)。整個(gè)過程下來耗時(shí)往往以月計(jì),如果加班加點(diǎn)放棄寫 unit test 代碼,可能縮短到以周記。

以上問題正是 SQLFlow 系統(tǒng)希望替工程師們解決的問題。螞蟻金服擁有數(shù)千數(shù)據(jù)分析師,他們?nèi)粘9ぷ饔玫木褪?SQL 語言。雖然數(shù)據(jù)分析師在互聯(lián)網(wǎng)行業(yè)往往不像用 Python、Java、C++ 的工程師那樣醒目,但是在很多有面向商業(yè)伙伴的業(yè)務(wù)的公司里,比如 LinkedIn,他們的貢獻(xiàn)和人數(shù)都能與工程師相匹敵。SQLFlow 最早的初衷,就是希望解決分析師既要操作數(shù)據(jù)又要使用 AI、往往需要在兩個(gè)甚至更多的系統(tǒng)之間切換、工作效率低的窘境。

SQLFlow 旨在大幅提升效率,讓上述功能實(shí)現(xiàn)所花費(fèi)的時(shí)間進(jìn)一步縮短到能以日計(jì),甚至以小時(shí)計(jì)的程度。

要達(dá)到這樣的效率,必須有一種效率極高的描述工作意圖的方式。SQL 是一種典型的描述意圖,而不描述過程的編程語言。用戶可以說我要 join 兩個(gè)表,但是不需要寫循環(huán)和構(gòu)造 hash map 來描述如何 join 兩個(gè)表。這個(gè)特性使得 SQL 能極大地提升開發(fā)效率,這正是 SQLFlow 選擇擴(kuò)展 SQL 語法支持 AI 這條思路的原因。

不過,高效率的背后是更大的工程技術(shù)挑戰(zhàn)。SQLFlow 需要做到能根據(jù)用戶的意圖,自動(dòng)生成達(dá)到意圖的 Python、C++、Go 語言的程序。

 

 

SQLFlow 的架構(gòu)設(shè)計(jì)

設(shè)計(jì)目標(biāo)

在連接 SQL 和 AI 應(yīng)用這一方向上,業(yè)內(nèi)已有相關(guān)工作。開發(fā)者可以使用像 DOT_PRODUCT 這樣的運(yùn)算符在 SQL 中編寫簡單的機(jī)器學(xué)習(xí)預(yù)測(cè)(或評(píng)分)算法。但是,從訓(xùn)練程序到 SQL 語句需要進(jìn)行大量的模型參數(shù)復(fù)制粘貼的工作。目前在一些商業(yè)軟件中,已經(jīng)有部分專有 SQL 引擎提供了支持機(jī)器學(xué)習(xí)功能的擴(kuò)展。

Microsoft SQL Server:Microsoft SQL Server 支持機(jī)器學(xué)習(xí)服務(wù),可以將 R 或 Python 編寫的機(jī)器學(xué)習(xí)程序作為外部腳本運(yùn)行。

Teradata SQL for DL:Teradata 也提供了 RESTful 服務(wù),可以通過擴(kuò)展的 SQL SELECT 語法調(diào)用。

Google BigQuery:Google BigQuery 通過引入 CREATE MODEL 語句讓用 SQL 實(shí)現(xiàn)機(jī)器學(xué)習(xí)成為可能。

但上述已有的解決方案都無法解決螞蟻金服團(tuán)隊(duì)的痛點(diǎn),他們的目標(biāo)是打造一個(gè)完全可擴(kuò)展的解決方案。

這一解決方案應(yīng)與許多 SQL 引擎都兼容,而不是只能兼容特定版本或類型的 SQL 引擎。

它應(yīng)該支持復(fù)雜的機(jī)器學(xué)習(xí)模型,包括用于深度學(xué)習(xí)的 TensorFlow 和用于樹模型的 XGBoost。

能夠靈活地配置和運(yùn)行前沿機(jī)器學(xué)習(xí)算法,包括指定特征交叉,無需在 SQL 語句中嵌入 Python 或 R 代碼,以及完全集成超參數(shù)估計(jì)等。

應(yīng)對(duì)上述挑戰(zhàn)的關(guān)鍵在于打造一套 SQL 擴(kuò)展語法。研發(fā)團(tuán)隊(duì)首先從僅支持 MySQL 和 TensorFlow 的原型開發(fā)開始,后續(xù)計(jì)劃支持更多 SQL 引擎和機(jī)器學(xué)習(xí)工具包。

從 SQL 到機(jī)器學(xué)習(xí)

SQLFlow 可以看作一個(gè)翻譯器,它把擴(kuò)展語法的 SQL 程序翻譯成一個(gè)被稱為 submitter 的程序,然后執(zhí)行。 SQLFlow 提供一個(gè)抽象層,把各種 SQL 引擎抽象成一樣的。SQLFlow 還提供一個(gè)可擴(kuò)展的機(jī)制,使得大家可以插入各種翻譯機(jī)制,得到基于不同 AI 引擎的 submitter 程序。

SQLFlow 對(duì) SQL 語法的擴(kuò)展意圖很簡單:在 SELECT 語句后面,加上一個(gè)擴(kuò)展語法的 TRAIN 從句,即可實(shí)現(xiàn) AI 模型的訓(xùn)練。或者加上一個(gè) PREDICT 從句即可實(shí)現(xiàn)用現(xiàn)有模型做預(yù)測(cè)。這樣的設(shè)計(jì)大大簡化了數(shù)據(jù)分析師的學(xué)習(xí)路徑。

此外,SQLFlow 也提供一些基本功能,可以供各種 submitter 翻譯插件使用,用來根據(jù)數(shù)據(jù)的特點(diǎn),推導(dǎo)如何自動(dòng)地把數(shù)據(jù)轉(zhuǎn)換成 features。這樣用戶就不需要在 TRAIN 從句里描述這個(gè)轉(zhuǎn)換。

 

 

以上這些設(shè)計(jì)意圖在 SQLFlow 的開源代碼中都有體現(xiàn)。當(dāng)然,SQLFlow 開發(fā)時(shí)間還比較短,仍然存在很多做的不夠細(xì)致的地方。螞蟻金服將其開源的另一個(gè)目的,就是希望能夠和各個(gè) SQL 引擎團(tuán)隊(duì)和各個(gè) AI 團(tuán)隊(duì)一起打造這座橫跨數(shù)據(jù)和 AI 的橋梁。

基于 Go 語言開發(fā)

SQLFlow 基于 Go 語言開發(fā),Go 語言的眾多優(yōu)點(diǎn)使其成為了 SQLFlow 研發(fā)團(tuán)隊(duì)的首選。除了 Go 社區(qū)討論較多的優(yōu)勢(shì)以外,以下兩點(diǎn)被重點(diǎn)提及:

首先 Go 容易學(xué)習(xí)卻擁有極高的開發(fā)效率。它的 keyword 數(shù)量比 C 語言還要少,但是描述能力(平均每一行代碼能表示的意圖)接近 Python。

另一個(gè)原因是 Go 的代碼庫易于長期維護(hù)。一項(xiàng)工作用 Python 或者 C++ 來寫,會(huì)有很多種寫法,都能跑。用 Go 來寫,往往只有一種寫法。這就使得 Go 程序員社區(qū)里不會(huì)有很多風(fēng)格共存,也就不需要 Google C++ style 這樣的代碼規(guī)范來限制不許用 C++ 的哪些特性,也不會(huì)像 Python 代碼開發(fā)時(shí)那樣,各種代碼風(fēng)格之間形成鄙視鏈,在 code review 過程里帶來不必要的爭執(zhí)。

與阿里 PAI 的關(guān)系

SQLFlow 研發(fā)團(tuán)隊(duì)認(rèn)為,AI 和機(jī)器學(xué)習(xí)的生態(tài)可以分為很多層。其中 TensorFlow、PyTorch、XGBoost、LibLinear 這些系統(tǒng)位于最底層,距離終端用戶最遠(yuǎn),只有很硬核的用戶才能熟練掌握和使用,而這部分用戶在互聯(lián)網(wǎng)從業(yè)者里占的比例較小。

SQLFlow 和阿里推出的機(jī)器學(xué)習(xí)平臺(tái) PAI 均位于生態(tài)的最頂層,需要調(diào)用下層的技術(shù)棧,二者均直接面對(duì)最終用戶,而這些用戶中可能有大量并不具備 AI 背景知識(shí)。

PAI 系統(tǒng)通過先進(jìn)的圖形用戶界面來解決 AI 難理解、難應(yīng)用的挑戰(zhàn)——比如托拽基礎(chǔ) AI 組件來構(gòu)造復(fù)雜的模型和數(shù)據(jù)流。

SQLFlow 則通過寫 SQL 程序的方式來實(shí)現(xiàn)這一目標(biāo)。有能寫下來的程序,就容易存檔,容易 Code Review,容易分享知識(shí),容易集思廣益,容易高效率迭代。此外,敲鍵盤寫程序比動(dòng)鼠標(biāo)拖拽快。

SQLFlow 優(yōu)化工作

SQLFlow 目前依賴 TensorFlow 等底層引擎來實(shí)現(xiàn)訓(xùn)練和預(yù)測(cè)。為了提升 SQLFlow 在機(jī)器學(xué)習(xí)模型的訓(xùn)練和預(yù)測(cè)性能,螞蟻金服有一個(gè)團(tuán)隊(duì)專門做硬件加速 AI 計(jì)算的工作,最近已經(jīng)有了一些令人驚喜的成績,希望在不久的將來可以和大家分享細(xì)節(jié)。另外還有一個(gè)兄弟項(xiàng)目專門維護(hù)螞蟻金服對(duì) TensorFlow 的功能擴(kuò)展,也和性能相關(guān)。

SQLFlow 項(xiàng)目負(fù)責(zé)人表示,訓(xùn)練和預(yù)測(cè)只是整個(gè) AI 產(chǎn)品功能長長的鏈條中的兩個(gè)環(huán)節(jié)。SQLFlow 這個(gè)項(xiàng)目是為解決整個(gè)鏈條構(gòu)建而打造的,其中有很多環(huán)節(jié)的耗時(shí)比 AI 的訓(xùn)練和預(yù)測(cè)多得多,因此還有極大的性能提升的空間。比如很多 SQL 引擎并不支持讓一個(gè)分布式 AI 程序并發(fā)讀取其中的數(shù)據(jù),如果 SQLFlow 能夠解決類似的吞吐量限制,AI 的總體效率能提高數(shù)倍甚至數(shù)十倍。

在對(duì)機(jī)器學(xué)習(xí)算法的支持方面,SQLFlow 設(shè)計(jì)的初衷就是要復(fù)用各個(gè) AI 引擎各自的模型庫。目前 SQLFlow 支持 TensorFlow Estimator 規(guī)范的模型。比如 SQLFlow 擴(kuò)展語法中 SELECT ... TRAIN DNNClassifier ... 這個(gè)寫法,DNNClassifier 就是一個(gè) Python class 的名,在這個(gè)例子中是一個(gè)派生自 tf.Estimator 的 class。SQLFlow 研發(fā)團(tuán)隊(duì)也正在做支持 Keras 模型的相關(guān)工作,團(tuán)隊(duì)也在考慮規(guī)范 XGBoost 模型的程序?qū)懽鳎蛊淇梢员?SQLFlow 用戶方便地調(diào)用。

這些工作背后的思路是希望互聯(lián)網(wǎng)行業(yè)常見的三類技術(shù)角色:分析師、研究員、工程師的分工更清晰,從而能更專注發(fā)揮各自特長:分析師因?yàn)榱私鈹?shù)據(jù)所以寫 SQL,調(diào)用 DNNClassifier 這樣由研究員用 Python 寫的模型;研究員不用操心分布式計(jì)算和模型到底是如何被分布式訓(xùn)練(或預(yù)測(cè))的,這部分工作留給工程師。與此同時(shí),SQLFlow 作為一種粘合劑,把這三類角色的產(chǎn)出有機(jī)結(jié)合,以便更加高效地構(gòu)造產(chǎn)品。

SQLFlow 未來規(guī)劃

SQLFlow 當(dāng)前已經(jīng)能夠帶來研發(fā)效率的提升,但尚不完美,目前 SQLFlow 還存在以下問題有待解決:

第一個(gè)問題是 parsing。SQLFlow 目前已經(jīng)對(duì)接 MySQL,正在對(duì)接 Hive 和 阿里云上的 MaxCompute,將來還希望能對(duì)接更多公司正在使用的 SQL 引擎。這些引擎的 SQL 語法大都符合 SQL 標(biāo)準(zhǔn),但是總有一些自己獨(dú)特的擴(kuò)展,而用戶往往不知不覺地用到了這些特點(diǎn)。SQLFlow 希望用戶能在已有的 SELECT 語句之后,通過簡單地添加一個(gè) TRAIN 或者 PREDICT 從句,即可實(shí)現(xiàn)數(shù)據(jù)和 AI 的互聯(lián),這就要求 SQLFlow 支持各個(gè) SQL 引擎獨(dú)到的語法特點(diǎn)。

第二個(gè)問題是數(shù)據(jù)到 feature 的映射的自動(dòng)化。目前 SQLFlow 是根據(jù) SQL 字段的類型(INT、FLOAT、TEXT、BLOB)來自動(dòng)化映射到 feature column API,比如 numeric_column 或者 categorical_column_with_vocabulary 或者 bucketized_column。其實(shí)很多 TEXT 字段里存儲(chǔ)的信息很復(fù)雜,可能是一個(gè) yaml 或者 json,所以需要掃描(至少一部分)數(shù)據(jù),才能精準(zhǔn)地判斷這個(gè)映射。類似的,一個(gè) BLOB 字段里可能是 protobuf message 的 encoding,encode 的是一個(gè) TensorFlow 的 tensor。

第三個(gè)問題是 AI 引擎。 TensorFlow、PyTorch、XGBoost、LibLinear 這些 AI 引擎的分布式計(jì)算能力都有一些問題。TensorFlow 原生支持分布式訓(xùn)練,但不支持容錯(cuò),一個(gè)進(jìn)程掛了,整個(gè)作業(yè)就掛了。雖然這還可以通過 checkpointing 解決,但是不容錯(cuò)就不能彈性調(diào)度,不能彈性調(diào)度就意味著集群利用率可能極差。比如一個(gè)有 N 個(gè) GPU 的集群上在運(yùn)行一個(gè)作業(yè),使用了一個(gè) GPU;此時(shí)一個(gè)新提交的作業(yè)要求使用 N 個(gè) GPU,因?yàn)榭臻e GPU 個(gè)數(shù)是 N-1,所以這個(gè)新的作業(yè)不能開始執(zhí)行,而是得一直等數(shù)小時(shí)甚至數(shù)天,直到前一個(gè)作業(yè)結(jié)束、釋放那個(gè)被占用的 GPU。這么長時(shí)間里,集群利用率< 1/N。關(guān)于這個(gè)問題的解決方案,百度 PaddleEDL(https://kubernetes.io/blog/2017/12/paddle-paddle-fluid-elastic-learning/)和阿里集團(tuán)的 XDL(https://github.com/alibaba/x-deeplearning/)做了一些很有益的探索。希望業(yè)界把過分集中于 AI 運(yùn)行時(shí)間優(yōu)化的眼光,分一部分到減少等待時(shí)間上。

接下來螞蟻金服將致力于推動(dòng) SQLFlow 在螞蟻金服業(yè)務(wù)和螞蟻金服以外的公司的使用,讓 SQLFlow 項(xiàng)目成為整個(gè)社區(qū)的共同工作,從中收獲更多的反饋,引導(dǎo)項(xiàng)目的發(fā)展方向,也幫助明確各項(xiàng)工作的優(yōu)先級(jí)。

令 SQLFlow 團(tuán)隊(duì)感到欣喜的是,雖然 SQLFlow 剛開源,但目前已經(jīng)有來自美國和中國幾大互聯(lián)網(wǎng)公司的貢獻(xiàn)者參與到社區(qū)工作中來。由于每個(gè)公司使用的 SQL 引擎不同,如果 SQLFlow 核心團(tuán)隊(duì)能提供比較好的數(shù)據(jù)層抽象,那么來自不同公司的貢獻(xiàn)者就能比較容易地把 SQLFlow 適配到自己公司的引擎上。類似的,支持多種 AI 引擎的方式也是如此。

此外,SQLFlow 團(tuán)隊(duì)希望各個(gè)公司的研究員們能夠參與到開源項(xiàng)目中來,分享各自的模型,未來 SQLFlow 會(huì)支持各種形式的模型,以便分析師使用。

過去這幾年,螞蟻金服一直積極參與開源社區(qū)共建,自2011年宣布第一波開源項(xiàng)目以來,開源項(xiàng)目數(shù)量每年皆有增長。目前螞蟻金服已有 30 多個(gè)開源項(xiàng)目,其中,Ant Design項(xiàng)目已獲三萬多Star,有600 多人參與項(xiàng)目建設(shè),EggJS和SOFA 系列也成為了社區(qū)熱門。

在 SQLFlow 的 GitHub 項(xiàng)目中,螞蟻金服提供了 SQLFlow 的安裝指引以及快速入門的示例,對(duì)此項(xiàng)目感興趣的開發(fā)者不妨一試。

標(biāo)簽: [db:TAGG]

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:大數(shù)據(jù)分析就業(yè)前景及職能定位

下一篇:大數(shù)據(jù)將改變商業(yè)智能的布局