佈道師系列 楊健——30天到3分鐘的改變!中篇

上期回顧

《30天到3分鐘的改變!》系列主要討論機器學習流程的三個階段:數據獲取和處理、模型訓練和評估、模型部署和迭代。在第一期中我們通過數據接入能力、數據準備能力、數據探索和可視化能力三部分,介紹了機器學習建模流程和機器學習平臺在數據獲取和處理方面需要具備的能力,以及DataCanvas APS相關的功能特性。本期將重點討論模型訓練和評估!

模型訓練和評估

Gartner將數據科學家分成兩類:

● Expert Data Scientist(核心數據科學家)

核心數據科學家就是傳說中的具備各種交叉學科的綜合能力,有深厚的統計學、數學功底,有豐富的數據挖掘、機器學習的經驗,有較強的編碼能力,對某些業務領域有深入理解的專家。在今天,這樣的大神也是鳳毛麟角,隨著對AI需求的爆發,全部依賴核心數據科學家完成建模工作只能是一個奢侈的願望,因此衍生出了平民數據科學家的概念。

● Citizen Data Scientist(平民數據科學家)

平民數據科學家的門檻更低,他們具備一些統計分析的背景,具有一定建模工具的使用經驗,對某個業務領域有較深的理解。平民數據科學家可以很好的彌合企業的建模需求與核心數據科學家嚴重不足之間的鴻溝,但是真正填補這個鴻溝的實質因素是機器學習平臺在建模工具和自動化技術上的突破。

編碼、拖拽、自動化三位一體的建模工具已經是機器學習平臺必備的能力。核心數據科學家通常更傾向使用IDE、Notebook通過編碼的方式完成建模。平民數據科學家更多的是通過拖拽式的可視化建模,甚至是通過AutoML自動建模工具完成建模。當然AutoML同樣可以幫助核心數據科學家減少重複勞動,比如自動特徵衍生、自動超參數優化、自動模型篩選等。另外拖拽式建模中的模塊封裝也是通過模塊化的思想實現代碼沉澱、複用,以及模型生產化和迭代中不可或缺的工程化支撐。

佈道師系列 楊健——30天到3分鐘的改變!中篇

機器學習平臺示意圖

建模工具是數據科學家的入口,如上圖:在建模工具下層是算法和框架的支持,再深入是高性能訓練、資源調度的支持,在建模工具之上還需要很多管理特性的支撐,這四個方面是支撐機器學習模型訓練和評估的基礎。

接下來我們就展開介紹一下:

1、建模工具

使用Notebook交互式編碼工具是目前非常流行的建模方式,比較常用的有Jupyter Notebook、Jupyter Lab,以下簡稱notebook和lab。

notebook的特色是可以實現代碼片段(cell)的運行調試不需要每次都運行全部代碼,代碼段的運行結果(圖表、數據、文本)直接顯示在代碼下方,我們還可以使用markdown插入富文本的說明增加整個notebook 的可讀性。notebook完成之後,我們還可以選擇隱藏掉所有的代碼cell只保留文檔和運行結果生成一個圖文並茂的報告,並且可以導出成html、pdf等格式的文檔,這些功能在傳統的IDE中都是無法實現的,也是數據科學家們鍾愛它的原因。lab可以理解為是一個可以同時打開多個notebook的IDE工作臺,功能更加強大。

佈道師系列 楊健——30天到3分鐘的改變!中篇

APS在探索空間集成的JupyterLab

佈道師系列 楊健——30天到3分鐘的改變!中篇

APS在分析模塊中集成的Jupyter Notebook

佈道師系列 楊健——30天到3分鐘的改變!中篇

APS分析模塊中的IDE

拖拽式建模基本上可以算是機器學習平臺的標配,其主要原因是:

1、門檻低,不需要編程;

2、可視化,工作流可以讓建模過程一目瞭然;

3、模塊化,工作流上的每一個節點完成特定的工作,好的平臺不但提供足夠多的預置模塊還可以讓用戶自己開發模塊實現代碼積累和複用。

佈道師系列 楊健——30天到3分鐘的改變!中篇

APS的工作流開發界面

