$30 off During Our Annual Pro Sale. View Details »

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

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

R-Ladies Taipei x Cloud Native Taiwan User Group

Frank Lin

April 29, 2019
Tweet

More Decks by Frank Lin

Other Decks in Technology

Transcript

  1. Kubeflow
    對於機器學習平台的願景
    林林義洋
    The Machine Learning Toolkit for Kubernetes
    @yylin1 R-Ladies Taipei x Cloud Native Taiwan User Group

    View Slide

  2. About Me
    • Master degree as CSIE, PU.
    • AI Research Center in CGU.
    2
    @yylin1([email protected])
    https://medium.com/@frank.yylin

    View Slide

  3. Agenda
    • 談論機器學習平台
    • 理解 Kubernetes 容器平台
    • Kubeflow 架構與組件剖析
    • Kubeflow 部署使用案例
    3

    View Slide

  4. 4
    A Platform for ML
    機器學習平台?
    當我們在談論機器學習平台時,我們在談論什什麼?

    View Slide

  5. Perception: ML Products are mostly about ML
    5

    View Slide

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

    View Slide

  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

    View Slide

  8. 實際情境
    8
    Ref: 當我們在談論機器學習平台時,我們在談論什什麼- by gaocegege

    View Slide

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

    View Slide

  10. 如果你是⼀一個演算法⼯工程師
    10
    機器A 的環境 TensorFlow 只⽀支援CPU
    機器B 的環境 TensorFlow 的版本是1.10
    機器C 的環境只安裝 PyTorch
    是公司另⼀一位演算法科學家 莉莎

    在做資料分析 LSTM 時做實驗⽤用

    雖然 TensorFlow 已經發布2.0 版本,但⼩小建開發物件偵測習慣使⽤用經典的1.4 版本
    但他登錄到了了機器上,發現事情並不簡單

    View Slide

  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 衝突

    View Slide

  12. 如果你有⼀一個機器學習平台
    12
    • 幾週後,Infra團隊 利利⽤用開源項⽬目Kubeflow為演算法⼯工程師和資料科學家
    們搭建了了⼀一個⿇麻雀雖⼩小五臟俱全的機器學習平台
    • ⼩小建透過已經團隊打包好的 TensorFlow v1.4 的 Docker Images,⽤用平台
    發起了了⼀一次分散式訓練。從訓練中的服務發現,異異常處理理等都由平台⾃自動
    完成,包含⽀支持從準備數據到模型部署的⼀一整套機器學習端到端的過程
    Images

    View Slide

  13. 機器學習平台要解決問題
    13
    • 「系統環境問題」等應該由 Infra 團隊來來解決的問題
    • 這些問題已經都交由平台來來⾃自動化處理理,他可以專注於「模型的開發」
    • TensorFlow、PyTorch 等這些框架改變的是機器學習的編譯規範⽅方式
    - 平台要改變的是機器學習的「開發與部署」流程

    • 機器學習⼯工作流的構建 - 流⽔水線
    - 使⽤用者透過指定使⽤用的
    - 資源數量量 (節點與GPU)
    - 分佈式模型(AllReduce、ParameterServer等)
    - 分佈式配置(ParameterServer數量量等)直接在平台上進⾏行行模型訓練

    View Slide

  14. Incubator by Foundation
    雲端原⽣生運算基⾦金金會(Cloud Native Computing Foundation,CNCF)的願景是建立並
    推動採⽤用為現代分散式系統環境,來來優化的新運算模式,該基⾦金金會也提供了了相關專
    案的⼀一致性認證計劃,以此推動穩定版 Kubernetes 等其他專案的部署與應⽤用。

    View Slide

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

    View Slide

  16. 16

    View Slide

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

    View Slide

  18. 老⽅方式: Bare-metal Machines
    kernel
    libs
    app
    app app
    app
    • 沒有隔離
    • 沒有命名空間
    • 共⽤用常⾒見見的函式庫
    • ⾼高耦合的應⽤用程式與作業系統
    18

    View Slide

  19. • 隔離性⾼高
    • 效能會損失
    • 同樣有⾼高耦合的應⽤用程式與作業系統
    • 多虛擬機管理理效率差
    • 啟動時間慢
    • 系統映像檔容量量較肥
    • 粒度粗
    老⽅方式: Virtual Machines
    19
    app
    libs
    kernel
    libs
    app app
    kernel
    app
    libs
    libs
    kernel
    kernel
    作業系統層級

    View Slide

  20. • 效能佳
    • 透過 namespace 隔離網路、UID 等
    • 與 OS Kernel 高耦合
    • 啟動時間快
    • 應用映像檔容量較小(小至 10 MB)︐攜帶性佳
    • 粒度細︐利用密度提升
    新⽅方式: Containers(OS-Level Virtualization)
    libs
    app
    kernel
    libs
    app
    libs
    app
    libs
    app
    20
    應⽤用程式層級

    View Slide

  21. • 取虛擬機與容器之間的特性平衡
    • 輕量量的虛擬機環境
    新⽅方式: Hypervisor-based Containers
    21
    https://katacontainers.io/

    View Slide

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

    View Slide

  23. OCI(The Open Container Initiative)是由多家頂尖 IT 公司共同組成的組織,其⽬目
    標是制定 Container 的標準規範,以利利 Container 發展。該標準讓開發者打包、
    簽署應⽤用程式,並且可以⾃自由選⽤用不同的 Container runtime 環境外,在近⽇日則
    更更⼀一步延伸。⽽而⽬目前基於 OCI 標準 runtime 的 runC 已經是許多容器引擎的基
    礎。
    Open Container Initiative (OCI)
    23

    View Slide

  24. Problems with standalone Docker
    在單節點的主機上執行一或多組 Continer 應用程式︐將面臨單點故障問題
    (SPOF)與擴展限制問題(Limited scalability)。
    24

    View Slide

  25. Kubernetes
    Kubernetes 是 Google 開源的容器(Container)分散式管理理系統,是 Google Borg
    ⼗十幾年年以來來⼤大規模應⽤用容器技術的經驗累積和昇華的⼀一個重要成果,是建於 OCI
    Runtime 之上的容器叢集排程系統,簡稱為 k8s( )。
    25
    Stars
    51850+
    Commits
    77692+
    Contributors
    2112+
    “Kubernetes is becoming the Linux

    View Slide

  26. Kubernetes 特性概觀
    Kubernetes 管理理跨區域與主機的容器節點,提供基本部署、維運、管理理,以及
    執⾏行行各項應⽤用程式,並具備多種特性。
    26
    資源監控
    Monitoring
    滾動升級
    Rolling-update
    ⾼高可靠性
    High-availability
    ⾃自我修復
    Self-healing
    雲端⽀支援
    Cloud Provider
    持久性儲存
    Persistent Volumes
    組態檔案
    Configmap
    安全性
    Secret

    View Slide

  27. Why choose kubernetes ?
    27
    ⽣生產環境中,我們將可能有多台機器需要被編配設置,且環境可能是複雜的,需要網路路、運算與儲存需求
    • 適合⼤大規模管理理與擴展,⾃自動化部屬
    • 透過 Kubernetes DNS 機制來來解析伺服器位址
    • 透過 Replication Controller 來來管理理故障重啟問題
    - k8s Pods for Training
    - k8s Deployments for Serving
    • Kubernetes 提供 Monitoring 與 Logging 等功能
    • 能夠⽀支援使⽤用 CPU 與 GPU 排程來來指定節點
    • 可擴展性好,⽀支持CRD 和operator,能滿⾃自定義需求

    View Slide

  28. 建構於 kubernetes上的機器學習平台
    28
    • Kubeflow [Kubeflow,2017]

    • RiseML [RiseML,2017],

    • Microsoft OpenPAI [Microsoft,2016]

    • IBM FfDL [IBM,2018]

    機器學習平台漫談-by gaocegege

    View Slide

  29. 29
    What is Kubeflow?
    • What is kubeflow mession
    • Kubeflow Components
    • Deploy Kubeflow

    View Slide

  30. 30
    Make it Easy for Everyone
    to Develop, Deploy and
    Manage Portable, Distributed
    ML on Kubernetes
    # MESSION

    View Slide

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

    View Slide

  32. Simple Potable Scalable
    更簡單 可攜帶 可擴展
    Data Scientist / ML Engineer
    能夠專注於模型創建

    部署學習成本較低
    保持 Kubernetes Cluster
    位於不同平台上可移植性
    Kubernetes 上啟⽤用

    ⼯工作負載平衡
    # Concept

    View Slide

  33. Kubeflow Momentum!
    33
    ● ~4000 commits
    ● ~200 community contributors
    ● ~50 companies contributing,
    including:

    View Slide

  34. Inference ML Environment
    Ref: How to Get Started with Kubeflow
    https://medium.com/@amina.alsherif/how-to-get-started-with-kubeflow

    View Slide

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

    View Slide

  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)工作流程的部署

    View Slide

  37. Kubeflow 負責管理理任務流程
    只需要擔心如何透過Kubernetes 調整參數和設定目標︐來進行ML模型訓練
    Ref: How to Get Started with Kubeflow
    https://medium.com/@amina.alsherif/how-to-get-started-with-kubeflow

    View Slide

  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

    View Slide

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

    View Slide

  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

    View Slide

  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"

    View Slide

  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

    View Slide

  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

    View Slide

  44. 44
    System combine multiple service
    • Katib
    • Katib是⼀一個超參參數訓練系統
    • 在有效嘗試次數中,盡可能嘗試輸入組合
    - Learning Rate
    - Number of NN Layer
    - Optimizer

    View Slide

  45. 45
    System combine multiple service
    • Pipelines
    • 實現⼀一個⼯工作流,稱之為流⽔水線 (pipeline)
    • 其中的每⼀一個節點,組件(component)
    • 組件在圖中作為⼀一個節點,其會處理理真正
    的邏輯,比如數據預處理理、模型訓練等等

    • 可視化所有運⾏行行結果,每個步驟都可以有
    輸入和輸出 component ,系統可追蹤所有
    結果

    View Slide

  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蘑菇街

    View Slide

  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"
    ]})

    View Slide

  48. 48
    Kubeflow / tf-operator
    worker
    (How mamy pods)
    : Scheduler

    Kube-batch
    args
    Images
    Pod GPU

    View Slide

  49. 49
    Kubeflow / tf-operator
    PS
    Pod

    View Slide

  50. Kubeflow web UIs
    Kubeflow 附帶很多 UI 服務提供使⽤用
    • Argo UI
    • Jupyter Notebooks
    • TFJobs Dashboard
    • Katib Dashboard
    • Pipeline Dashboard
    50

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  54. 補充:Kubeflow GPU Node
    #確認GPU集群節點,是否可被分配資源

    $ kubectl get nodes "-o=custom-
    columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"


    View Slide

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

    View Slide

  56. Kubernetes Tools

    View Slide

  57. Ksonnet
    Ksonnet 是⼀一個命令⼯工具,可以更更輕鬆地管理理由多個組件組成的複雜部署,簡化編寫和部署
    Kubernetes 配置。
    • 對於每個環境,我們可以輕鬆部署相同的組件,但參參數略略有不同,以便便針對特定環境對其進⾏行行⾃自定義
    • 透過在 jsonnet 內定義 Kubernetes manifests,並將內容部署到 Kubernetes 叢集中
    • Kubeflow 使⽤用 Ksonnet 部署所需的組件。
    57
    “A CLI-supported framework for extensible
    Kubernetes configurations”

    View Slide

  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:
    export KFAPP=

    # Default uses IAP

    $ kfctl init ${KFAPP}
    cd ${KFAPP}
    kfctl generate all -V
    kfctl apply all -V 58

    View Slide

  59. kube-batch
    是⼀一個運⾏行行在Kubernetes上⾯面向機器學習/⼤大數據/HPC的批量量調排程器(batch scheduler),它⽀支持以
    Pod Group為單位進⾏行行資源調度,並⽀支持preempt和priority
    59

    View Slide

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

    View Slide