1. 程式人生 > >基於Kubernetes 的機器學習工作流

基於Kubernetes 的機器學習工作流

介紹

Pipeline是Kubeflow社群最近開源的一個端到端工作流專案,幫助我們來管理,部署端到端的機器學習工作流。Kubeflow 是一個谷歌的開源專案,它將機器學習的程式碼像構建應用一樣打包,使其他人也能夠重複使用。

kubeflow/pipeline 提供了一個工作流方案,將這些機器學習中的應用程式碼按照流水線的方式編排,形成可重複的工作流。並提供平臺,幫助編排,部署,管理,這些端到端機器學習工作流。

概念

pipeline 是一個面向機器學習的工作流解決方案,通過定義一個有向無環圖描述流水線系統(pipeline),流水線中每一步流程是由容器定義組成的元件(component)。

當我們想要發起一次機器學習的試驗時,需要建立一個experiment,在experiment中發起執行任務(run)。Experiment 是一個抽象概念,用於分組管理執行任務。

  • Pipeline:定義一組操作的流水線,其中每一步都由component組成。 背後是一個Argo的模板配置。
  • Component: 一個容器操作,可以通過pipeline的sdk 定義。每一個component 可以定義定義輸出(output)和產物(artifact), 輸出可以通過設定下一步的環境變數,作為下一步的輸入, artifact 是元件執行完成後寫入一個約定格式檔案,在介面上可以被渲染展示。
  • Experiment: 可以看做一個工作空間,管理一組執行任務。
  • Run: pipeline 的執行任務例項,這些任務會對應一個工作流例項。由Argo統一管理執行順序和前後依賴關係。
  • Recurring run: 定時任務,定義執行週期,Pipeline 元件會定期拉起對應的Pipeline Run。

Pipeline 裡的流程圖

基於Kubernetes 的機器學習工作流

 

元件的Artifact

基於Kubernetes 的機器學習工作流

 

基於Kubernetes 的機器學習工作流

 

模組

Pipeline 的元件比較簡單,大致分為5個部分。

  • MySQL: 用於儲存Pipeline/Run 等元資料。
  • Backend: 一個由go編寫的後端,提供kubernetes ApiServer 風格的Restful API。處理前端以及SDK發起的操作請求。 Pipeline/Experiment 之類的請求會直接存入MySQL元資料。和Run 相關的請求除了寫入MySQL以外還會通過APIServer 同步操作Argo例項。
  • CRD Controller: Pipeline 基於Argo擴充套件了自己的CRD ScheduledWorkflow, CRD Controller 中會主要監聽ScheduledWorkflow和Argo 的Workflow 這兩個CRD變化。處理定期執行的邏輯。
  • Persistence Agent: 和CRD Controller 一樣監聽Argo Workflow變化,將Workflow狀態同步到MySQL 元資料中。它的主要職責是實時獲取工作流的執行結果。
  • Web UI:提供介面操作。 從Backend 中讀取元資料,將流水線過程和結果視覺化,獲取日誌,發起新的任務等。
基於Kubernetes 的機器學習工作流

 

其他工具

除了以上核心模組以外, Pipeline提供了一系列工具,幫助更好構建流水線。

  • SDK, 用於定義pipeline和component,編譯為一個argo yaml模板,可以在介面上匯入成pipeline。
  • CLI 工具,替代Web UI,呼叫Backend Api 管理流水線
  • Jupyter notebook。 可以在notebook中編寫訓練程式碼,也可以在notebook中通過sdk管理Pipeline。