AutoML是近幾年機器學習領域的熱點,Gartner預計到2020年40%的建模工作是通過自動化方式完成的。全流程的自動化是一個終極目標,從自動準備寬表、特徵衍生和加工、模型選擇、超參數優化、模型融合到自動化的模型迭代。在深度學習領域NAS(神經網絡架構搜索)和強化學習、遷移學習可以大幅提升建模效率、減少對核心數據科學家的依賴。

從本質上說自動建模是一個用算力換算法的過程,那麼如何使用更少的算力得到更優質的算法模型是考驗AutoML水平的核心問題,其中包括元學習的方法、貝葉斯優化算法、基於Boosting思想的特徵選擇方法等等,在學界和業界呈現百花齊放的狀態。在此之上人類經驗目前還是提升模型性能的關鍵要素,如何把人類經驗和AutoML能力有機結合,APS給出了自己的方案:

APS提供了面向結構化數據的通用建模工具,可以滿足一般性的迴歸和分類問題。同時APS提供了一個AutoML開發框架,通過這個開發框架,我們可以把核心數據科學家在建模過程中積累的經驗轉化成AutoML的一部分規則,最後生成一個面向細粒度業務場景的自動化建模插件。比如:自動時序數據的異常檢測、自動評分卡建模、自動文本分類、圖像分類等等。業務人員只要按要求準備好數據就可以完成一鍵建模。目前APS內置的所有自動建模插件都是基於這個開發框架完成。

2、算法和框架

對於算法和各種框架的支持是模型訓練的最基本能力,但也是考驗平臺開放性的一個重要方面。很多商業化平臺向用戶提供了非常豐富的商業閉源算法如SAS、RapidMiner,他們在平臺內預置了大量的數據挖掘和傳統機器學習算法,但單一廠商在算法上的進步是無法比擬和對抗整個開源生態的發展的。雖然這些廠商也逐漸在向開源陣營靠攏,但原生架構上的閉源思路會成為平臺開放性的羈絆。

2019年3月tensorflow2.0 alpha發佈,到6月發佈了2.0beta版,在Github上獲得了超過13萬星,被fork76000次以上,在整個技術圈的熱度近年只有996.ICU能與之匹敵。

ONNX(開放神經網絡交換)開源項目更是打通了深度學習框架甚至是傳統機器學習框架之間的壁壘,模型可以在不同的機器學習框架之間互通、轉換。用PyTorch訓練的模型可以使用Tensorflow來做推理Serving,這大大提升了學術研究向工業應用的轉化速度。

2018年BERT的開源以其優異的表現震撼了整個NLP界,甚至砸碎了很多NLP企業賴以生存的飯碗。就在BERT風頭正勁時XLnet又席捲而來,20項任務全面碾壓BERT。是的,這就是開源。

不誇張的說,一個平臺是否能分享開源生態的快速發展所帶來的技術紅利已經成為影響企業在AI戰略上能否搶佔先機的核心要素。

APS自下而上的開放性架構使開源和商業化產品完美結合。APS預置了常用的機器學習框架scikit-learn、spark ml、tensorflow、keras等,同時基於以上框架封裝了大量的預置模塊供用戶直接使用。在此基礎上,用戶可以自行擴展來支持更多的框架和算法:

● 通過環境管理可以實現運行時環境和算法框架的安裝來完成運行環境的準備;

● 通過探索空間結合構建好的運行環境可以使用任意算法框架來完成模型的探索和訓練;

● 通過分析模塊可以把算法封裝成可以複用的模塊,在工作流中通過拖拽式完成模型訓練和模型迭代。

3、高性能訓練

人工智能時代幾乎是伴隨著大數據時代同時爆發,這並非偶然,其必然性的內因是數據量級和計算能力的飛躍,這是今天機器學習建模真正能夠產生突破性進展的根本原因。不管是傳統統計機器學習還是深度學習,足夠大的數據量是模型表現的第一要素,因此能夠調度計算資源在最短的時間內完成大數據量的模型訓練是機器學習平臺的一個關鍵能力。目前主要圍繞著以下兩個方面實現高性能模型訓練:並行分佈式計算、GPU支持。

並行計算的伸縮模式有兩種:

1、scale up(縱向伸縮、單機多處理器模式)

2、scale out(橫向伸縮、多機多處理器模式)

