爲什麼數據科學家往往很喜歡Kubernetes?

Kubernetes爲職業數據科學家提供了無與倫比的功能組合。簡化軟件開發工作流的特性也爲數據科學工作流提供了支持。

正文

本文最初發佈於Opensource.com,經原作者授權由InfoQ中文站翻譯並分享。

圖片圖片來源:opensource.com

首先,讓我們從一個沒有爭議的觀點開始:軟件開發人員和系統管理員都喜歡將Kubernetes作爲一種在Linux容器中部署和管理應用程序的方法。Linux容器是可重複構建和部署的基礎,但是,Kubernetes及其生態系統爲讓容器適合運行應用程序提供了基本特性,比如:

  • 持續集成和部署:你可以實現從Git提交到向在生產環境中運行的新代碼傳遞測試套件的整個流程;
  • 全面監控:跟蹤系統組件的性能和其他指標並以有意義的方式可視化讓其更易分析;
  • 聲明式部署:依靠Kubernetes在臨時環境中重建生產環境;
  • 靈活的服務路由:這意味着可以擴展服務或將更新逐步發佈到生產環境(如果需要,還可以將其回滾)。

你可能不知道,Kubernetes還爲職業數據科學家提供了無與倫比的功能組合。簡化軟件開發工作流的特性也爲數據科學工作流提供了支持。要知道爲什麼,我們先來看看數據科學家是怎麼工作的。

數據科學項目:預測客戶流失率

有些人對數據科學的定義很寬泛,包括機器學習(ML)、軟件工程、分佈式計算、數據管理和統計。另一些人則狹義地將數據科學定義爲將某些領域的專業知識與機器學習或高級統計相結合,尋找解決實際問題的方法。在本文中,我們不會給出數據科學家的明確定義,但是,我們將告訴你數據科學家在一個典型的項目中可能要做什麼,以及他們可能如何工作。

圖片
擁有訂閱客戶的企業都面臨一個問題:有些企業可能不會續訂。客戶流失檢測旨在主動識別那些可能不會續簽合同的客戶。一旦這些客戶被識別出來,企業可以選擇用特定的干預措施(例如銷售電話或折扣)來鎖定這些老主顧,以降低他們離開的可能性。整體上,流失預防問題有幾個部分:預測哪些客戶可能會離開,確定哪些干預措施可能會留住客戶,以及在干預預算有限的情況下,將哪些客戶作爲優先目標。數據科學家可以對其中任何一個或所有部分進行研究,但是我們將以第一部分爲例。

要解決這個問題,第一步是確定合適的定義,以便將“流失”納入預測模型。對於怎樣算失去一個客戶,我們可能有一個直觀的定義,但數據科學家需要形式化的定義,比如說,將客戶流失預測問題定義爲:“考慮客戶在過去18個月的活動,他們有多大可能在未來6個月中取消他們的合同?”

圖片
然後,數據科學家需要決定模型應該考慮有關客戶活動的哪些數據——實際上,就是研究並形式化客戶流失定義的第一部分。具體地說,數據科學家可能會考慮有關客戶在該歷史窗口中實際使用該公司產品的信息、客戶規模、客戶-服務交互次數,甚至是他們在其提交的服務工單上所留下的評論的語氣。模型所考慮的度量值或數據稱爲特徵。

圖片
有了流失定義和一組要考慮的特徵之後,數據科學家就可以開始對歷史數據(包括特徵集和給定時期內給定客戶的最終結果)進行探索性分析了。探索性分析可以包括可視化特徵組合,以及查看它們是否與客戶會流失相關。更一般地說,這部分處理是爲了識別歷史數據中的結構,以及是否有可能根據描述客戶的數據在留下的客戶和流失的客戶之間找到清晰的劃分。

圖片
對於某些問題,數據中是否存在結構並不明顯——在這些情況下,數據科學家將不得不從頭做起,確定要收集的一些新數據,或者確定一種對可用數據進行編碼或轉換的新方法。然而,探索性分析通常會幫助數據科學家確定在訓練預測模型時要考慮的特徵,並提出一些轉換這些數據的方法。數據科學家的下一項工作是特徵工程:找到一種方法來轉換和編碼特徵數據——這些數據可能位於數據庫表中、事件流中或者是通用編程語言的數據結構中——以便能作爲模型訓練算法的輸入。通常,這意味着將這些特徵編碼爲浮點數的向量。不是任何編碼都行;數據科學家需要找到一種可以保留特徵結構的編碼,這樣,類似的客戶就可以映射到類似的向量,否則算法的性能就會很差。

圖片
直到現在,數據科學家才準備好訓練一個預測模型。對於預測客戶是否會流失的問題,模型訓練管道從標註過的客戶歷史數據開始。然後,它使用在特徵工程過程中開發出的技術從原始數據中提取特徵,生成帶有“true”或“false”標記的浮點數向量,並對應到你所感興趣的窗口中將會流失或不會流失的客戶。模型訓練算法將這些特徵向量集合作爲輸入,優化過程,以錯誤率最低的方式分離真假向量。預測模型最終是一個函數,它接受一個特徵向量並返回true或false,指示與該向量對應的客戶是否可能流失。

在這個過程的任何一點上,數據科學家可能需要重新回到以前的階段——也許是改進特徵工程方法,收集不同的數據,甚至是更改他們試圖預測的指標。在這種情況下,數據科學工作流和傳統的軟件開發生命週期非常像:在實現過程中發現的問題可能會迫使工程師更改接口的設計或數據結構的選擇。這些問題甚至可以級聯到需求分析,對項目的基礎情況進行更廣泛的反思。幸運的是,Kubernetes可以像支持軟件開發生命週期一樣支持數據科學家的工作流。

面向數據科學的Kubernetes

