© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.
機械学習基盤を作るのにKubernetes か SageMaker で迷っている人へYoshitaka Haribara
T e c h 0 5
Startup Solutions ArchitectAmazon Web Services Japan
⾃⼰紹介• 針原 佳貴 (はりばら よしたか) • 博⼠ (情報理⼯学)• @_hariby
hariby• https://speakerdeck.com/hariby/
• Startup Solutions Architect• スタートアップの技術⽀援・機械学習導⼊⽀援• 最近は量⼦コンピュータの相談も• 好きなサービスは Amazon SageMaker
このセッションの⽬的職業柄、最近「機械学習基盤を Kubernetes (Amazon EKS) で作るかAmazon SageMaker で作るか迷っています︕」という質問を受けるのでその答えを整理します
© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.
なぜ Kubernetes で機械学習を⾏うのか︖• ライブラリ・依存関係の管理をコンテナで容易に• 環境の統⼀化と、再現性・追跡可能性
• トレーニング・デプロイの際に宣⾔的にインフラ環境をコントロールしたい• 環境のコード化とインフラの再現性
• ML パイプラインを構築するためのOpen Source エコシステム• Kubeflow Pipelines, MLflow, Metaflow,...• Custom Resource Definition (CRD) を使えば⾃分で書ける
「コンテナ」による環境の統⼀化
CUDA, cuDNN
トレーニングスクリプトtrain.py
Deep Learning Framework
再現性・追跡可能性の担保
Docker image
© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Amazon Elastic Kubernetes Service (EKS)
Upstream Kubernetes標準的な Kubernetes API を採⽤。コミュニティによるツールと協調。
Highly availableプロダクション環境向けに構築、複数 AZ にまたがり⾼い可⽤性。
IntegratedAWS エコシステムとの統合: VPC Networking, Elastic Load Balancing, IAM Permissions, CloudWatch など。
Amazon Elastic Kubernetes Service (EKS)
構成例: Kubeflow on Amazon EKS
Amazon EKS Workshop > Advanced > Machine Learning using Kubeflow(kfctl build でコケたら https://github.com/aws-samples/eks-workshop/issues/639 )
Amazon Elastic Kubernetes Service(EKS)
Amazon Elastic Container Registry (ECR)
Docker images for training/serving
Pod PodPod
Model serving / inferenceModel training
Worker nodes
Spawn
Kubeflow ダッシュボード
Notebook の作成
数分で⽴ち上がり接続すると
⾒慣れた Jupyter Notebook の画⾯が
Kubeflow fairing from kubeflow.fairing import TrainJob
train_job = TrainJob(HousingServe,
input_files=['ames_dataset/train.csv', "requirements.txt"],
docker_registry=DOCKER_REGISTRY,
backend=BackendClass(build_context_source=BuildContext))
train_job.submit()
from kubeflow.fairing import PredictionEndpoint
endpoint = PredictionEndpoint(HousingServe,
input_files=['trained_ames_model.dat', "requirements.txt"],
docker_registry=DOCKER_REGISTRY,
service_type='ClusterIP',
backend=BackendClass(build_context_source=BuildContext))
endpoint.create()
スタートアップで割とよくある状況• Kubeflow on Amazon EKS などが作れて運⽤できるなら OK • Kubernetes / Kubeflow のバージョンアップ
• モデルを作ってデプロイできる環境があれば、それらがどう動いてるかは必ずしも重要ではない• 例えば Kubeflow 的な何かがあれば、ツールがどう動いているか⾃体は興味ない
(Kubeflow はあくまでも⼀例です)
• 多くの機械学習エンジニアにとって基盤の運⽤は結構つらいことが多い• 機械学習モデル構築と、インフラ・ワークフローエンジンを触るスキルセットの乖離
• あえて⾃分で作らない、という選択肢も必要
© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.
あらゆる規模で機械学習・深層学習モデルを構築・トレーニング・デプロイ
Amazon SageMaker
トレーニングとパラメーターチューニング
トレーニング環境の
整備と運⽤
本番環境へのデプロイ
学習データの収集と準備
ML アルゴリズムの
選択と最適化
123
本番環境での運⽤とスケーリング
あらゆる規模で機械学習・深層学習モデルを構築・トレーニング・デプロイ
トレーニング環境の
整備と運⽤
本番環境へのデプロイ
学習データの収集と準備
ML アルゴリズムの
選択と最適化
123
本番環境での運⽤とスケーリング
Amazon SageMaker Ground Truth
トレーニングとパラメーターチューニング
Amazon SageMaker
本番環境での運⽤とスケーリング
あらゆる規模で機械学習・深層学習モデルを構築・トレーニング・デプロイ
トレーニング環境の
整備と運⽤
本番環境へのデプロイ
学習データの収集と準備
ML アルゴリズムの
選択と最適化
123
Amazon SageMaker Ground Truth
AWS Marketplace forMachine Learning
トレーニングとパラメーターチューニング
• k-means クラスタリング• Factorization Machines
(レコメンド)• DeepAR (時系列予測)• BlazingText (Word2Vec)• Object2Vec• XGBoost
• 画像分類・物体検出• Seq2Seq• LDA / Neural Topic Modelling
(トピックモデル)• 主成分分析• 線型学習器 (回帰 / 分類) など
Amazon SageMaker
あらゆる規模で機械学習・深層学習モデルを構築・トレーニング・デプロイ
トレーニング環境の
整備と運⽤
本番環境へのデプロイ
学習データの収集と準備
ML アルゴリズムの
選択と最適化
123
本番環境での運⽤とスケーリング
Amazon EC2 P3 Instances
Managed Spot TrainingAmazon SageMaker
Ground TruthAWS Marketplace for
Machine Learning
トレーニングとパラメーターチューニング
Amazon SageMaker
トレーニングとパラメーターチューニング
あらゆる規模で機械学習・深層学習モデルを構築・トレーニング・デプロイ
トレーニング環境の
整備と運⽤
本番環境へのデプロイ
学習データの収集と準備
ML アルゴリズムの
選択と最適化
123
本番環境での運⽤とスケーリング
Amazon EC2 P3 Instances
Managed Spot TrainingAmazon SageMaker
Ground TruthAWS Marketplace for
Machine Learning
Amazon SageMaker
トレーニングとパラメーターチューニング
あらゆる規模で機械学習・深層学習モデルを構築・トレーニング・デプロイ
トレーニング環境の
整備と運⽤
本番環境へのデプロイ
学習データの収集と準備
ML アルゴリズムの
選択と最適化
123
本番環境での運⽤とスケーリング
Amazon EC2 P3 Instances
Managed Spot TrainingAmazon SageMaker
Ground TruthAWS Marketplace for
Machine Learning Amazon SageMaker Neo
Amazon SageMaker
トレーニングとパラメーターチューニング
あらゆる規模で機械学習・深層学習モデルを構築・トレーニング・デプロイ
トレーニング環境の
整備と運⽤
本番環境へのデプロイ
学習データの収集と準備
ML アルゴリズムの
選択と最適化
123
本番環境での運⽤とスケーリング
Amazon EC2 P3 Instances
Managed Spot TrainingAmazon SageMaker
Ground Truth
Amazon Elastic Inference
Multi-Model EndpointAWS Marketplace for
Machine Learning Amazon SageMaker Neo
Amazon SageMaker
Amazon SageMaker re:Invnet 2019 でのアップデート
Amazon SageMaker Studio
Amazon SageMaker Notebooks(Preview) Amazon SageMaker
Debugger
Amazon SageMaker Experiments
Amazon SageMaker Model Monitor
Amazon SageMaker Autopilot
開発環境
• インスタンスタイプを選んで⽴ち上げるだけ• フレームワークはプリインストール• ノートブックインスタンス作成・起動時にスクリプト実⾏も• https://github.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle-
config-samples
Jupyter Notebook/Lab を簡単に使える
Amazon SageMaker
Jupyter Notebook/Lab
Amazon S3
The Jupyter Trademark is registered with the U.S. Patent & Trademark Office.
開発
データは予め Amazon S3 にアップロード:• SageMaker Python SDK で簡単に
• sagemaker_session.upload_data(path='data', key_prefix='data/DEMO')
• AWS CLI や AWS SDK (Python だと boto3) などでも• aws s3 sync <source> <dest>
• GUI (マネージメントコンソール) からでも
Amazon SageMaker
開発
Jupyter Notebook/Lab
Amazon S3
The Jupyter Trademark is registered with the U.S. Patent & Trademark Office.
Amazon SageMaker
開発
Jupyter Notebook/Lab
Amazon S3
学習
Amazon EC2 P3 Instances
Amazon ECR
The Jupyter Trademark is registered with the U.S. Patent & Trademark Office.
ビルド済みのコンテナイメージが予め用意されている
Amazon SageMaker
開発 学習
Amazon EC2 P3 InstancesJupyter Notebook/Lab
Amazon S3
The Jupyter Trademark is registered with the U.S. Patent & Trademark Office.
トレーニングでのメリット:• API 経由で学習⽤インスタンスを起動、学習が完了すると⾃動停⽌
• ⾼性能なインスタンスを秒課⾦でスポットインスタンスも使えて、簡単にコスト削減
• 指定した数のインスタンスを同時起動、分散学習も容易
Amazon SageMaker
開発 学習
Amazon EC2 P3 InstancesJupyter Notebook/Lab
Amazon S3
The Jupyter Trademark is registered with the U.S. Patent & Trademark Office.
Amazon SageMaker
開発 学習 推論
Amazon EC2 P3 InstancesJupyter Notebook/Lab
Endpoint/Batch transform
Amazon S3
Amazon ECR
The Jupyter Trademark is registered with the U.S. Patent & Trademark Office.
Amazon SageMaker は⾒⽅を変えると機械学習に特化したコンテナ オーケストレーションサービスという理解も
• 環境は Docker コンテナとして⽤意• トレーニング・デプロイ先の環境はインスタンスタイプ・台数を選ぶ• Input パラメータとしてインスタンスタイプやトレーニングデータの path を指定、
それ⾃体は Kubernetes で書くのとそれほど変わらないはず
• 過去のトレーニングジョブの履歴・⽣成物が残るため、実験管理も容易
ワークフロー構築を助けるツール• Docker コンテナによる環境統⼀• ビルド済みコンテナ or コンテナ持ち込み
• SageMaker Python SDK• https://github.com/aws/sagemaker-python-sdk/
• AWS Step Functions Data Science SDK• https://github.com/aws/aws-step-functions-data-science-sdk-python
SageMaker Python SDK
import sagemaker
SageMaker Python SDK
import sagemaker
from sagemaker.mxnet import MXNet # 各フレームワーク⽤の Estimator クラスestimator = MXNet("train.py", # トレーニングスクリプトなどを指定して初期化
role=sagemaker.get_execution_role(),
train_instance_count=1,
train_instance_type="ml.p3.2xlarge",
framework_version="1.6.0")
SageMaker Python SDK
import sagemaker
from sagemaker.mxnet import MXNet # 各フレームワーク⽤の Estimator クラスestimator = MXNet("train.py", # トレーニングスクリプトなどを指定して初期化
role=sagemaker.get_execution_role(),
train_instance_count=1,
train_instance_type="ml.p3.2xlarge",
framework_version="1.6.0")
estimator.fit("s3://mybucket/data/train") # fit でトレーニング
SageMaker Python SDK
import sagemaker
from sagemaker.mxnet import MXNet # 各フレームワーク⽤の Estimator クラスestimator = MXNet("train.py", # トレーニングスクリプトなどを指定して初期化
role=sagemaker.get_execution_role(),
train_instance_count=1,
train_instance_type="ml.p3.2xlarge",
framework_version="1.6.0")
estimator.fit("s3://mybucket/data/train") # fit でトレーニング
predictor = estimator.deploy(initial_instance_count=2, # 2以上にすると Multi-AZ
instance_type="ml.m5.xlarge") # deploy でエンドポイント作成
EKS (Kubernetes) か SageMaker か• トータルのコスト (TCO)• トレーニング・推論に使う CPU/GPU • 基盤⾃体の運⽤負荷
• セキュリティ・コンプライアンス・ガバナンス• B-to-B で提供する場合は特に重要• どういう観点が必要かは AWS Well-Architected Framework のセキュリティの柱を参照
⼀般的論として、⾃由度を⼿に⼊れるためには運⽤負荷の増加を受け⼊れる必要がある
© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.
TCO の考え⽅: 4種類のコストCapability 考慮事項
インスタンスのプロビジョン・運⽤
• インスタンスのプロビジョン、環境構築の容易さ• パッチ適⽤等のメンテナンス• スポットインスタンスなどの活⽤によるコスト削減
セキュリティ・コンプライアンスの管理
• 転送時・保管時のデータ暗号化• 権限管理• 証跡管理• SOC, PCI, ISO, FedRAMP, HIPAAなどのコンプライアンス対応
インフラパフォーマンス最適化
• トレーニングジョブ毎の独⽴したパフォーマンス• 分散学習に適したストレージやネットワークのチューニング• 推論のための最適なインフラ選択とチューニング
⾼可⽤性インフラ管理• データやモデル成果物の可⽤性・耐久性• トレーニング・推論環境のモニタリング、ログの取得や管理• 推論環境の可⽤性 (Multi-AZ 対応やオートスケーリング)
TCO の考え⽅: Amazon SageMaker との⽐較• ML インフラストラクチャ• 運⽤コスト組織が⼩さいうちは Amazon SageMaker を使った⽅が得
組織規模 Amazon SageMaker でのコスト削減⾃社運⽤Kubernetes (EKS) との⽐較
⼩ 5 data scientists -90%中 15 data scientists -85%⼤ 50 data scientists -65%巨⼤ 250 data scientists -54%
https://pages.awscloud.com/NAMER-ln-GC-400-machine-learning-sagemaker-tco-learn-ty.html
インスタンスの管理とコスト• SageMaker • トレーニングごとにインスタンスを⽴ち上げ、終わったら勝⼿に落ちる
• Kubernetes • クラスタを共有するので、無駄なコストをかけないためには Cluster Autoscaler などで
ジョブが流れない時にはインスタンスを落とすようにする必要がある
GPU の利⽤率が低い時間帯がある場合、インスタンスの上げ下げがコストに⼤きく効いてくる
SageMaker Operator for Kubernetes
• SageMaker ⾃体は便利そうだが既存 Kubernetes クラスターがあり、SageMaker API や SDK の使い⽅を覚えるのが⾯倒な場合などに
• Kubernetes でパイプラインとワークフローの作成・ML ワークロードのオーケストレーションを⾏いながらも部分的にSageMaker でモデルのトレーニング・チューニング・デプロイ
• SageMaker 側でインフラを完全にマネージ• Managed Spot Training や分散学習などの機能も利⽤可能
Kubernetes から Amazon SageMaker を呼びモデルをトレーニング・チューニング・デプロイ
Amazon SageMakerKubernetes
選択肢• Kubernetes を Amazon EKS で運⽤• Kubernetes に慣れている企業• Kubeflow を使った構成例を紹介した
• Kubernetes から Amazon SageMaker を呼ぶ (mix)• 既存 Kubernetes クラスターから、機械学習部分だけ切り出し• SageMaker Operator for Kubernetes で呼ぶ
• Amazon SageMaker を使う• TCO の⾯で多くのスタートアップにとって合理的• 環境は Docker コンテナで管理できる
まとめ• 機械学習ワークロードをコンテナ管理するメリットは多⼤にある• 環境の統⼀化・再現性・追跡可能性
• オーケストレーションはいくつかの選択肢がある• TCO も考慮して最適なものを選択、多くの場合は Amazon SageMaker が第⼀候補
• ツール選定は開発速度にも影響• 選択肢が多すぎて迷ったら AWS の Solutions Architect に相談
Thank you!
© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.
Yoshitaka Haribara@_hariby
Top Related