Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)

3,803 views

Published on

入門 Kubeflow
~Kubernetesで機械学習をはじめるために~
(NTT Tech Conference #4 講演資料)

2020年1月31日
株式会社NTTデータ / NTT DATA
Yuki Nishizawa

Published in: Technology
  • Be the first to comment

入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ (NTT Tech Conference #4 講演資料)

  1. 1. NTT Data Yuki Nishizawa 1 入門 Kubeflow ~Kubernetesで機械学習をはじめるために~ 2020/1/31 NTT Tech Conference#4
  2. 2. 2 掲載内容は個人の見解であり、 所属する企業や組織の立場、戦略、意見を 代表するものではありません
  3. 3.  モバイル向けお客様のインフラ・アーキ担当  コンテナやKubernetesに興味 西澤 勇紀 自己紹介 3 NTTデータ モバイルビジネス事業部 @yuuuk
  4. 4. Kubernetesポケットリファレンス  レビュアとして関わらせて頂きました ご紹介 4 https://www.amazon.co.jp/dp/B0816CVB3R/
  5. 5. https://www.oreilly.co.jp/books/9784873118772/ https://www.oreilly.co.jp/books/9784873118642/ https://www.oreilly.co.jp/books/9784873118406/ 5 入門●●
  6. 6. NTTData エヌ・ティ・ティ・データ 入門 Kubeflow ~ Kubernetesで機械学習をはじめるために ~ Yuki Nishizawa 著 西澤 勇紀 訳 ※フィクションです(発売されません) 1. Kubeflowの背景 2. 提供機能 6 入門Kubeflow ※Kubeflow v0.7を対象としています
  7. 7. 手書き文字認識 3 学習済みのモデル 手書き文字 推論結果 7 機械学習の例 99.999% 8 0.001%
  8. 8. 手書き文字認識 3 学習済みのモデル 手書き文字 推論結果 8 機械学習の例 99.999% 8 0.001% どのように作成?
  9. 9.  フィードバックループで繰り返し実行  大規模なデータを扱うことも 9 モデル作成のプロセス Data Processing Training Deploy Cleaning Ingest Analysis Transfor mation Validation Splitting Optimization Validation Scale Serving Monitoring Improvement … … … データの収集・加工からデプロイまで  データ(特徴量)評価  再現性のあるパイプライン  データとモデルのバージョン管理....etc 常に変化するデータ
  10. 10.  フィードバックループで繰り返し実行  大規模なデータを扱うことも 10 モデル作成のプロセス Data Processing Training Deploy Cleaning Ingest Analysis Transfor mation Validation Splitting Optimization Validation Scale Serving Monitoring Improvement … … … データの収集・加工からデプロイまで  データ(特徴量)評価  再現性のあるパイプライン  データとモデルのバージョン管理....etc 常に変化するデータ
  11. 11. https://www.kubeflow.org/ Notebooks TF Training Model Serving Pipelines Multi Framework Community 11 Kubeflowとは Kubernetes上に機械学習環境を構築するツールキット
  12. 12.  Simple 簡単に構築できる  Portable どこでも実行できる  Scalable 要求に応じてスケールできる 12 Kubeflowのゴール
  13. 13. 2018 Kubecon NA 2017 発表 19 20 v1.0 ※予定 v0.1 v0.4 v0.7 v0.6 v0.5 v0.3 v0.2 10/57/24/5 1/8 4/9 7/19 11/5 13 バージョン 約3か月に1度のアップデート
  14. 14. https://labs.spotify.com/2019/12/13/the-winding-road-to-better-machine-learning-infrastructure-through-tensorflow-extended-and-kubeflow/ PipelinesTFX MLワークフローにKubeflow Pipelines MLプラットフォームにKubeflowを採用 https://static.sched.com/hosted_files/kccncna19/4f/Building_Medical_AI_With_Kubernetes_Kubeflow_KubeCon.pdf 14 事例 本番環境への適用事例も出てきています
  15. 15. 2. Notebook Servers 6. Pipelines 7. Katib 8. Artifact Store 1. Landing-Page 9. Training 10. Serving プラットフォーム 主要コンポーネント 11. Others WebUI Backend 15 アーキテクチャ概要 Ⅰ. Install Ⅱ. Network Ⅲ. Multi-user 5. Notebook Servers 4. Landing-Page 1. Install 2. Network 3. Multi-user 時間の都合上割愛
  16. 16. $ kfctl apply –f [構築用マニフェスト] v0.5~ K v0.6~ kfctl kustomize 構築用マニフェスト (for k8s) KfDef 構築対象の基盤用に マニフェストが提供されています k8s EKS GKE AKS ksonnetから変更kfctlスクリプトから変更 16 1. Install コマンドラインツール kfctl と Kustomize で構築
  17. 17. https://deploy.kubeflow.cloud/#/deploy v0.7はasia-northeast1の選択不可 v0.7からGPU Node Poolを作成するようになり、gpu- typeにnvidia-tesla-k80を指定しているため デフォルト16vcpuを要求するため、 無料枠だと失敗します (無料枠は8vcpuまで) IAPで認証する場合は別途設定 TIPS 17 1. Install GCP の場合 WebUI から構築することも可能です
  18. 18.  GCPマーケットプレイスで提供 • 1node上に全てデプロイ • 数クリックで構築完了 • v0.7に対応  ローカル端末でも実行可能 • 2vCPU/12GBメモリ以上 18 1. Install もっと簡単に試したい...そんなときに MiniKF
  19. 19.  開発初期にIstioは存在しなかったため  マルチユーザー機能に対応するため  ユーザー認証と認可を統一的に行うため Ambassador Istio なぜ途中から変更? 19 2. Network Ambassador から Istio へ(v0.6~)
  20. 20. istio- ingressgateway Namespace: istio-system Namespace: kubeflow Cloud IAP Landing-Page Notebook Servers Namespace: foo ※AWSの場合Cognitoと連携可能 クラスタ接続におけるユーザー認証 クラスタ内のアクセスをIstio/Kubernetesで制御 Cloud Load Balancing 20 2. Network Istio でクラスタ内外の 認証/認可 をスムーズに連携 Pipelines Katib Artifact Store • ServiceRole • ServiceRoleBinding • Gateway ...etc リクエストヘッダの認証情報を確認
  21. 21. Namespace: bobNamespace: alice istio- ingressgateway 21 3. Multi-user Namespace でマルチテナント環境を提供(v0.6~)
  22. 22. Namespace: bob 22 3. Multi-user 初回ログイン時に Namespace を自動生成 GKEの場合、少なくとも ”Kubernetes Engine Cluster Viewer” と ”IAP-secured Web App User” の権限が必要になります Profile Controller create RoleBinding ServiceAccount ServiceRole ServiceRoleBinding Istio Resource Kubernetes Resource Controller Component
  23. 23. Namespace: bobNamespace: alice Cluster Owner 23 3. Multi-user 各 Namespace のアクセス権を WebUI で付与 alice alice alice ① bobを許可 ③ aliceを許可 Namespace Owner Namespace Owner ② アクセスOK ④ アクセスOK 誰が誰のNamespaceにアクセス可能かを Cluster Ownerの画面で確認可能 アクセスを許可することで各Namespace内に IstioのServiceRoleBindingが追加されます
  24. 24. 24 4. Landing-Page
  25. 25. JupyterNotebook  Python実行環境 25 5. Notebook Servers
  26. 26. ノートブック作成の流れ 1.[NEW SERVER] を選択 26 5. Notebook Servers
  27. 27. 27 5. Notebook Servers 2.パラメータ設定 • Name • Image • CPU/RAM • Volumes • Configuration • Extra Resource ノートブック作成の流れ
  28. 28. 28 5. Notebook Servers 3.[CONNECT] を選択して JupyterNotebook を利用 ノートブック作成の流れ
  29. 29. Kubernetes の機能と連携した Notebook 環境 29 5. Notebook Servers PodDefault Notebook WebUIの Configurationsで指定 MutatingWebhookでラベルが付 与されたPodにSecretをマウント Cloud Storage Pod apiVersion: kubeflow.org/v1alpha1 kind: PodDefault spec: desc: add gcp credential env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /secret/gcp/user-gcp-sa.json selector: matchLabels: add-gcp-secret: "true" volumeMounts: - mountPath: /secret/gcp name: secret-volume volumes: - name: secret-volume secret: secretName: user-gcp-sa ラベルを付与 StatefulSet Istio Resource Kubernetes Resource  NotebookコンテナにGCPアクセス権限を付与する流れ Notebook Controller VirtualService Service Create Controller Component
  30. 30. https://jupyterhub.readthedocs.io/en/0.7.2/getting-started.html JupyterHub (~v0.4) istio-ingressgateway Kube Spawner Notebook Controller User Notebook Notebook Controller (v0.5~) 30 5. Notebook Servers Istioの採用より Notebook Controller に移行 Browser
  31. 31.  End-to-Endのオーケストレーション  再利用可能なパイプライン Experiment/Run ① Run ② Run ③ Run Compare ④ Run Pipelines ⑤ Run ⑥ Run Parameter Tuning 31 6. Pipelines ML Pipelineで 再現性のある 実行管理 v0.4~
  32. 32. 32 6. Pipelines 1. Pipeline作成 ML Pipeline ~ 開発から実行までの流れ ~ ① KFP (Kubeflow Pipeline SDK)で依存関係を定義 ② KFPの DSL Compiler でArgo 実行用yamlファイルを生成 ③ Kubeflow にアップロード DSL Compile Argo Manifest Upload ② コンパイル① KFPで実装 ③ アップロード
  33. 33. 33 6. Pipelines 2. Pipeline選択  [Create Run] を選択 ML Pipeline ~ 開発から実行までの流れ ~
  34. 34. Experiment選択 (実行グループ) 定期実行 実行パラメータ 6. Pipelines 3. Pipeline実行  Experimentやパラメータを決めて [Start] を選択 ML Pipeline ~ 開発から実行までの流れ ~
  35. 35. 35 6. Pipelines 4. Pipeline実行結果確認 Runの結果 Experiment内のRunの結果一覧 可視化と比較 ML Pipeline ~ 開発から実行までの流れ ~
  36. 36. Workflow Pod Pod Pod SchduledWorkflow Workflow Pod Pod Pod Workflow Controller Run#1 Run#2 Start 36 6. Pipelines ML Pipelineは Argo Workflow で実行 ScheduledWorkflow Controller  定期実行や結果の永続化等の仕組みをArgoと連携 ScheduledWorkflowによる定期実行の流れ (OwnerReferenceの遷移) Kubeflow CRD Kubernetes Resource Controller Component
  37. 37. モデルの設計・構築を自動化する AutoML ソリューション  スケーラブルにチューニング結果を可視化  v0.6から NAS (Neural Architecture Search) 追加 NASハイパーパラメータ探索 ニューラルネットワークの 構造設計から自動化する技術 alpha 37 7. Katib ストライド x フィルター n × m 人が調整するトレーニングプロセスの 管理変数を探索  学習率  オプティマイザ  決定木の深さ どのようにニューロンを接続するか
  38. 38. 1.Experiment 38 7. Katib Katibのコンセプト 2.Suggestion  目標値  パラメータの範囲  パラメータ選定アルゴリズム  アルゴリズムに従ったパラメータ提案  random  grid  hyperband  bayesian 3.Trial  提案されたパラメータでジョブ管理 4.Worker Job  Jobの実行  Experiment に目標値やパラメータ範囲等を定義  Suggestion で提案したパラメータで各Trialを実行 ~v0.5 : v1alpha1 は StudyJob/Suggestion v0.6~ : v1alpha2 は Experiment/Trail/Suggestion に変更 v0.7~ : v1alpha3 は メトリクス連携方式を変更
  39. 39. 39 7. Katib ハイパーパラメータチューニング実施の流れ 1. トップ画面で [Hyperparameter Tuning] を選択
  40. 40. 1.目標値 accuracy: 99% 2.パラメータ検索範囲 学習率: 0.01~0.05 バッチサイズ: 100~200 停止方法(実行回数等) 3.検索アルゴリズム random/gridなど 40 7. Katib ハイパーパラメータチューニング実施の流れ 2. Experiment作成 直接yamlファイルをデプロイ または Trial TemplateからWebUIで入力
  41. 41. 41 7. Katib ハイパーパラメータチューニング実施の流れ 3. 結果確認 複数のWorker Jobの実行結果をまとめたもの
  42. 42. 42 7. Katib Worker Job は下記3パターンの実行が可能 Job TFJob PyTorchJob distributednon-distributed TFJob/PyTorchJobはCRD(Custom Resource Definition)で定義されています それぞれのCRDに対して Operator が提供されています
  43. 43. Experiment Trial Suggestion Job Pod ① Experiment作成 ② Suggestion作成 - パラメータ選定アルゴリズム適用 ③ SuggestionのDeploymentと Serviceを作成 ④ Experimentアップデート - Suggestion DeploymentにService 経由でアクセスしてパラメータを反映 ⑤ Trial作成 - ④で得たハイパーパラメータでTrial Jobを実行 ⑥ Job実行 ⑦ Pod実行 ⑧ サイドカーコンテナでMetrics連携 - Experimentで Spec.metricsCollectorSpecを指定 ⑨ Job完了 ⑩ Trialアップデート(Metrics取得/Job完了) ※ 以後④~⑩を繰り返し実行 ⑪ 条件を満たしたらExperiment完了 - 条件はTrial実行回数や目標値などを指定 Kubeflow CRD Kubernetes Resource Deployment Service ① 簡略化のためControllerや APIServer等の連携を省略しています ② ③ ④ ⑤ ⑥ ⑦ Deployment (Katib DB) ⑧ ⑨ ⑩ ⑪ v1alpha2ではメトリクス連携用の PodをCronJobで生成していました 43 7. Katib v1alpha3から サイドカーコンテナ でメトリクス収集
  44. 44. alpha 44 8. Artifact Store メタデータ管理とトラッキングの機能を提供(v0.6~)
  45. 45. 45 alpha 8. Artifact Store Metadata用のSDKで実装  DataSet • データセット名やURI • データソースへのクエリ  Execution • 実行ID  Metrics • ModelやDataSetのIDなど • accuracy等の値やラベル  Model • Model名やフレームワーク • ハイパーパラメータ Workspace Run #1 artifact execution artifact Predefined Types
  46. 46. https://github.com/google/ml-metadata/blob/master/g3doc/images/mlmd_overview.png metadata/server/main.go 46 alpha 8. Artifact Store TFXのライブラリにも含まれるMLMDをバックエンドに採用 google/ml-metadataのリポジトリをコピー メタデータを記録・検索するためのライブラリ KubeflowはMySQLをデータストアとしています
  47. 47. 47 9. Training 各MLフレームワークの 分散トレーニング TFJob PyTorchJob  フレームワークごと提供される Operator で実行を管理 betav1 XGBoostJob MXJob 多くのタスクを自動化してくれる仕組み
  48. 48. 48 9. Training Tensorflowの分散処理は tf-operator で実行管理 Pod Pod Pod Pod Pod Pod TFJob tf-operator PS Worker Service Kubeflow CRD Kubernetes Resource Operator Component Watch Create
  49. 49. Tensorflow Serving Seldon Serving KFServing v0.7からデフォルトでインストール 49 10. Serving 学習済みモデルをKubernetesクラスタにデプロイ  複数の Serving の仕組みを提供 マルチMLフレームワーク対応Tensorflowのみ対応 https://github.com/kubeflow/kfserving
  50. 50. SavedModelを指定。GCSやS3の指定も可能です。 その場合は、サービスアカウントやAWSアクセスキーな どをSecretにマウントしておく必要があります。 Ex) gs://kubeflow-examples-data/mnist/ VirtualService 50 10. Serving Tensorflow Serving用のイメージでモデルをデプロイ DistinationRule Service Deployment 各リソースを個別に作成 (Operatorではありません) Deployment Istio Resource Kubernetes Resource
  51. 51. seldondeployment MLソースコード + s2i build 51 10. Serving Seldon Serving は s2i で作成したイメージをデプロイ Builder Image seldon-operator Service HorizontalPodAutoscaler DeploymentDestinationRule VirtualService pull Istio Resource Kubernetes ResourceOperator Component Watch Kubeflow CRD Create
  52. 52.  マルチフレームワーク対応  プロダクションレディなServingを目指す 52 10. Serving Knative 上で実行する Serving https://github.com/kubeflow/kfserving InferenceService Service Configuration Route Revision Deployment Service Ingress PodAutoscaler Service MetricServerlessService Service Service Image ReplicaSet Pod VirtualService Istio Resource Kubernetes ResourceKnative Resource Kubeflow CRD InferenceServiceデプロイ後のOwnerReferenceの遷移 apiVersion: "serving.kubeflow.org/v1alpha2" kind: "InferenceService" metadata: name: "flowers-sample" spec: default: predictor: tensorflow: storageUri: "gs://kfserving-samples/models/tensorflow/flowers"
  53. 53. 53 #1. v1.0へ向けて  kfctl を利用したクラスタアップデート  Notebook環境以外のマルチテナント提供  より簡単なインストールとコンフィグ設定 などなど
  54. 54. 54 #2. 最近のProposal  kubeflow-operator によるクラスタ管理  Metadata SDK と KFP の マージ  Namepace Default による Profile管理 などなど
  55. 55. 11. Others 55 Summary 1. Install 2. Network 3. Multi-User ・Istio(or ambassador) ・認証/認可 ・KubeflowのTopページ ・リンク先を集約 ・JupyterNotebook ・python実行環境 ・ハイパーパラメータ チューニング ・Neural Architecture Search ・メタデータトラッキング(データソース/モデル等) ・Metadata SDKを利用 MPI Training ・学習/モデル作成 ・オペレーター実行 ・モデルのデプロイ ・Tesorflow Serving ・Seldon Serving ・KFServing ・Fairing(マルチプラットフォーム向けSDK) ・Argo CD(GitOpsでkubeflow資材管理) ・Spartakus ・Gang Scheduling(Volucano Scheduler) ・Nuclio functions ・...etc 4. Landing-Page 5. Notebook Servers 6. Pipelines 7. Katib 8. Artifact Store 9. Training ・パイプライン ・依存関係を定義 ・バックエンドはArgo ・KF Python SDK利用 10. Serving K ・コマンドラインツール:kfctl ・マニフェスト管理:Kustomize ・KfDefリソース ・(将来的にアップグレード機能追加) ・Namespaceでマルチテナント ・Namespace自動生成 ・Manage Contributors
  56. 56. 56 ご清聴ありがとうございました

×