我們知道縱向伸縮模式是把單臺物理機的硬件配置向上升級(比如處理器從1個升級到4個,內存從64G升級到1T),但是一旦物理機的資源超過一定的臨界值之後向上升級的成本會陡然增加而且最終會到達極限,成本和性能之間將不在保持線性關係(PC Server->小型機->Mainframe大型機->超級計算機)。這也就是分佈式架構產生的背景,我們需要一個可以橫向伸縮的架構,通過增加更多的物理機來提升整體系統的處理能力。兩種模式相比,在能處理相同數據量的情況下縱向升級的ROI(投入產出比)要遠遠高於橫向升級,1臺機器同時使用4個CPU一定比同時使用4臺機器每臺1個CPU的性能要高。但是一旦突破了單個物理機升級的極限,我們就只有一個選擇就是利用分佈式系統橫向伸縮來滿足更大數據量級的需求。

目前並行分佈式計算的範式主要有幾種:MPI、MapReduce、BSP,我們常見的Hadoop、Spark都是MapReduce範式,基於Spark的分佈式機器學習框架是目前傳統統計機器學習模型訓練的主流。其實使用Spark做機器學習也存在一定的缺陷:

1、Spark是面向大數據場景的分佈式計算引擎,其計算模型主要是針對二維數據的關係代數計算(篩選、連接、聚合等),但是機器學習中以科學計算為主,比如:多維數組和張量的計算、矩陣運算、快速傅立葉變換等。雖然Spark引入了Breeze線性代數工具包支持科學計算,但其原生架構上的設計決定了在機器學習場景中的計算效率和開發接口的友好性上都難以令人滿意。

2、對於數據科學家來說更加熟悉Python的數據科學生態和工具,強迫數據科學家使用Spark(即使是PySpark)確實面臨一些學習成本和障礙。近幾年開源社區貢獻了幾個非常出色的分佈式科學計算引擎,如:Dask、Mars(阿里開源)、modlin 等。尤其是Dask能夠兼容numpy、pandas、scikit-learn現有的大部分api接口,只要極少的代碼改造,就可以實現分佈式大數據量的處理和模型訓練。

在深度學習領域比較常見的是基於PS架構(參數服務器)的分佈式訓練,Tensorflow原生提供的就是這種模式。同時也有采用AllReduce的MPI架構,比如Uber開源的Horovod就是基於Ring-AllReduce的MPI架構來實現Tensorflow、Caffe、PyTorch等框架的分佈式訓練。AllReduce的性能和GPU利用率表現更好,而且並行度越高效果越明顯,據統計同時使用128塊GPU卡的分佈式訓練任務中Horovod比Tensorflow原生的性能高2倍左右,在GPU價格極其昂貴的今天,這無異於節省一半的成本投入。

APS支持了非常豐富的並行計算模式,包括:

● 單機多處理器模式,用於支持多CPU的機器學習算法的並行訓練,如XGBoost、Scikit-Learn中支持n_jobs參數的算法等;

● 基於Spark的分佈式計算引擎,用PySpark實現大規模數據處理和SparkML中提供的機器學習算法訓練;

● 基於Dask的分佈式計算引擎,用Python完成大數據量的數據處理和機器學習模型訓練(目前僅在探索空間中提供實驗性支持);

● 基於MPI架構AllReduce的分佈式深度學習訓練,用於完成Tensorflow基於GPU的分佈式訓練。

4、管理特性

在選擇機器學習平臺時經常被忽視的就是管理特性,以往我們的數據科學家都是使用本地電腦或者一臺服務器來完成全部的建模過程,這種方式在模型初期驗證和實驗階段還可以,一旦進入生產化階段沒有很好的管理功能支撐往往會陷入困境(在我前面的故事篇中有一些相關描述)。在企業中通常會組建由業務專家、數據科學家、數據工程師、算法工程師、開發工程師共同組成的項目組來完成建模任務,機器學習平臺要能夠滿足團隊協同工作的需求。APS提供了用戶管理、項目管理、權限分配、代碼和工作流的版本管理、模型管理等一系列功能,管理特性是APS非常重要的部分而且涵蓋相當豐富的內容,我後面會專門寫一篇APS有關管理方面的專題來詳述。

下期預告:

《30天到3分鐘的改變!》下篇——模型部署和迭代



分享到:


相關文章: