O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / Cloud Native Days Tokyo 2020

985 visualizações

Publicada em

Kubernetesにおける機械学習(バッチ)ジョブのスケジューリングについては世界中で様々な取り組みがなされており、OSSも複数公開されています。Kubernetes本体においてもsig-schedulingにおいて、kube-scheduler(デフォルトスケジューラ)の柔軟性・拡張性を高めるべく開発が推進されています。本公演ではそうした取組やOSSを紹介すると共に、Kubernetesクラスタにおいて機械学習ジョブをうまくスケジューリングするために考慮すべきポイント、それらがどのように実現されるかを解説します。

Publicada em: Software
  • Seja o primeiro a comentar

How to Schedule Machine Learning Workloads Nicely In Kubernetes #CNDT2020 / Cloud Native Days Tokyo 2020

  1. 1. How to Schedule Machine Learning Workloads Nicely In Kubernetes Shingo Omura, Preferred Networks, Inc. Cloud Native Days Tokyo 2020 (Day2) 09/09 15:00-15:40 - Track F
  2. 2. 自己紹介 - 大村伸吾 (Shingo Omura) ● エンジニア, Preferred Networks, Inc. ○ 社内向けGPUクラスタの開発運用 ○ kubernetes sig-scheduling で活動中 ● @everpeace (twitter) ● shingo.omura (facebook) 2
  3. 3. PFN における機械学習クラスタ関連の過去のスライド 3 KeyNote at July Tech Festa 2018 SlideShare Kubernetes Meetup Tokyo #13 SlideShare
  4. 4. Outline ● PFNのクラスタ概要 ● PFNにおける典型的なML Workload ● ML Workloadにおける典型的なスケジューラへの要求 ● KubernetesにおけるBatch Schedulerの現状 ● KubernetesにおけるScheduler Deployment戦略 ● kube-shedulerの動作概要と拡張方式 ● PFNにおける kube-scheduler の活用&拡張事例 ● まとめ 4
  5. 5. 5 PFN の クラスタ概要
  6. 6. 2017年 Tesla P100 PCIe x 8 10GbE x 2 InfiniBand FDR x 2 Total 1024 GPUs 19.1 PFLOPS MN-1a Server Spec MN-3 Series 6 PFN の クラスタ MN-1 Series MN-2 Series 2020年 MN-Core x 4 100GbE x 2 MN-3a Server Spec Total 192 MN-Cores 4.7 PFLOPS (21.11 GFLOPS/W) MN-Core DirectConnect Icon pack by Icons8 - https://icons8.com NVIDIA GPUなどの最新技術を採用した プライベート・スーパーコンピュータ MN-2 を自社構築し、 7月に稼働 Preferred Networksの深層学習用スーパーコンピュータ MN-3がスーパーコンピュータ省電力性能ランキング Green500で世界1位を獲得 世界1位!! 2019年 Tesla V100 SXM2 x 8 100GbE x 4 MN-2a Server Spec Total 1024 GPUs 128 PFLOPS RoCEv2 with SR-IOV 2018年 Tesla V100 PCIe x 8 10GbE x 2 InfiniBand EDR x 2 MN-1b Server Spec Total 1536 GPUs 57.3 PFLOPS
  7. 7. PFNにおける典型的な ML Workloadたち 7
  8. 8. 8 PFN の 研究環境 多種多様なデータ多種多様な研究 大量の機械学習ジョブ オンプレのGPUクラスター 自社開発した技術 Icon pack by Icons8 - https://icons8.com 多くの研究者
  9. 9. PFNにおける典型的なワークロード 9 All-Reduce スタイル 分散深層学習ジョブ (並列)ジョブ ワークフロー 分散(深層)強化学習ジョブ(*) Environments + Actors Distributed Learners (*)[2007.08082] Distributed Reinforcement Learning of Targeted Grasping with Active Vision for Mobile Manipulators
  10. 10. 本日あつかうトピック 10 制御 配置 再配置 Podを いつどのNodeに 配置/再配置するか CRD/Controller を使って 複雑なジョブ構成/実行を 制御する 今日は こちら (Schedule)
  11. 11. (PFNにおける) ML Workloadにおける典型的な スケジューラへの要求 11
  12. 12. 12 PFN での Scheduler(Podへの配置/再配置) への要求 ● High Resource Utilization (Packing / Defrag) ● Priority Scheduling / Preemption ● Gang-Scheduling (a.k.a. Co-Scheduling) ● Network Topology Aware Scheduling (a.k.a. Zone Aware Scheduling) ● Hardware Topology Aware Scheduling ● Soft Quota (a.k.a. Throttling) ● Flexible Fair Schduling ● GPU Driver Version/GPU Model pinning
  13. 13. High Utilization Rate ● Packing: できるだけ効率よくPodをNodeに詰めたい ○ Podのリソース要求は多次元ベクトル ■ 1次元でもNP-Hardな組合せ最適化問題(Bin Packing) ● Defrag: フラグメンテーションを除去したい ○ Podの実行時間は不定なので時間が建つと穴が開く 13 Packing
  14. 14. High Utilization Rate ● Packing: できるだけ効率よくPodをNodeに詰めたい ○ Podのリソース要求は多次元ベクトル ■ 1次元でもNP-Hardな組合せ最適化問題(Bin Packing) ● Defrag: フラグメンテーションを除去したい ○ Podの実行時間は不定なので時間が建つと穴が開く 14 デフラグ
  15. 15. Priority Scheduling / Preemption ● たとえクラスタが混んでいても、重要なジョブは動かしたい ○ 重要でないPodを止め(Preemptし)て重要なPodを動かしたい 15Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY プリエンプト される (犠牲になる)
  16. 16. Priority Scheduling / Preemption ● たとえクラスタが混んでいても、重要なジョブは動かしたい ○ 重要でないPodを止め(Preemptし)て重要なPodを動かしたい 16Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY 他のコンテナを プリエンプト して実行
  17. 17. Gang-Scheduling (a.k.a. Co-Scheduling) ● 複数のPodを一度に配置したい ○ All-Reduceの分散深層学習は全pod揃わないと計算開始できない ○ 2つの Gang を1 Podずつ配置すると容易にdeadlockしてしまうため 17Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY Job A Job B どちらも サイズ6
  18. 18. Network Topology Aware Scheduling (a.k.a. Zone Aware Scheduling) ● 分散深層学習はpod間のネットワークが早い方が学習も早い ● 特定のゾーン/どこか単一(unique)なゾーンに配置したい ○ ゾーン = Network的に近いノードの塊 例: Availability Zone, Placement Group 18 Zone A Node-A-1 Node-A-2 Node-A-3 Node-A-4 Zone B Node-B-1 Node-B-2 Node-B-3 Node-B-4 Zone Bがいいです いいです   Zoneに閉じるならどこでも
  19. 19. Hardware Topology Aware Scheduling ● サーバ内のハードウェアにもトポロジがある ● うまく割り当てないとボトルネックになりうる 19Icon pack by Icons8 - https://icons8.com NUMA NodeNUMA Node GPU NIC MEM CPU CPU MEM NIC GPU
  20. 20. Hardware Topology Aware Scheduling ● サーバ内のハードウェアにもトポロジがある ● うまく割り当てないとボトルネックになりうる 20Icon pack by Icons8 - https://icons8.com NUMA NodeNUMA Node GPU NIC MEM CPU CPU MEM NIC GPUNVLink等のGPU間 Interconnectが 利用可能場合あり NUMA Nodeを 超えるデータ転送は ボトルネックになりがち
  21. 21. 使いすぎなので Scheduleしません Soft Quota (a.k.a. Throttling) ● Kubernetes の Quota はv1.19時点ではHard Quota ○ Hard Quota 超過したらPod作成エラーになる ● 利用上限はかけたいけどPodは投げておきたい ○ Podは作れるけどスケジュールされないようにしたい 21 まだ使ってOK Gauge by www.mindgraphy.com from the Noun Project Namespace A Namespace B
  22. 22. “Flexible” Fair Schduling ● 複数で利用するので、公平性(Fairness) は大事 ○ ユーザ単位、プロジェクト単位 ● 様々な公平性の例 ○ First Come First Served: 早いもの勝ち(ある意味公平?) ○ Dominant Resource Fairness (DRF): ■ Max-Min Fairness の一種 ■ Hadoop Yarn でも実装されてている ■ Dominant Resource Share が均等なことを「公平」と見る ● Dominant Resouce Share = 各リソースの消費割合の最大値 = MAX(CPU share, Memory share, GPU share) ○ DRF over time ■ 次元を リソース量・時間 に拡張 22 厄介なことに ビジネス的にはUnfair な状態が 望ましいことがある
  23. 23. GPU Driver Version/GPU Model pinning ● GPUモデル、メモリ量、ドライババージョン等を固定したい 23gpu by Misha Petrishchev from the Noun Project GPUの搭載メモリ 32G 16G GPUモデル V100 P100 GPU Driverバージョン CUDA 9 CUDA 10
  24. 24. 24 PFN での Scheduler(Podへの配置/再配置) への要求 ● High Resource Utilization (Packing / Defrag) ● Priority Scheduling / Preemption ● Gang-Scheduling (a.k.a. Co-Scheduling) ● Network Topology Aware Scheduling (a.k.a. Zone Aware Scheduling) ● Hardware Topology Aware Scheduling ● Soft Quota (a.k.a. Throttling) ● Flexible Fair Schduling ● GPU Driver Version/GPU Model pinning
  25. 25. OSS Batch Scheduler on Kubernetes? 25
  26. 26. 26 Batch Scheduler はあまり多くないのが現状 ● Volcano ○ CNCF Sandbox Project (since May 2020) ○ sig-schedulingで開発中のkube-batch(*)をベースとするcustom schedulerを コアとするバッチシステム ○ Queue, Fair scheduilng(Dominant Resource Fairnessベース), Gang scheduling, priority/preemption等をサポート ○ Kubeflow でも gang scheduling用のscheduerとしてintegrateされている ■ 注意: 高負荷な環境で gangが部分停止するとdeadlockが起きると指摘あり ● kube-scheduler ○ kubernetesのdefaultスケジューラ ○ 様々なpre-definedなポリシーが設定可能 ○ カスタム拡張がプラグインできるようになっている ■ 最近特に拡張性を高める機能開発が活発に行われている ○ Batch専用ではないが拡張することである程度対応可能 (*)現在あまり活発に開発されていないので注意
  27. 27. Kubernetesにおける Scheduler Deployment 戦略 27
  28. 28. Kubernetes における Scheduler Deployment 戦略 28 kube-scheduler custom scheduler kube-scheduler + extensions multiple schedulers Podの spec.schedulerName でschedulerを選択
  29. 29. kube-scheduler v.s. Custom Scheduler 😀 defaultなので最新機能/仕様に追従できる 😀 kube-schedulerの機能を保持したまま拡張可能 ○ node selector, taint/toleration, affinity/anti-affinity, preemption policy等 😕 kube-schedulerの基本動作(後述)からは逸脱できない 29 kube-scheduler (+ extensions) custom scheduler 😀 柔軟な実装が可能 😕 kube-schedulerの仕様の再実装が必要 ○ volcano は conformance test(e2e) は通ったことがある ○ 重要な機能はkube-scheduler内部で実装されている 😕 kubernetes側で新たな仕様が追加されると追従が必要
  30. 30. How About Multiple Schedulers?? 😀 schedule ポリシーを分割できる(例:サービス、バッチ用) ○ もし分けるなら対象node poolを混ぜないのがお勧め 😕 複数スケジューラにおける注意点 ○ 排他処理しないと高負荷時はNodeがあふれる ○ ポリシーのconflictが起きると厄介 ■ サービス→ spread, バッチ → packing ○ kube-scheduler の Preemption は cross-scheduler preemptionなので注意が必要 ■ 例: custom schedulerが低優先度podを置いても置いても kube-schedulerでpreemptionし続ける 30 multiple schedulers
  31. 31. PFNのGPUクラスタでの現時点での判断 ● 常にバージョンアップされ続けるkubernetesでは kube-schedulerの拡張性を最大限活用する ● kube-schedulerの拡張性が足りなければupstreamへ貢献 ○ Co-Scheduling Plugin ■ kubernetes/enhancements#1463, kubernetes-sigs/scheduler-plugins#4 ○ PostFilter(Preemption) ExtetionPoint (since v1.19): ■ kubernetes/kubernetes#85871, #90025, #91038, #93534 ● Volcanoもwatchを継続する 31 kube-scheduler + extensions
  32. 32. kube-scheduler 〜動作概要と拡張方法〜 32
  33. 33. 33 kube-scheduler の 動作概要 出典: そのコンテナ、もっと「賢く」置けますよ? #CNDT2019 / CloudNative Days Tokyo 2019 Special Thanks 🎉 @y_taka_23 ① Node未定Podを キューに格納 ② 1個ずつ取り 出して配置先 Nodeを決定 ③ Pod毎に並行で Nodeを登録 ※ ①②③のテキストは講演者による加筆
  34. 34. 34 kube-scheduler の 動作概要 出典: そのコンテナ、もっと「賢く」置けますよ? #CNDT2019 / CloudNative Days Tokyo 2019 Special Thanks 🎉 @y_taka_23 通常時 ● Filter, Scoreは色々提供されている ● 拡張によってカスタム関数を定義可能 Preemption時 ● Schedulerに選ばれたVictimを調整可能(現実 的にはあまり使い所がない ) ● v1.19で拡張可能に(#91038)!!! ※ 吹き出しは講演者による加筆
  35. 35. kube-schedulerの拡張方法は 2 種類 • Scheduler Extender – Webhook による拡張 – 指定したendpointとJSONをやり取り – 拡張点: Filter, Score, Preempt, Bind – 😕 パフォーマンス注意、拡張が限定的、内部キャッシュ効かない • Scheduling Framework - Kubernetes – Extenderよりも格段に柔軟な拡張ができるようになった • Schedulerの内部処理を細かくHookできるようになった – ただしコンパイルしないといけない(例: kubernetes-sigs/scheduler-plugins) – Schedulerの内部キャッシュにアクセス可能 – Schedulerコードが再利用しやすい 35
  36. 36. Scheduler Extender 36 出典: 明日、業務で使える Scheduler Extender #cloudnativejp / Cloud Native Meetup Tokyo 7th Special Thanks 🎉 @y_taka_23
  37. 37. Scheduling Framework 37 Filter失敗時の処理 since v1.19 (preemptionはここで実装可能) Scheduler 内部でNodeが確定し たことをPluginに通知 queueの 順序 Bind処理をWait させることができる
  38. 38. PFNにおける kube-scheduler の活用&拡張例 38
  39. 39. 39 (revisited) PFNでの Scheduler への要求 ● High Resource Utilization (Packing/Defrag) ● Priority Scheduling / Preemption ● Gang-Scheduling (a.k.a. Co-Scheduling) ● Network Topology Aware Scheduling (a.k.a. Zone Aware Scheduling) ● Hardware Topology Aware Scheduling ● Soft Quota (a.k.a. Throttling) ● Flexible Fair Schduling ● GPU Driver Version/GPU Model pinning
  40. 40. High Utilization Rate ● Packing: できるだけ効率よくPodをNodeに詰めたい ✅ ScorePlugin で datacenter topology を考慮したカスタムルール を実装して Packing している ● 通常だとNodeResourcesMostAllocated Scoreで🆗👌 ○ cpu, memory, gpu等の割当率のweighted sum(重みカスタム可) ● Defrag: フラグメンテーションを除去したい ❎ 現在は行えていない ● 今後の方向性 ■ descheduler を利用する ● schedulerのように実装をPluginできないため要改修 ■ PostFilter Plugin で Preemptionしつつdefragを試す 40
  41. 41. Priority Scheduling / Preemption ✅ PFNのGPUクラスタのPriority設定(一部) 41 Grand-Challenge ● クラスタ全系を使う等、超大規模実験用(通常利用不可) High ● 高優先度(通常preemptionされないとして利用可能) ● Soft Quota による利用リソース量制限あり(申請により緩和可能) ● non-GPU な High Pod は GPUノードにスケジュールされないように NodeにLabel & Admission WebhookでPodにnode selector付与 Low ● 通常のワークロード用(highにpreemptionされる前提) ● Soft Quotaなし Low-Cpu ● non-GPU Pod 用の low (Admission webhookで自動変換) ○ GPU 需要が低いときにGPUノードのCPUが利用可能 ○ Low以上のPriorityのPodにpreemptionされるので注意
  42. 42. ✅ Scheduling Frameworkを使って独自に実装 ○ Sort, PreFilter, Permit を利用して実装 ○ kubernetes-sigs/scheduler-plugins にも co-scheduling plugin あり Gang-Scheduling (a.k.a. Co-Scheduling) 42 kind: Pod metadata: annotations: gang-name: "job-a" gang-size: "32" gang-schedule-timeout: "3m" PodのannotationでGangへの所属を定義
  43. 43. Gang-Scheduling (a.k.a. Co-Scheduling) 43 Gangが 続くようにソー ト Size分揃ってなけ ればここでReject Gang全PodがPermit Pluginに 到達するまでWait (timeoutで全部reject)
  44. 44. Network Topology Aware Scheduling (a.k.a. Zone Aware Scheduling) ● 特定ゾーン: Nodeにzoneラベルを付与して、node selector を使う ● Uniqueゾーン (Gangのみ対応) ○ pod Affinity + Scheduling Framework(PreFilter, Filter)で実現 ■ Admission webhookでpod affinityを付与 ■ Gangの最初のPodの時に空いているZoneを見つければOK 44 annotations: gang-name: "job-a" gang-size: "32" uniqueue-zone-topology-key: "rack" metadata: labels: gang-name: "gang-a" ... podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: gang-name: "job-a" topologyKey: "rack" Webhook Icon by Icons8
  45. 45. Unique Zone Constraint の Scheduling Frameworkによる実装 45 ● Gang の最初のPod のときだけ動作する ○ gang scheduling との連携機能 ● PreFilter ○ 各Zone毎の空きを監視してGangが入るZoneを探索 ○ 見つかったZoneをPlugin内に保持 ● Filter ○ 見つかったZoneのnode以外はfilter outする
  46. 46. Hardware Topology Aware Scheduling ✅ CPU & GPU affinity ○ Topology Manager を 活用 (nvidia device pluginも対応している) ❎ (CPU&GPU) & NIC affinity: 実現できていない ○ 実装案: Device Plugin + CNI Plugin (参照: intel/sriov-network-device-plugin) ■ NIC をdevice pluginでresource化 (topology manager連携できる) ■ CNI Pluginは割り当たったNICを使ってnetworkを設定 46Icon pack by Icons8 - https://icons8.com NUMA NodeNUMA Node GPU NIC MEM CPU CPU MEM NIC GPU
  47. 47. Soft Quota (a.k.a. Throttling) ✅ kube-throttler を利用(Scheduler Extenderとして動作) ○ CRDでしきい値を定義、Controllerがstatusをreconcile 47Gauge by www.mindgraphy.com from the Noun Project # priority-class=high labelのpodの # 利用量が4 gpu超えたらschedule拒否 kind: Throttle spec: ... - podSelector: matchLabels: priority-class: high threshold: resourceRequests: nvidia.com/gpu: 4 status: # Throttleが閉じているかどうか # ControllerでReconcile Throttleが閉じていたら 空を返す Throttleが閉じていたら 空を返す 出典: 明日、業務で使える Scheduler Extender #cloudnativejp / Cloud Native Meetup Tokyo 7th Special Thanks 🎉 @y_taka_23
  48. 48. ✅ Dominant Resource Fairness (DRF) ○ Sort Plugin: Dominant Resource Share が小さい順に並ぶように ■ Low priority以下でののみ有効、lowより上はFirst Come First Served ❎ Flexible Fairness (近日導入予定) ○ Credit CRD を導入 ○ Pod と Credit は Annotation で紐付け ○ 様々なpolicyを合成可能 ■ Periodic Fill: 定期的に付与 ■ Resource Usage Charge ■ Idle Pods Penalty ■ Preemptors Penalty “Flexible” Fair Schduling 48 Icons made by Gregor Cresnar from www.flaticon.com is licensed by CC 3.0 BY Money bag from pingwing Sort Plugin: Creditの多いもの順に並べる PostFilter: Creditの少ない順にVictimに (※ low priority同士もpreemption対象に ) watch Manage Balances Credit Controller
  49. 49. GPU Driver Version/GPU Model pinning ✅ kubernetes-sigs/node-feature-discovery を参考に独自のFeature Discovery DaemonsetをデプロイしてNode Labelを管理 ○ ユーザは所望のnode selectorを付与してPodを作成 49gpu by Misha Petrishchev from the Noun Project kind: Node metadata: labels: gpu-model: "Tesla-V100-SXM2-32GB" gpu-driver-version: "440.95.01" gpu-memory-in-mib: "32480" cuda-version: "10.2" support-cuda-10-02: "true" ...
  50. 50. まとめ ● 機械学習WorkloadをScheduleする際に発生する典型的な要件 ● KubernetesにおけるBatch Schedulerの現状 ○ OSSで大量バッチを処理するとなるとvolcanoくらい ● Scheduler Deployment パターン の 比較 ○ kube-scheduler or カスタム, 単一 or 複数 scheduler ● PFNで 単一 & kube-scheduler を拡張を選択した理由 ● PFNにおける kube-scheduler の 利用&拡張 事例 ○ kube-schedulerをフル活用して様々な要件に対応している 50
  51. 51. Any Questions? 51

×