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