Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kubeflow 對於機器學習平台的願景

7b6c8d139f263f8435cd05c59bce0750?s=47 Yi Yang
April 29, 2019

Kubeflow 對於機器學習平台的願景

R-Ladies Taipei x Cloud Native Taiwan User Group

7b6c8d139f263f8435cd05c59bce0750?s=128

Yi Yang

April 29, 2019
Tweet

Transcript

  1. Kubeflow 對於機器學習平台的願景 林林義洋 The Machine Learning Toolkit for Kubernetes @yylin1

    R-Ladies Taipei x Cloud Native Taiwan User Group
  2. About Me • Master degree as CSIE, PU. • AI

    Research Center in CGU. 2 @yylin1(frank.yylin@gmail.com) https://medium.com/@frank.yylin
  3. Agenda • 談論機器學習平台 • 理解 Kubernetes 容器平台 • Kubeflow 架構與組件剖析

    • Kubeflow 部署使用案例 3
  4. 4 A Platform for ML 機器學習平台? 當我們在談論機器學習平台時,我們在談論什什麼?

  5. Perception: ML Products are mostly about ML 5

  6. ML Requires DevOps; lots of it 在整個機器學習的⼯工作流中,模型訓練的程式碼只是其中的⼀一⼩小部分。 6 Ref: Sculley

    et al.: Hidden Technical Debt in Machine Learning Systems
  7. 除了了專注於模型訓練外,建構 ML ⼯工作流程有多個步驟,包括任務的監控、⽇日誌的回收、超參參數的選擇與 優化,模型的開發與彙整、資料預處理理、特徵提取等等,都是流程中不可或缺的部分。 Building ML Products 7 繁瑣的資料預處理理 Developer

    建構模型 Building a Model Logging Data Ingestion Data Analysis Data Transform -ation Data Validation Data Splitting Trainer Model Validation Training At Scale Roll-out Serving Monitoring
  8. 實際情境 8 Ref: 當我們在談論機器學習平台時,我們在談論什什麼- by gaocegege

  9. 實驗環境 ⼩小建 是⼀一位 ML 演算法⼯工程師,最近他正在為公司實現⼀一個 物件偵測的模型。 為讓他有實驗環境,公司 Infra 團隊的⼯工程師,給了了他三台機器,每台各配置不同效能與GPU。 9

    機器A ⼀一張GTX 1060 機器B 只有四張 GTX 1080 機器C 只有兩兩張 Tesla P100
  10. 如果你是⼀一個演算法⼯工程師 10 機器A 的環境 TensorFlow 只⽀支援CPU 機器B 的環境 TensorFlow 的版本是1.10

    機器C 的環境只安裝 PyTorch 是公司另⼀一位演算法科學家 莉莎
 在做資料分析 LSTM 時做實驗⽤用
 雖然 TensorFlow 已經發布2.0 版本,但⼩小建開發物件偵測習慣使⽤用經典的1.4 版本 但他登錄到了了機器上,發現事情並不簡單
  11. 如果你是⼀一個演算法⼯工程師 11 機器A 的環境 TensorFlow 只⽀支援CPU 機器B 的 TensorFlow 的版本是1.10

    機器C 的環境只安裝 PyTorch 於是⼩小建開始針對實驗機進⾏行行環境配置: • 移除CPU版本,重新配置對應 GPU驅動 • 安裝顯⽰示卡對應 CUDA & cuDNN • 移除舊有版本並重裝 Tensorflow 版本 • 發現TensorFlow v1.4不⽀支持機器B上的CUDA 9.0 • Remove CUDA 9.0 and install CUDA 8.0 • 問題不多,直接安裝 Tensorflow • 但可能依賴套件會與PyTouch 衝突
  12. 如果你有⼀一個機器學習平台 12 • 幾週後,Infra團隊 利利⽤用開源項⽬目Kubeflow為演算法⼯工程師和資料科學家 們搭建了了⼀一個⿇麻雀雖⼩小五臟俱全的機器學習平台 • ⼩小建透過已經團隊打包好的 TensorFlow v1.4

    的 Docker Images,⽤用平台 發起了了⼀一次分散式訓練。從訓練中的服務發現,異異常處理理等都由平台⾃自動 完成,包含⽀支持從準備數據到模型部署的⼀一整套機器學習端到端的過程 Images
  13. 機器學習平台要解決問題 13 • 「系統環境問題」等應該由 Infra 團隊來來解決的問題 • 這些問題已經都交由平台來來⾃自動化處理理,他可以專注於「模型的開發」 • TensorFlow、PyTorch

    等這些框架改變的是機器學習的編譯規範⽅方式 - 平台要改變的是機器學習的「開發與部署」流程
 • 機器學習⼯工作流的構建 - 流⽔水線 - 使⽤用者透過指定使⽤用的 - 資源數量量 (節點與GPU) - 分佈式模型(AllReduce、ParameterServer等) - 分佈式配置(ParameterServer數量量等)直接在平台上進⾏行行模型訓練
  14. Incubator by Foundation 雲端原⽣生運算基⾦金金會(Cloud Native Computing Foundation,CNCF)的願景是建立並 推動採⽤用為現代分散式系統環境,來來優化的新運算模式,該基⾦金金會也提供了了相關專 案的⼀一致性認證計劃,以此推動穩定版 Kubernetes

    等其他專案的部署與應⽤用。
  15. LF Deep Learning Foundation 深度學習基⾦金金會(LF Deep Learning Foundation,LFFoundation)的願景是希望為⼈人 ⼯工智慧、機器學習和深度學習⽅方⾯面提供長期策略略和⽀支持,並協助維護開源創新,同 時努⼒力力使這些關鍵新技術專案能夠讓全世界各地的開發⼈人員和資料科學家使⽤用。

    15 https://landscape.lfdl.io/
  16. 16

  17. 17 理理解 Kubernetes 容器平台 Container-Centric management environment

  18. 老⽅方式: Bare-metal Machines kernel libs app app app app •

    沒有隔離 • 沒有命名空間 • 共⽤用常⾒見見的函式庫 • ⾼高耦合的應⽤用程式與作業系統 18
  19. • 隔離性⾼高 • 效能會損失 • 同樣有⾼高耦合的應⽤用程式與作業系統 • 多虛擬機管理理效率差 • 啟動時間慢

    • 系統映像檔容量量較肥 • 粒度粗 老⽅方式: Virtual Machines 19 app libs kernel libs app app kernel app libs libs kernel kernel 作業系統層級
  20. • 效能佳 • 透過 namespace 隔離網路、UID 等 • 與 OS

    Kernel 高耦合 • 啟動時間快 • 應用映像檔容量較小(小至 10 MB)︐攜帶性佳 • 粒度細︐利用密度提升 新⽅方式: Containers(OS-Level Virtualization) libs app kernel libs app libs app libs app 20 應⽤用程式層級
  21. • 取虛擬機與容器之間的特性平衡 • 輕量量的虛擬機環境 新⽅方式: Hypervisor-based Containers 21 https://katacontainers.io/

  22. Docker Docker 利利⽤用 Linux 核⼼心中的資源分離機制,如 cgroups、namespace(Mount, UTS, IPC, PID 等),對處理理程式進⾏行行封裝隔離。屬於作業系統

    層虛擬化(OS Level virtualization)。 22
  23. OCI(The Open Container Initiative)是由多家頂尖 IT 公司共同組成的組織,其⽬目 標是制定 Container 的標準規範,以利利 Container

    發展。該標準讓開發者打包、 簽署應⽤用程式,並且可以⾃自由選⽤用不同的 Container runtime 環境外,在近⽇日則 更更⼀一步延伸。⽽而⽬目前基於 OCI 標準 runtime 的 runC 已經是許多容器引擎的基 礎。 Open Container Initiative (OCI) 23
  24. Problems with standalone Docker 在單節點的主機上執行一或多組 Continer 應用程式︐將面臨單點故障問題 (SPOF)與擴展限制問題(Limited scalability)。 24

  25. Kubernetes Kubernetes 是 Google 開源的容器(Container)分散式管理理系統,是 Google Borg ⼗十幾年年以來來⼤大規模應⽤用容器技術的經驗累積和昇華的⼀一個重要成果,是建於 OCI Runtime

    之上的容器叢集排程系統,簡稱為 k8s( )。 25 Stars 51850+ Commits 77692+ Contributors 2112+ “Kubernetes is becoming the Linux
  26. Kubernetes 特性概觀 Kubernetes 管理理跨區域與主機的容器節點,提供基本部署、維運、管理理,以及 執⾏行行各項應⽤用程式,並具備多種特性。 26 資源監控 Monitoring 滾動升級 Rolling-update

    ⾼高可靠性 High-availability ⾃自我修復 Self-healing 雲端⽀支援 Cloud Provider 持久性儲存 Persistent Volumes 組態檔案 Configmap 安全性 Secret
  27. Why choose kubernetes ? 27 ⽣生產環境中,我們將可能有多台機器需要被編配設置,且環境可能是複雜的,需要網路路、運算與儲存需求 • 適合⼤大規模管理理與擴展,⾃自動化部屬 • 透過

    Kubernetes DNS 機制來來解析伺服器位址 • 透過 Replication Controller 來來管理理故障重啟問題 - k8s Pods for Training - k8s Deployments for Serving • Kubernetes 提供 Monitoring 與 Logging 等功能 • 能夠⽀支援使⽤用 CPU 與 GPU 排程來來指定節點 • 可擴展性好,⽀支持CRD 和operator,能滿⾃自定義需求
  28. 建構於 kubernetes上的機器學習平台 28 • Kubeflow [Kubeflow,2017]
 • RiseML [RiseML,2017],
 •

    Microsoft OpenPAI [Microsoft,2016]
 • IBM FfDL [IBM,2018]
 機器學習平台漫談-by gaocegege
  29. 29 What is Kubeflow? • What is kubeflow mession •

    Kubeflow Components • Deploy Kubeflow
  30. 30 Make it Easy for Everyone to Develop, Deploy and

    Manage Portable, Distributed ML on Kubernetes # MESSION
  31. What is Kubeflow? Kubeflow ⽬目標是簡化在 Kubernetes 上運⾏行行 Machine learning (ML)

    的過程, 使之通過更更簡單、可攜帶與可擴展的創建。 • ⽬目標不是在於重建其他服務,⽽而是提供⼀一個最佳開發系統,來來部署到任何集群中,有效確 保ML在集群之間移動性,並輕鬆將任務擴展任何叢集。 • 由於使⽤用 Kubernetes 來來做為基礎,因此只要有 Kubernetes 的地⽅方,都能夠運⾏行行部署 Kubeflow。 Ref: https://www.kubeflow.org/
  32. Simple Potable Scalable 更簡單 可攜帶 可擴展 Data Scientist / ML

    Engineer 能夠專注於模型創建
 部署學習成本較低 保持 Kubernetes Cluster 位於不同平台上可移植性 Kubernetes 上啟⽤用
 ⼯工作負載平衡 # Concept
  33. Kubeflow Momentum! 33 • ~4000 commits • ~200 community contributors

    • ~50 companies contributing, including:
  34. Inference ML Environment Ref: How to Get Started with Kubeflow

    https://medium.com/@amina.alsherif/how-to-get-started-with-kubeflow
  35. Kubernetes managing resources 透過 Kubernetes 和 containers來管理操作系統和硬體資源 Ref: How to

    Get Started with Kubeflow https://medium.com/@amina.alsherif/how-to-get-started-with-kubeflow
  36. Use Kubeflow Ref: How to Get Started with Kubeflow https://medium.com/@amina.alsherif/how-to-get-started-with-kubeflow

    Kubeflow 透過kubeflow在Kubernetes上︐簡化移植和擴展機器學習(ML)工作流程的部署
  37. Kubeflow 負責管理理任務流程 只需要擔心如何透過Kubernetes 調整參數和設定目標︐來進行ML模型訓練 Ref: How to Get Started with

    Kubeflow https://medium.com/@amina.alsherif/how-to-get-started-with-kubeflow
  38. 38 Kubeflow ML Products Serving 節點分散式訓練 Developer 建立模型 Katlib https://speakerdeck.com/masayaaoyama/introduction-to-kubeflow-0-dot-1-and-future-at-cloud-native-meetup-tokyo-number-2

  39. 39 kubeflow v0.5 & 核⼼心組件簡介 Logical components that make up

    Kubeflow
  40. Kubeflow architecture • Kubeflow 整合,它把諸多對機器學習的⽀支持, 例例如 模型訓練、超參參數訓練、模型部署 等, 進⾏行行組合併已容器化的⽅方式進⾏行行部署,提供整 個流程各個系統的⾼高可⽤用及⽅方便便的進⾏行行擴展部

    署了了kubeflow的⽤用⼾戶就可以利利⽤用它進⾏行行不同的 機器學習任務。 • 使⽤用者可根據需求使⽤用 Kubeflow components 組合 40 Libraries and CLIs - Focus on end users Systems - Combine multiple services Low Level APIs / Services (single function) Arena kfctl kubectl katib pipelines notebooks fairing TFJob PyTorch Job Jupyter CR Seldon CR kube bench Metadata Orchestration Pipelines CR Argo Study Job MPI CR Spark Job Model DB TFX Developed By Kubeflow Developed Outside Kubeflow * Not all components shown IAM Scheduling
  41. 41 Libraries and CLIs - focus on end users •

    Kfctl • Kfctl 部署 Kubeflow ,可執⾏行行⼆二進製⽂文件 • Arena • ⽤用⼀一個命令⾏行行⼯工具屏蔽所有底層資源、環境管理理、任務調度和GPU調 度分配的複雜性 • 簡化資料科學家在Kubeflow上運⾏行行 ML / DL 應⽤用 • 監控管理理ML/DL程序⽣生命週期(作業狀狀態、⽇日誌和GPU使⽤用情況) • 利利⽤用 top 命令監控GPU資源的分配和調度 Libraries and CLIs - Focus on end users Arena kfctl kubectl fairing $ arena submit mpijob --name=my-dist \ --image=uber/horovod:0.13.11-tf1.10.0-torch0.4.0-py3.5 \ --data=input:/data --data=output:/training \ --syncMode=git --syncSource=https://github.com/**/benchmarks.git \ --gpus=1 \ --rdma \ --workers=2 \ --tensorboard \ "mpirun python main.py --data_dir=/data --train_dir=/training"
  42. 42 Libraries and CLIs - focus on end users Fairing

    • 是⼀一個 Python package,可以輕鬆地在Kubeflow或Google AI Platform上訓練和部署ML模型 1. Preprocesses the code, converting notebooks or gathering source or data dependencies
 2.Builds and uploads a Docker image
 3.Deploys a job using Kubernetes or Kubeflow primitives Libraries and CLIs - Focus on end users Arena kfctl kubectl fairing Preprocessor Builder Deployer Notebook Function Python Append Docker Cluster Job TfJob Serving Train and Predict
  43. 43 System combine multiple service Systems - Combine multiple services

    katib pipelines notebooks kube bench Model DB TFX • Katib • Katib是⼀一個超參參數訓練系統 • pipelines • 端到端的ML/DL ⼯工作流系統 (流⽔水線) • Kubebench • 通過各種系統和模型與配置輕鬆在Kubeflow 上運⾏行行benchmark jobs • Notebooks • 透過 Jupyter 創建和管理理多使⽤用者操作的 Jupyter -notebooks
  44. 44 System combine multiple service • Katib • Katib是⼀一個超參參數訓練系統 •

    在有效嘗試次數中,盡可能嘗試輸入組合 - Learning Rate - Number of NN Layer - Optimizer
  45. 45 System combine multiple service • Pipelines • 實現⼀一個⼯工作流,稱之為流⽔水線 (pipeline)

    • 其中的每⼀一個節點,組件(component) • 組件在圖中作為⼀一個節點,其會處理理真正 的邏輯,比如數據預處理理、模型訓練等等
 • 可視化所有運⾏行行結果,每個步驟都可以有 輸入和輸出 component ,系統可追蹤所有 結果
  46. 46 Kubeflow operator • 包含分別對應主流的分佈式計算框架 • PyTorch Operator • TF

    Operator • Caffe 2 Operator • MXNet Operator • MPI Operator • .. Low Level APIs / Services (single function) TFJob PyTorch Job Jupyter CR Seldon CR Pipelines CR Argo Study Job MPI CR Spark Job Pic-Ref:基於Kubeflow 的機器學習調度平台落落地實戰-by蘑菇街
  47. 舉例例: Tensoflow GPU 分散式訓練 TensorFlow 分佈式訓練,繁雜的節點配置將成為 ML Developer 新的負擔 47

    tf.train.ClusterSpec({ "worker": [ "worker0.example.com:2222", "worker1.example.com:2222", "worker2.example.com:2222" ], "ps": [ "ps0.example.com:2222", "ps1.example.com:2222" ]})
  48. 48 Kubeflow / tf-operator  worker  (How mamy pods)

     : Scheduler  Kube-batch   args Images Pod  GPU
  49. 49 Kubeflow / tf-operator  PS Pod 

  50. Kubeflow web UIs Kubeflow 附帶很多 UI 服務提供使⽤用 • Argo UI

    • Jupyter Notebooks • TFJobs Dashboard • Katib Dashboard • Pipeline Dashboard 50
  51. Jupyter Hub 建立與管理理互動式 Jupyter notebook ,快速提供多使⽤用者ML開發環境 51

  52. Jupyter Hub 這邊可以輸入Notebook 資源,包含 Image、CPU、Memory、GPU數量量、Workspace Volume、Data Volumes,最後點選Spawn來來完成建立 Server,如下圖所⽰示: 52

  53. TFJob-dashboard 53 由於TFJob 能在執⾏行行期間檢查⽇日誌,因此需要單獨的⽇日誌收集

  54. 補充:Kubeflow GPU Node #確認GPU集群節點,是否可被分配資源
 $ kubectl get nodes "-o=custom- columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"


  55. 55 Try to deploy kubeflow kfctl is the executable binary

    file
  56. Kubernetes Tools

  57. Ksonnet Ksonnet 是⼀一個命令⼯工具,可以更更輕鬆地管理理由多個組件組成的複雜部署,簡化編寫和部署 Kubernetes 配置。 • 對於每個環境,我們可以輕鬆部署相同的組件,但參參數略略有不同,以便便針對特定環境對其進⾏行行⾃自定義 • 透過在 jsonnet

    內定義 Kubernetes manifests,並將內容部署到 Kubernetes 叢集中 • Kubeflow 使⽤用 Ksonnet 部署所需的組件。 57 “A CLI-supported framework for extensible Kubernetes configurations”
  58. Deploy Kubeflow # Download Kfctl $ wget https://github.com/kubeflow/kubeflow/releases/download/v0.5.0/kfctl_v0.5.0_darwin.tar.gz $ tar

    -xvf kfctl_v0.5.0_darwin.tar.gz 
 # The following command is optional, to make kfctl binary easier to use. export PATH=$PATH:<path to kfctl in your kubeflow installation> export KFAPP=<your choice of application directory name> 
 # Default uses IAP
 $ kfctl init ${KFAPP} cd ${KFAPP} kfctl generate all -V kfctl apply all -V 58
  59. kube-batch 是⼀一個運⾏行行在Kubernetes上⾯面向機器學習/⼤大數據/HPC的批量量調排程器(batch scheduler),它⽀支持以 Pod Group為單位進⾏行行資源調度,並⽀支持preempt和priority 59

  60. 60 THANK YOU! Q&A R-Ladies Taipei x Cloud Native Taiwan

    User Group