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

Kubeflow 進行分散式深度學習訓練之作業排程瓶頸

Frank Lin
August 17, 2019

Kubeflow 進行分散式深度學習訓練之作業排程瓶頸

COSCUP 2019

Frank Lin

August 17, 2019
Tweet

More Decks by Frank Lin

Other Decks in Technology

Transcript

  1. 林林義洋
    Frank Lin
    C O S C U P 2019 | SDN x Cloud Native x Golang
    Kubeflow
    進⾏行行分散式深度學習訓練
    之作業排程瓶頸

    View Slide

  2. 2
    About Me
    • Master degree as CSIE, PU.
    • AI Research Center in CGU.
    • COSCUP 2018 Photography Volunteer (Team Leader).
    @yylin1([email protected]) https://yylin.io
    林林義洋 Frank Lin

    View Slide

  3. • DL / ML 分散式系統需求現況
    • 分散式深度學習架構
    • Kubeflow分散式排程瓶頸
    • Kube-batch 排程
    • 後續探討
    3
    Agenda

    View Slide

  4. 4
    DL / ML
    分散式系統需求現況
    要如何解決⼤大規模訓練需求與系統提交的 GPU 作業資源分配?
    1

    View Slide

  5. 5
    • 為獲得⾜足夠的計算資源,更更即時完成⼤大規模 DL 模型訓練
    • 企業開始轉向依賴平⾏行行計算系統 (如 GPU Cluster) 上的分散式訓練技術
    深度學習 - 影響分散式系統
    Single GPU Server Workstation & Server GPU Cluster Centers

    View Slide

  6. 6
    • 平⾏行行分散式計算已被廣泛開發於當前熱⾨門深度學習框架
    • 容器(Container)技術契合深度學習開發,簡易易更更快速提供不同框架環境與擴展需求
    • 容器管理理平台,將容器透過平台進⾏行行 控制、排程、網路路、限制資源等服務
    分散式系統 - 平台框架轉變
    Deep Learning Framework Container
    Management
    Platform

    View Slide

  7. • 分散式系統影響容器 管理理平台(Management Platform) 持續成長
    • ⽬目標 → 協助使⽤用者更更快速透過平台進⾏行行 「ML / DL 開發與訓練」
    • 建構基於 Kubernetes 上 的 機器學習平台(ML Platform)
    基於容器管理理平台 - 機器學習平台興起 7
    Infrastructure
    Cloud / On-premise Server Cluster
    Management Platform
    Kubernetes / Mesos
    ML Platform
    Kubeflow / Mlflow

    View Slide

  8. • 分散式系統影響容器 管理理平台(Management Platform) 持續成長
    • ⽬目標 → 協助使⽤用者更更快速透過平台進⾏行行 「ML / DL 開發與訓練」
    • 建構基於 Kubernetes 上 的 機器學習平台(ML Platform)
    基於容器管理理平台 - 機器學習平台興起 8
    Infrastructure
    Cloud / On-premise Server Cluster
    Management Platform
    Kubernetes / Mesos
    ML Platform
    Kubeflow / Mlflow
    • Kubeflow [Kubeflow, 2017]
    • MLflow [Databricks, 2018]
    • Microsoft OpenPAI [Microsoft, 2016]
    • Seldon [SeldonIO, 2018]
    機器學習平台漫談-by gaocegege

    View Slide

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

    View Slide

  10. 10

    View Slide

  11. 叢集資源分配⾯面臨臨挑戰
    • 眾多⾼高性能伺服器配置昂貴硬體設施 : CPU、Memory 、GPU
    • 如何有效透過平台管理理 作業(Job) 分配,提⾼高整體系統使⽤用率和成本效益
    • ⽬目標: 有效管理理分散式 DL 作業運⾏行行於叢集環境 排程(Scheduler) 策略略研究
    • 預設排程策略略,無法應⽤用於 分散式 DL 作業訓練 與 不同應⽤用場域
    • 減少分散式溝通造成的網路路瓶頸
    • 使作業獲得⾜足夠的計算資源,並更更即時完成⼤大規模 DL 模型訓練
    11

    View Slide

  12. 12
    分散式深度學習架構
    Tensorflow 如何透過 Parameter Server 架構進⾏行行分散式 DL 訓練
    2

    View Slide

  13. 13
    • 分散式發展初期 MPI 、Hadoop、Spark 以及 Parameter Server 架構,都曾廣
    泛應⽤用於機器學習處理理訓練任務
    • 現今針對 DL 分散式框架不斷發展,像開源社區活躍的熱⾨門框架包含:


    • 開發者在透過 Parameter Server 分散式架構下的⽀支持,設置⼀一次性作業(Job)
    來來運⾏行行分散式 DL 任務(Task) 運⾏行行
    DL 框架分散式發展

    View Slide

  14. 14
    Parameter Server (PS) :
    • 負責維護⼀一個完整的全域共享參參數(Global
    Parameters),並將當前值(Value) 發送給每
    個 Worker 進⾏行行平⾏行行訓練
    Worker :
    • 獲得從 PS 發送的域值(Value)來來計算每次迭
    代(iteration)訓練
    最 後 將 W o r k e r 訓 練 過 後 所 獲 得 新 的 梯 度
    (Gradients),發送到 PS 並更更新參參數,即完成同步
    更更新參參數的訓練流程
    Parmeter Server Architecture
    Ref: Large Scale Distributed Deep Networks - NIPS Proceedings
    Parmeter Server Architecture

    View Slide

  15. 15
    參參數更更新可以在 Worker 之間以 非同步(Aasynchronously) 完成,因此 Worker
    可以在整個訓練過程中彼此獨立運⾏行行,並在⼤大規模訓練中獲得更更好的可擴展性
    Parmeter Server Architecture

    View Slide

  16. 16
    Parameter Server Architecture

    View Slide

  17. Tensorflow 分散式訓練 17
    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"
    ]})
    進⾏行行分佈式訓練配置過程,繁瑣的節點配置將成為 ML Developer 的負擔

    View Slide

  18. 18
    預設排程對於分散式 DL 訓練排程存在問題,影響整體資源的利利⽤用率
    Kubeflow
    分散式排程瓶頸
    3

    View Slide

  19. What is Kubeflow?
    Kubeflow 是⼀一項基於 Kubernetes上 ML Workflow 開源專案。主要概念念是簡
    化運⾏行行部署並整合 ML 相關應⽤用 - 從原始資料到⽣生產訓練服務需求,提供⼀一整
    套流⽔水線整合與多項不同應⽤用組件的平台。
    • ⽬目標不是在於重建其他服務,⽽而是提供⼀一個最佳開發系統,來來部署到任何集群中,有效確
    保ML 在集群之間移動性,並輕鬆將任務擴展任何叢集
    • 由於使⽤用 Kubernetes 來來做為基礎,因此只要有 Kubernetes 的地⽅方,都能夠運⾏行行部署
    Kubeflow

    View Slide

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

    View Slide

  21. Kubeflow 於不同平台環境
    只需要擔⼼心如何透過 YAML File 調整參參數和設定⽬目標以進⾏行行 ML 模型訓練
    Ref: How to Get Started with Kubeflow

    View Slide

  22. 22
    Ref: Kubeflow — a machine learning toolkit for Kubernetes

    View Slide

  23. 23
    Kubeflow Operator
    Ref: KubeCon - Shanghai - Deep Learning

    View Slide

  24. 24
    Kubernetes Default Scheduler

    View Slide

  25. 25
    • 分散式 DL 訓練作業過程,具有很強的任務依賴性
    • 預設 k8s 排程處於 Pod Level,並且它傾向於在所有節點上均勻分佈 Pod資源
    • 經由網路路跨多節點更更新數據,可能會妨礙分散式訓練的性能, 且並不提供任何
    資源分配優化或⼯工作⽣生命週期管理理能⼒力力
    Default Scheduler 對於分散式 DL 瓶頸

    View Slide

  26. 26
    協助增強預設排程不⾜足對於,分散式訓練作業之排程策略略
    kube-batch
    批量量排程
    4

    View Slide

  27. 27
    • kube-batch是運⾏行行在Kubernetes上以機器學習、⼤大數據、HPC的批量量排程,它
    ⽀支持preempt、priority、nodeorder 等相關 Predicates 排程策略略
    • 提供針對不同情境與條件下⾃自定義排程控制,滿⾜足於分散式DL作業進⾏行行的Batch
    任務排程的需求
    kube-batch scheduler ( Kubernetes SIGs)

    View Slide

  28. Cache
    Backfill
    Reclaim
    Preempt
    Allocate
    Actions
    Kube-batch
    Plugins
    drf
    gang
    predict
    priority
    nodeorder
    proportion
    Session
    jobOrderFnc
    queueOrderFuns
    Open/Close Session

    Jobs
    Nodes

    Queues
    Register
    Allocate
    Snapshot
    Bind/Evict
    Bind/Evict
    Watch: Pod, Node,
    Queue, Pod Group
    28
    kube-batch Architecture
    Pic: Kube-batch 在vivo AI 計算平台的應⽤用
    API Server Github: Backfill and Starvation Prevention
    實現排程機制
    (mechanism)
    實現排程策略略
    (policy)

    View Slide

  29. 29
    Queue
    隊列列機制,同個隊列列的任務會依次運⾏行行
    不同隊列列直接可以設置優先級,優先級
    ⾼高的隊列列中的任務會優先得到調度
    Gang scheduling
    依據總作業資源,同時能運⾏行行所有
    「All 任務(Task)」實現所有任務群組
    Action & Plugin
    kube-batch 增強配置排程需求
    actions: "reclaim, allocate, backfill, preempt"
    tiers:
    - plugins:
    - name: priority
    - name: gang
    - name: conformance
    - plugins:
    - name: drf
    - name: predicates
    arguments:
    predicate.MemoryPressureEnable: true
    predicate.DiskPressureEnable: true
    predicate.PIDPressureEnable: true
    - name: proportion
    - name: nodeorder
    @Jack Lin - How to schedule a job with gang-scheduling

    View Slide

  30. 30
    • 分散式訓練作業透過⾃自定義作業描述⽂文件(Job Description YAML File) 來來規範
    • 在 YAML 中描述 分散式訓練作業,包含任務數量量、參參數配置資源限制(例例如: GPU執⾏行行數量量)
    分散式DL作業運⾏行行系統流程

    View Slide

  31. 31
    apiVersion: "kubeflow.org/v1beta1"
    kind: "TFJob"
    metadata:
    name: "gang-scheduling"
    namespace: "kubeflow"
    spec:
    tfReplicaSpecs:
    Worker:
    replicas: 1
    template:
    metadata:
    annotations:
    scheduling.k8s.io/group-name: "gang-scheduling"
    spec:
    schedulerName: kube-batch
    nodeSelector:
    node: "p100"
    containers:
    - args:
    - python
    - tf_cnn_benchmarks.py
    - --batch_size=32
    - --model=inception3
    - --variable_update=parameter_server
    - --flush_stdout=true
    - --num_gpus=1
    - --local_parameter_device=cpu
    - --device=gpu
    - --data_format=NHWC
    - name: tensorflow
    image: yylin1/tf-benchmarks-gpu:latest
    resources:
    limits:
    nvidia.com/gpu: 2
    workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
    restartPolicy: Never
    PS:
    replicas: 1
    template:
    metadata:
    annotations:
    scheduling.k8s.io/group-name: "gang-scheduling"
    spec:
    schedulerName: kube-batch
    nodeSelector:
    node: “p100"
    containers:
    - args:
    - python
    - tf_cnn_benchmarks.py
    - --batch_size=32
    - --model=inception3
    - --variable_update=parameter_server
    - --flush_stdout=true
    - --num_gpus=1
    - --local_parameter_device=cpu
    - --device=gpu
    - --data_format=NHWC
    - name: tensorflow
    image: yylin1/tf-benchmarks-cpu:latest
    resources:
    limits:
    cpu: 1
    workingDir: /opt/tf-benchmarks/scripts/tf_cnn_benchmarks
    restartPolicy: Never
    • Gang Scheduler
    • Tack placement
    • Job Proirity

    View Slide

  32. 32
    客製化資源(CustomResourceDefinition)來來透過擴展排成策略略
    後續探討
    5

    View Slide

  33. • 排程對於不同場域與實驗案例例策略略,不具有較彈性的機制
    • 對於 Kubernetes 批量量處理理的排程框架 volcano,實現功能擴展與
    導入更更多不同的策略略⽅方法,能更更彈性的透過框架定義需求
    • Volcano 以CRD的⽅方式提供通⽤用靈活的 Job 抽象
    • Volcano Job (batch.volcano.sh/jobs)
    • Controller 負責跟 Scheduler 配合,管理理Job的整個⽣生命週期
    33
    排程彈性與擴展

    View Slide

  34. 34
    Thanks!
    You can find me at : [email protected]
    Any questions?

    View Slide