企業(yè)應(yīng)該怎樣選擇數(shù)據(jù)科學(xué)&機(jī)器學(xué)習(xí)平臺(tái)?
你開發(fā)了一個(gè) R/Python/Java 模型。它運(yùn)行得很好。然后呢?
首先你的 CEO 要聽聞機(jī)器學(xué)習(xí),并且知道數(shù)據(jù)是新的石油。數(shù)據(jù)倉庫團(tuán)隊(duì)中有個(gè)人剛提交了他 1PB Teradata 系統(tǒng)的預(yù)算,而 CIO 聽說 FB 正在用 Hadoop 驅(qū)動(dòng)商用存儲(chǔ)服務(wù),還超級(jí)便宜。這掀起了一場(chǎng)***的風(fēng)暴,你被指派去組建一個(gè)數(shù)據(jù)優(yōu)先(data-first)的創(chuàng)新團(tuán)隊(duì)。于是你聘請(qǐng)了一個(gè)數(shù)據(jù)科學(xué)家團(tuán)隊(duì),突然間所有人都很興奮,都想從你那里得到一點(diǎn)數(shù)字魔法去谷歌化(Googlify)他們的生意。但你的數(shù)據(jù)科學(xué)家們并沒有基礎(chǔ)設(shè)施可用,只能把時(shí)間都花在構(gòu)建執(zhí)行程序的項(xiàng)目表上,所以投資回報(bào)率并不看好,這下大家又都來怪你沒有對(duì)他們的商業(yè)盈虧(P&L)投入足夠的核心技術(shù)了。- Vish Nandlall
在 PB 級(jí)尺度上分享、復(fù)用和運(yùn)行模型并不屬于數(shù)據(jù)科學(xué)家工作流的一部分。在企業(yè)環(huán)境中,這種低效率更是顯眼,因?yàn)閿?shù)據(jù)科學(xué)家們的每一個(gè)工作步驟都需要和 IT 部門協(xié)作,導(dǎo)致連續(xù)部署流程的混亂(如果不是無法進(jìn)行的話),可重用性也很低,并且這個(gè)痛點(diǎn)還會(huì)隨著公司不同角落開始「谷歌化(Googlify)他們的業(yè)務(wù)」而滾雪球式地放大。
為了滿足這種需求,數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)平臺(tái)(Data Science & Machine Learning Platform)應(yīng)運(yùn)而生了。作為一個(gè)基礎(chǔ)層,在它之上是三個(gè)內(nèi)部利益相關(guān)體的合作:產(chǎn)品數(shù)據(jù)科學(xué)家、中心數(shù)據(jù)科學(xué)家和 IT 基礎(chǔ)設(shè)施。
圖 1:一個(gè)數(shù)據(jù)科學(xué)平臺(tái)服務(wù)于三個(gè)利益相關(guān)體:產(chǎn)品、中心和基礎(chǔ)設(shè)施
對(duì)于那些有著對(duì)機(jī)器學(xué)習(xí)不斷增長的依賴性的復(fù)雜大型企業(yè),圖 1這個(gè)系統(tǒng)是非常有必要的。
在這篇博文中,我們將討論以下幾個(gè)問題:
- 誰需要一個(gè)數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)平臺(tái)(Data Science & Machine Learning Platform,DS & ML)?
- 數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)平臺(tái)(Data Science & Machine Learning Platform)是什么?
- 如何區(qū)別不同的平臺(tái)?
- 平臺(tái)的實(shí)例
一、你需要一個(gè)數(shù)據(jù)科學(xué)平臺(tái)(Data Science Platform)嗎?
它并不適用于所有人。對(duì)于只有一兩個(gè)用例的小團(tuán)隊(duì),***還是圍繞共享和拓展來即興創(chuàng)作自己的解決方案(或者使用私人托管方案)。但如果你是一個(gè)有很多內(nèi)部客戶的中心化團(tuán)隊(duì),你很有可能面臨著下面幾種癥狀的困擾:
癥狀#1 你在分裂代碼庫
你的數(shù)據(jù)科學(xué)家構(gòu)建出一個(gè)模型(比方說是基于 R 和 Python 的),想把它嵌入產(chǎn)品,用在一個(gè)網(wǎng)絡(luò)或移動(dòng)應(yīng)用里。而你的后端功能是,本來用 Java 或 .NET 構(gòu)建了基礎(chǔ)架構(gòu),現(xiàn)在卻只能用他們所選擇的技術(shù)棧從頭開始重寫這個(gè)架構(gòu)。結(jié)果你就有兩個(gè)代碼庫要調(diào)適和同步。隨著構(gòu)建模型數(shù)量的增加,這種低效率會(huì)加倍放大。
癥狀#2 你正在重新造輪子
不論是小到一個(gè)預(yù)處理的函數(shù)還是大到一個(gè)成熟的訓(xùn)練模型。你的團(tuán)隊(duì)產(chǎn)出的東西越多,在現(xiàn)有成員和以前的成員間就越有可能出現(xiàn)系統(tǒng)性的成果復(fù)制,尤其是項(xiàng)目。
癥狀#3 你很難雇傭到***人才
你公司的每個(gè)角落都會(huì)產(chǎn)生要脫穎而出的數(shù)據(jù)科學(xué)或機(jī)器學(xué)習(xí)想法,但你只有少數(shù)幾個(gè)真正出色的專家,他們一次也只能接受一項(xiàng)挑戰(zhàn)。你本應(yīng)雇傭更多的人,但數(shù)據(jù)科學(xué)家和機(jī)器學(xué)習(xí)天才是非常稀有的,而他們中的明***人物的薪水堪比一個(gè)***的美國國家橄欖球聯(lián)盟(NFL)四分衛(wèi)。
癥狀#4 你的云賬單正在不斷堆積(太多 P2 了!)
你在一個(gè)網(wǎng)絡(luò)服務(wù)器后端部署了一個(gè)模型。在深度學(xué)習(xí)(deep learning)世界中你很可能想要一個(gè)配置好現(xiàn)成 GPU 的機(jī)器,比如說 AWS EC2(或著 Azure N-Series VM)上的 P2 實(shí)例。為每個(gè)產(chǎn)品化的深度學(xué)習(xí)模型來運(yùn)行這些機(jī)器很容易就花費(fèi)高昂,尤其對(duì)于棘手的工作任務(wù)或難以預(yù)測(cè)的模式。
二、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)平臺(tái)(Data Science & Machine Learning Platform)是什么?
它與所有事都相關(guān),除了訓(xùn)練。一個(gè)數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)平臺(tái)(Data Science & Machine Learning Platform)關(guān)注的是過了訓(xùn)練階段后的模型的生命。這包括了:模型注冊(cè)、展示它們?nèi)绾螐囊粋€(gè)版本升級(jí)到兩一個(gè)版本的傳承、將它們中心化讓其他用戶能找到、并讓它們轉(zhuǎn)化為獨(dú)立的人造產(chǎn)物,能嵌入到任何數(shù)據(jù)流程中。
1. 庫 vs. 注冊(cè)表
像是機(jī)器學(xué)習(xí)算法庫(scikit-learn)和 Spark MLlib 這樣的東西儲(chǔ)存了一系列獨(dú)特的算法。這是一個(gè)庫。而數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)平臺(tái)則是一個(gè)注冊(cè)表。它包括了一個(gè)算法的多種執(zhí)行方法,有不同的來源,而且每個(gè)算法都有自己的版本(或族系),這些版本的可發(fā)現(xiàn)性和可獲取性是同等的。一個(gè)注冊(cè)表用戶能很容易找到并對(duì)比一個(gè)算法的不同執(zhí)行方法的輸出。
2. 訓(xùn)練 vs. 推理
數(shù)據(jù)科學(xué)家會(huì)用合適的工具來解決對(duì)應(yīng)的問題。有時(shí)這些工具就是一種機(jī)器學(xué)習(xí)算法庫(scikit-learn)和 Keras 的結(jié)合,或者 Caffe 和 Tensorflow 的結(jié)合體,又或者是一個(gè)用 R 語言寫的 H2O 腳本。一個(gè)平臺(tái)不會(huì)對(duì)這門技藝的工具發(fā)出指令,但能夠注冊(cè)并運(yùn)營這些模型,這個(gè)過程獨(dú)立于模型訓(xùn)練和實(shí)現(xiàn)的方式。
3. 人工 vs. 自動(dòng)部署
把一個(gè)模型部署到生產(chǎn)中的方式有很多,最終結(jié)果都會(huì)是一個(gè) REST API。不同的部署途徑會(huì)引發(fā)很多風(fēng)險(xiǎn),包括前后不一致的 API 接口設(shè)計(jì)、不一致的認(rèn)證和登錄,以及逐漸枯竭的開發(fā)資源。一個(gè)平臺(tái)應(yīng)該能夠用最少的步驟自動(dòng)完成這個(gè)工作,通過一致的 API 和授權(quán)來提供模型,并降低開發(fā)運(yùn)營的執(zhí)行壓力。
三、如何區(qū)別不同的數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)平臺(tái)?
從表面來看,所有的數(shù)據(jù)科學(xué)平臺(tái)都差不多,但魔鬼隱藏在細(xì)節(jié)里。下面是一些可比較的數(shù)據(jù)點(diǎn):
1. 支持的語言
R 語言和 Python 對(duì)絕大部分?jǐn)?shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)項(xiàng)目都是標(biāo)配。Java 是接近的第二選擇,因?yàn)橛兄?deeplearning4j 和 H2O 的 POJO 模型提取器這樣的庫。而 C++ 在科學(xué)計(jì)算或 HPC 的環(huán)境下尤其適用。其他執(zhí)行時(shí)間則是可有可無的,這取決于你的用例和你的非數(shù)據(jù)科學(xué)同事所用的主要技術(shù)堆棧,比如 NodeJS/Ruby/.NET 這些。
2. CPU vs. GPU(深度學(xué)習(xí))
隨著這一領(lǐng)域的成熟和模型規(guī)模的增長,深度學(xué)習(xí)在數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)中的重要性會(huì)日益凸顯。TensorFlow 雖然很受歡迎,但它并不能總是做到反向兼容,Caffe 則需要特定的編譯器標(biāo)識(shí),cuDNN 只會(huì)給你的 GPU 簇增加一層管理的復(fù)雜度。在沒有強(qiáng)制要求的情況下,完全容器化(containerizing)且產(chǎn)品化的異構(gòu)模型(在代碼、節(jié)點(diǎn)權(quán)重、框架和底層驅(qū)動(dòng)方面),和在 GPU 架構(gòu)上運(yùn)行它們對(duì)一個(gè)平臺(tái)來說是非常不同的。
3. 單一 vs. 多重的版本控制
版本化是指能夠把模型的族系演變列出來并獲取每個(gè)版本獨(dú)立訪問權(quán)限的能力。當(dāng)模型被版本化以后,數(shù)據(jù)科學(xué)家就能測(cè)試模型隨時(shí)間的變化規(guī)律。一個(gè)單一版本的架構(gòu)只會(huì)顯示出模型(目前穩(wěn)定的那個(gè)版本)的單個(gè) REST API 端點(diǎn),而只有創(chuàng)作者能通過他們的控制面板在不同的模型間「切換」。一個(gè)多版本的架構(gòu)除了顯示「穩(wěn)定」版本的一個(gè) REST API 端點(diǎn)之外,還能顯示以往每個(gè)版本的,使得它們都能同時(shí)可被獲取,這能消除反向兼容困難,還能讓后端工程師進(jìn)行局部發(fā)布展示或?qū)崟r(shí) A/B 測(cè)試。
4. 垂直 vs. 水平擴(kuò)展
僅僅讓模型作為一個(gè)可獲取的 REST API 是不夠的。垂直拓展就是在一個(gè)更大型的機(jī)器上部署你的模型。水平擴(kuò)展就是在多個(gè)機(jī)器上部署你的模型。而 Algorithmia Enterprise 所執(zhí)行的無服務(wù)器擴(kuò)展,這是應(yīng)需求進(jìn)行的垂直拓展,這里的需求是指把模型封裝進(jìn)一個(gè)專用容器中,把容器沿計(jì)算集群即時(shí)部署,并且在執(zhí)行完成后將其消除以釋放資源。無服務(wù)器計(jì)算帶來了拓展和經(jīng)濟(jì)性方面的好處。
5. 單一 vs. 多個(gè)租戶
當(dāng)你在共享硬件資源時(shí),處理敏感或保密性的模型是很有挑戰(zhàn)的。單一租戶的平臺(tái)會(huì)在同樣的資源(機(jī)器實(shí)例、虛擬內(nèi)存等)上運(yùn)行所有的產(chǎn)品模型。多租戶平臺(tái)把模型作為虛擬隔離的系統(tǒng)(給每個(gè)模型不同的容器或虛擬機(jī))來部署,可能會(huì)提供額外的安全措施(比如防火墻規(guī)則和審計(jì)跟蹤)。
6. 固定的 vs. 可交替的數(shù)據(jù)源
數(shù)據(jù)科學(xué)家可能需要在來自 S3 的模型上運(yùn)行離線數(shù)據(jù),而一個(gè)后端工程師則同時(shí)通過 HDFS 在同一個(gè)模型上運(yùn)行產(chǎn)品數(shù)據(jù)。一個(gè)固定的數(shù)據(jù)源平臺(tái)需要模型的作者安裝兩種數(shù)據(jù)連接器:HDFS 和 S3。而一個(gè)可交替的數(shù)據(jù)源則只需要作者安裝一個(gè)通用的數(shù)據(jù)連接器,它可以作為多種數(shù)據(jù)源的適配器,同時(shí)也是一種讓不會(huì)過時(shí)的模型與以后出現(xiàn)的任何數(shù)據(jù)源都能兼容的方式。
四、數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)平臺(tái)的實(shí)例
這絕不是一個(gè)詳盡的清單。
- Algorithmia Enterprise:http://algorithmia.com/enterprise
- Domino Data Lab:http://dominodatalab.com/
- yHat:https://www.yhat.com/
- Dataiku:https://www.dataiku.com/
- Cloudera Workbench:https://www.cloudera.com/products/data-science-and-engineering/data-science-workbench.html
- Alteryx:http://www.alteryx.com/
- RapidMiner:https://rapidminer.com/
本文作者為 Algorithmia 的 Ahmad AlNaimi。
【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號(hào)“機(jī)器之心( id: almosthuman2014)”】