基於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 裏的流程圖

組件的Artifact

模塊

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 中讀取元數據,將流水線過程和結果可視化,獲取日誌,發起新的任務等。

其他工具

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

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



本文作者:蕭元

閱讀原文

本文爲雲棲社區原創內容,未經允許不得轉載。

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