SlideShare a Scribd company logo
NTT Data
Yuki Nishizawa
1
入門 Kubeflow
~Kubernetesで機械学習をはじめるために~
2020/1/31
NTT Tech Conference#4
2
掲載内容は個人の見解であり、
所属する企業や組織の立場、戦略、意見を
代表するものではありません
 モバイル向けお客様のインフラ・アーキ担当
 コンテナやKubernetesに興味
西澤 勇紀
自己紹介
3
NTTデータ モバイルビジネス事業部
@yuuuk
Kubernetesポケットリファレンス
 レビュアとして関わらせて頂きました
ご紹介
4
https://www.amazon.co.jp/dp/B0816CVB3R/
https://www.oreilly.co.jp/books/9784873118772/ https://www.oreilly.co.jp/books/9784873118642/ https://www.oreilly.co.jp/books/9784873118406/
5
入門●●
NTTData
エヌ・ティ・ティ・データ
入門
Kubeflow
~ Kubernetesで機械学習をはじめるために ~
Yuki Nishizawa 著
西澤 勇紀 訳 ※フィクションです(発売されません)
1. Kubeflowの背景
2. 提供機能
6
入門Kubeflow
※Kubeflow v0.7を対象としています
手書き文字認識
3
学習済みのモデル
手書き文字
推論結果
7
機械学習の例
99.999%
8 0.001%
手書き文字認識
3
学習済みのモデル
手書き文字
推論結果
8
機械学習の例
99.999%
8 0.001%
どのように作成?
 フィードバックループで繰り返し実行
 大規模なデータを扱うことも
9
モデル作成のプロセス
Data
Processing
Training Deploy
Cleaning Ingest Analysis
Transfor
mation
Validation Splitting
Optimization
Validation
Scale
Serving
Monitoring
Improvement
…
…
…
データの収集・加工からデプロイまで
 データ(特徴量)評価
 再現性のあるパイプライン
 データとモデルのバージョン管理....etc
常に変化するデータ
 フィードバックループで繰り返し実行
 大規模なデータを扱うことも
10
モデル作成のプロセス
Data
Processing
Training Deploy
Cleaning Ingest Analysis
Transfor
mation
Validation Splitting
Optimization
Validation
Scale
Serving
Monitoring
Improvement
…
…
…
データの収集・加工からデプロイまで
 データ(特徴量)評価
 再現性のあるパイプライン
 データとモデルのバージョン管理....etc
常に変化するデータ
https://www.kubeflow.org/
Notebooks TF Training Model Serving
Pipelines Multi Framework Community
11
Kubeflowとは
Kubernetes上に機械学習環境を構築するツールキット
 Simple
簡単に構築できる
 Portable
どこでも実行できる
 Scalable
要求に応じてスケールできる
12
Kubeflowのゴール
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度のアップデート
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
事例
本番環境への適用事例も出てきています
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
時間の都合上割愛
$ kfctl apply –f [構築用マニフェスト]
v0.5~
K
v0.6~
kfctl kustomize 構築用マニフェスト
(for k8s)
KfDef
構築対象の基盤用に
マニフェストが提供されています
k8s
EKS
GKE
AKS
ksonnetから変更kfctlスクリプトから変更
16
1. Install
コマンドラインツール kfctl と Kustomize で構築
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 から構築することも可能です
 GCPマーケットプレイスで提供
• 1node上に全てデプロイ
• 数クリックで構築完了
• v0.7に対応
 ローカル端末でも実行可能
• 2vCPU/12GBメモリ以上
18
1. Install
もっと簡単に試したい...そんなときに MiniKF
 開発初期にIstioは存在しなかったため
 マルチユーザー機能に対応するため
 ユーザー認証と認可を統一的に行うため
Ambassador Istio
なぜ途中から変更?
19
2. Network
Ambassador から Istio へ(v0.6~)
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
リクエストヘッダの認証情報を確認
Namespace: bobNamespace: alice
istio-
ingressgateway
21
3. Multi-user
Namespace でマルチテナント環境を提供(v0.6~)
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
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
4. Landing-Page
JupyterNotebook
 Python実行環境
25
5. Notebook Servers
ノートブック作成の流れ
1.[NEW SERVER] を選択
26
5. Notebook Servers
27
5. Notebook Servers
2.パラメータ設定
• Name
• Image
• CPU/RAM
• Volumes
• Configuration
• Extra Resource
ノートブック作成の流れ
28
5. Notebook Servers
3.[CONNECT] を選択して JupyterNotebook を利用
ノートブック作成の流れ
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
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
 End-to-Endのオーケストレーション
 再利用可能なパイプライン
Experiment/Run
① Run
② Run
③ Run
Compare
④ Run
Pipelines
⑤ Run
⑥ Run
Parameter
Tuning
31
6. Pipelines
ML Pipelineで 再現性のある 実行管理 v0.4~
32
6. Pipelines
1. Pipeline作成
ML Pipeline ~ 開発から実行までの流れ ~
① KFP (Kubeflow Pipeline SDK)で依存関係を定義
② KFPの DSL Compiler でArgo 実行用yamlファイルを生成
③ Kubeflow にアップロード
DSL Compile Argo Manifest Upload
② コンパイル① KFPで実装 ③ アップロード
33
6. Pipelines
2. Pipeline選択
 [Create Run] を選択
ML Pipeline ~ 開発から実行までの流れ ~
Experiment選択
(実行グループ)
定期実行
実行パラメータ
6. Pipelines
3. Pipeline実行
 Experimentやパラメータを決めて [Start] を選択
ML Pipeline ~ 開発から実行までの流れ ~
35
6. Pipelines
4. Pipeline実行結果確認
Runの結果 Experiment内のRunの結果一覧
可視化と比較
ML Pipeline ~ 開発から実行までの流れ ~
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
モデルの設計・構築を自動化する AutoML ソリューション
 スケーラブルにチューニング結果を可視化
 v0.6から NAS (Neural Architecture Search) 追加
NASハイパーパラメータ探索
ニューラルネットワークの
構造設計から自動化する技術
alpha
37
7. Katib
ストライド x
フィルター n × m
人が調整するトレーニングプロセスの
管理変数を探索
 学習率
 オプティマイザ
 決定木の深さ
どのようにニューロンを接続するか
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
7. Katib
ハイパーパラメータチューニング実施の流れ
1. トップ画面で [Hyperparameter Tuning] を選択
1.目標値
accuracy: 99%
2.パラメータ検索範囲
学習率: 0.01~0.05
バッチサイズ: 100~200
停止方法(実行回数等)
3.検索アルゴリズム
random/gridなど
40
7. Katib
ハイパーパラメータチューニング実施の流れ
2. Experiment作成
直接yamlファイルをデプロイ または Trial TemplateからWebUIで入力
41
7. Katib
ハイパーパラメータチューニング実施の流れ
3. 結果確認 複数のWorker Jobの実行結果をまとめたもの
42
7. Katib
Worker Job は下記3パターンの実行が可能
Job TFJob PyTorchJob
distributednon-distributed
TFJob/PyTorchJobはCRD(Custom Resource Definition)で定義されています
それぞれのCRDに対して Operator が提供されています
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から サイドカーコンテナ でメトリクス収集
alpha
44
8. Artifact Store
メタデータ管理とトラッキングの機能を提供(v0.6~)
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
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
9. Training
各MLフレームワークの 分散トレーニング
TFJob PyTorchJob
 フレームワークごと提供される Operator で実行を管理
betav1
XGBoostJob MXJob
多くのタスクを自動化してくれる仕組み
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
Tensorflow Serving Seldon Serving KFServing
v0.7からデフォルトでインストール
49
10. Serving
学習済みモデルをKubernetesクラスタにデプロイ
 複数の Serving の仕組みを提供
マルチMLフレームワーク対応Tensorflowのみ対応
https://github.com/kubeflow/kfserving
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
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
 マルチフレームワーク対応
 プロダクションレディな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
#1. v1.0へ向けて
 kfctl を利用したクラスタアップデート
 Notebook環境以外のマルチテナント提供
 より簡単なインストールとコンフィグ設定 などなど
54
#2. 最近のProposal
 kubeflow-operator によるクラスタ管理
 Metadata SDK と KFP の マージ
 Namepace Default による Profile管理 などなど
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
ご清聴ありがとうございました

More Related Content

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