數據科學家和軟件工程師有許多相同的關注點:可重複的實驗(比如可重複的構建);可移植和可複製的環境(如在開發、過渡和生產環境中具有相同的設置);憑證管理;跟蹤和監控生產環境中的指標;靈活的路由;輕鬆擴展。不難看出,應用程序開發人員使用Kubernetes所做的事情與數據科學家可能想做的事之間有一些類似之處:

  • 可重複的批處理作業,如CI/CD管道,類似於機器學習管道,多個協同階段在其中以可重複的方式一起處理數據、提取特徵、訓練、測試和部署模型;
  • 描述服務之間連接的聲明性配置有助於創建跨平臺的可重複學習管道和模型;
  • 微服務架構支持在管道中對機器學習模型進行簡單地調試,並幫助數據科學家和他們團隊中的其他成員進行協作。

數據科學家與應用程序開發人員面臨許多相同的挑戰,但他們也面臨一些獨特的挑戰,這些挑戰與數據科學家的工作方式以及機器學習模型比傳統服務更難測試和監控這一事實有關。我們將重點討論一個與工作流相關的問題。

大多數數據科學家使用交互式筆記本(interactive notebooks)工作,這是一個筆記本環境,通常由Project Jupyter開發,提供一種交互式迭代編程環境,用戶可以在其中混合說明性本文和代碼、運行並更改代碼、檢查其輸出。

這些特性使得該環境對探索性分析非常靈活。然而,它們並不是用於協作或發佈的理想軟件工件——想象一下,如果軟件開發人員發佈工作的主要方式是將來自交互式REPL腳本發佈到pastebin服務。

與同事分享交互式筆記本就像分享實體筆記本一樣——裏面有一些很好的信息,但是必須仔細查找才能找到。由於筆記本的脆弱性和對環境的依賴性,同事在運行筆記本時可能會看到不同的輸出——甚至更糟:它可能會崩潰。

面向數據科學家的Kubernetes

數據科學家可能不想成爲Kubernetes專家——這很好!Kubernetes的優點之一就是構建更高級工具的強大框架。

Binder服務就是其中一個工具,採用一個Jupyter筆記本的Git存儲庫,構建容器鏡像來提供服務,然後在路由公開的Kubernetes集羣中啓動鏡像,這樣就可以從公網訪問。由於筆記本的一大缺點是其正確性和功能可能依賴於其環境,因此,如果有一個高級工具可用來構建不可變環境爲Kubernetes上的筆記本提供服務的話,就可以避免許多讓人頭疼的事。

你可以使用託管的Binder服務或運行自己的Binder實例,但是,如果你想在這個過程中獲得更大的靈活性,你還可以使用Source-To-Image(S2I)工作流和工具,以及Graham Dumpleton提供的Jupyter S2I鏡像上線自己的筆記本服務。事實上,對於基礎設施專家或打包專家來說,Source-To-Image工作流是構建可供主題專家使用的高級工具的良好起點。例如,Seldon項目使用S2I來簡化模型服務發佈——只要向構建器提供一個模型對象,它將構建一個容器並將其作爲服務公開。

Source-To-Image工作流的一個優點是,它支持在構建映像之前對源存儲庫進行任意操作和轉換。有個例子可以說明這個工作流有多強大,我們創建了一個S2I構建器鏡像,該鏡像以一個Jupyter筆記本作爲輸入,該筆記本展示瞭如何訓練模型。然後,它處理這個筆記本以確定它的依賴關係,並提取Python腳本來訓練和序列化模型。有了這些,構建器就會安裝必要的依賴項並運行腳本來訓練模型。構建器的最終輸出是一個REST Web服務,它爲由筆記本構建的模型提供服務。你可以看下notebook-to-model-service S2I的運行視頻。同樣,這不是數據科學家必須開發的工具,但是,創建這樣的工具是Kubernetes專家和打包專家與數據科學家合作的絕佳機會。

面向生產環境機器學習的Kubernetes

對於正在開發技術利用機器學習解決商業問題的數據科學家,Kubernetes提供了很多幫助,同時,它也爲將這些技術投入生產應用的團隊提供了很多幫助。有時候,機器學習代表一個獨立的生產工作負載——用於訓練模型和提供見解的批處理作業或流作業——但是,機器學習作爲智能應用程序的一個重要組成部分越來越多地投入到了生產應用。

Kubeflow項目的目標用戶是機器學習工程師,他們需要在Kubernetes上搭建和維護機器學習工作負載和管道。對於精通基礎設施的數據科學家來說,Kubeflow也是一個非常好的發行版。它提供模板和自定義資源來在Kubernetes上部署一系列機器學習庫和工具。

Kubeflow是在Kubernetes上運行TensorFlow、JupyterHub、Seldon和PyTorch等框架的一種很好的方式,因此,它代表了真正可移植工作負載的一個路徑:數據科學家或機器學習工程師可以在筆記本電腦上開發管道並將其部署到任何地方。這是一個快速發展的社區,開發了一些很酷的技術,你應該看看。

Radanalytics.io是一個面向應用程序開發人員的社區項目,其重點是基於容器中的擴展計算開發智能應用程序的獨特需求。Radanalytics.io項目包括一個容器化的Apache Spark發行版,以支持可伸縮的數據轉換和機器學習模型訓練,以及Spark操作界面和Spark管理界面。該社區還爲智能應用程序的整個生命週期提供了支持,提供了Jupyter筆記本模板和鏡像、TensorFlow訓練和服務以及S2I構建器,後者可以部署應用程序及其所需的擴展計算資源。如果你想在OpenShift或Kubernetes上開始智能應用程序構建,radanalysis.io的示例應用程序或有關會議演講會是一個不錯的起點。

查看英文原文:Why data scientists love Kubernetes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章