Slide 1

Slide 1 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. 機械学習基盤を作るのに Kubernetes か SageMaker で迷っている人へ Yoshitaka Haribara T e c h 0 5 Startup Solutions Architect Amazon Web Services Japan

Slide 2

Slide 2 text

⾃⼰紹介 • 針原 佳貴 (はりばら よしたか) • 博⼠ (情報理⼯学) • @_hariby hariby • https://speakerdeck.com/hariby/ • Startup Solutions Architect • スタートアップの技術⽀援・機械学習導⼊⽀援 • 最近は量⼦コンピュータの相談も • 好きなサービスは Amazon SageMaker

Slide 3

Slide 3 text

このセッションの⽬的 職業柄、最近 「機械学習基盤を Kubernetes (Amazon EKS) で作るか Amazon SageMaker で作るか迷っています︕」 という質問を受けるのでその答えを整理します

Slide 4

Slide 4 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 5

Slide 5 text

なぜ Kubernetes で機械学習を⾏うのか︖ • ライブラリ・依存関係の管理をコンテナで容易に • 環境の統⼀化と、再現性・追跡可能性 • トレーニング・デプロイの際に 宣⾔的にインフラ環境をコントロールしたい • 環境のコード化とインフラの再現性 • ML パイプラインを構築するための Open Source エコシステム • Kubeflow Pipelines, MLflow, Metaflow,... • Custom Resource Definition (CRD) を使えば⾃分で書ける

Slide 6

Slide 6 text

「コンテナ」による環境の統⼀化 CUDA, cuDNN トレーニングスクリプト train.py Deep Learning Framework 再現性・追跡可能性の担保 Docker image

Slide 7

Slide 7 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 8

Slide 8 text

Amazon Elastic Kubernetes Service (EKS)

Slide 9

Slide 9 text

Upstream Kubernetes Kubernetes certified なマネージドサービス、 コミュニティによるツールと協調。 Highly available プロダクション環境向けに構築、 複数 AZ にまたがり⾼い可⽤性。 Integrated AWS エコシステムとの統合: VPC Networking, Elastic Load Balancing, IAM Permissions, CloudWatch など。 Amazon Elastic Kubernetes Service (EKS)

Slide 10

Slide 10 text

構成例: 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 Pod Pod Model serving / inference Model training Worker nodes Spawn

Slide 11

Slide 11 text

Kubeflow ダッシュボード

Slide 12

Slide 12 text

Notebook の作成

Slide 13

Slide 13 text

数分で⽴ち上がり接続すると

Slide 14

Slide 14 text

⾒慣れた Jupyter Notebook の画⾯が

Slide 15

Slide 15 text

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()

Slide 16

Slide 16 text

スタートアップで割とよくある状況 • Kubeflow on Amazon EKS などが作れて運⽤できるなら OK • Kubernetes / Kubeflow のバージョンアップ • モデルを作ってデプロイできる環境があれば、 それらがどう動いてるかは必ずしも重要ではない • 例えば Kubeflow 的な何かがあれば、ツールがどう動いているか⾃体は興味ない (Kubeflow はあくまでも⼀例です) • 多くの機械学習エンジニアにとって基盤の運⽤は結構つらいことが多い • 機械学習モデル構築と、インフラ・ワークフローエンジンを触るスキルセットの乖離 • あえて⾃分で作らない、という選択肢も必要

Slide 17

Slide 17 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 18

Slide 18 text

トレーニングと パラメーター チューニング あらゆる規模で機械学習・深層学習モデルを構築・トレーニング・デプロイ トレーニング 環境の 整備と運⽤ 本番環境への デプロイ 学習データの 収集と準備 ML アルゴリズム の 選択と最適化 1 2 3 本番環境での 運⽤とスケーリング Amazon EC2 P3 Instances Managed Spot Training Amazon SageMaker Ground Truth Amazon Elastic Inference Multi-Model Endpoint AWS Marketplace for Machine Learning Amazon SageMaker Neo Amazon SageMaker

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

開発環境 • インスタンスタイプを選んで⽴ち上げるだけ • フレームワークはプリインストール • ノートブックインスタンス作成・起動時にスクリプト実⾏も • https://github.com/aws-samples/amazon-sagemaker-notebook-instance-lifecycle- config-samples Jupyter Notebook/Lab を簡単に使える

Slide 21

Slide 21 text

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 • GUI (マネージメントコンソール) からでも

Slide 22

Slide 22 text

Amazon SageMaker 開発 Jupyter Notebook/Lab Amazon S3 The Jupyter Trademark is registered with the U.S. Patent & Trademark Office.

Slide 23

Slide 23 text

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. ビルド済みのコンテナイメージが 予め用意されている

Slide 24

Slide 24 text

Amazon SageMaker 開発 学習 Amazon EC2 P3 Instances Jupyter Notebook/Lab Amazon S3 The Jupyter Trademark is registered with the U.S. Patent & Trademark Office. トレーニングでのメリット: • API 経由で学習⽤ インスタンスを起動、 学習が完了すると⾃動停⽌ • ⾼性能なインスタンスを 秒課⾦でスポット インスタンスも使えて、 簡単にコスト削減 • 指定した数の インスタンスを同時起動、 分散学習も容易

Slide 25

Slide 25 text

Amazon SageMaker 開発 学習 Amazon EC2 P3 Instances Jupyter Notebook/Lab Amazon S3 The Jupyter Trademark is registered with the U.S. Patent & Trademark Office.

Slide 26

Slide 26 text

Amazon SageMaker 開発 学習 推論 Amazon EC2 P3 Instances Jupyter Notebook/Lab Endpoint/ Batch transform Amazon S3 Amazon ECR The Jupyter Trademark is registered with the U.S. Patent & Trademark Office.

Slide 27

Slide 27 text

Amazon SageMaker は⾒⽅を変えると 機械学習に特化したコンテナ オーケストレーションサービスという理解も • 環境は Docker コンテナとして⽤意 • トレーニング・デプロイ先の環境はインスタンスタイプ・台数を選ぶ • Input パラメータとしてインスタンスタイプやトレーニングデータの path を指定、 それ⾃体は Kubernetes で書くのとそれほど変わらないはず • 過去のトレーニングジョブの履歴・⽣成物が残るため、実験管理も容易

Slide 28

Slide 28 text

ワークフロー構築を助けるツール • 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

Slide 29

Slide 29 text

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 でエンドポイント作成

Slide 30

Slide 30 text

EKS (Kubernetes) か SageMaker か • トータルのコスト (TCO) • トレーニング・推論に使う CPU/GPU • 基盤⾃体の運⽤負荷 • セキュリティ・コンプライアンス・ガバナンス • B-to-B で提供する場合は特に重要 • どういう観点が必要かは AWS Well-Architected Framework のセキュリティの柱を参照 ⼀般的論として、 ⾃由度を⼿に⼊れるためには運⽤負荷の増加を受け⼊れる必要がある

Slide 31

Slide 31 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 32

Slide 32 text

TCO の考え⽅: 4種類のコスト Capability 考慮事項 インスタンスの プロビジョン・運⽤ • インスタンスのプロビジョン、環境構築の容易さ • パッチ適⽤等のメンテナンス • スポットインスタンスなどの活⽤によるコスト削減 セキュリティ・ コンプライアンスの管理 • 転送時・保管時のデータ暗号化 • 権限管理 • 証跡管理 • SOC, PCI, ISO, FedRAMP, HIPAA などのコンプライアンス対応 インフラ パフォーマンス最適化 • トレーニングジョブ毎の独⽴したパフォーマンス • 分散学習に適したストレージやネットワークのチューニング • 推論のための最適なインフラ選択とチューニング ⾼可⽤性インフラ管理 • データやモデル成果物の可⽤性・耐久性 • トレーニング・推論環境のモニタリング、ログの取得や管理 • 推論環境の可⽤性 (Multi-AZ 対応やオートスケーリング)

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

インスタンスの管理とコスト • SageMaker • トレーニングごとにインスタンスを⽴ち上げ、終わったら勝⼿に落ちる • Kubernetes • クラスタを共有するので、無駄なコストをかけないためには Cluster Autoscaler などで ジョブが流れない時にはインスタンスを落とすようにする必要がある GPU の利⽤率が低い時間帯がある場合、 インスタンスの上げ下げがコストに⼤きく効いてくる

Slide 35

Slide 35 text

SageMaker Operator for Kubernetes • SageMaker ⾃体は便利そうだが既存 Kubernetes クラスターがあり、 SageMaker API や SDK の使い⽅を覚えるのが⾯倒な場合などに • Kubernetes でパイプラインとワークフローの作成・ ML ワークロードのオーケストレーションを⾏いながらも部分的に SageMaker でモデルのトレーニング・チューニング・デプロイ • SageMaker 側でインフラを完全にマネージ • Managed Spot Training や分散学習などの機能も利⽤可能 Kubernetes から Amazon SageMaker を呼びモデルをトレーニング・チューニング・デプロイ Amazon SageMaker Kubernetes

Slide 36

Slide 36 text

選択肢 • Kubernetes を Amazon EKS で運⽤ • Kubernetes に慣れている企業 • Kubeflow を使った構成例を紹介した • Kubernetes から Amazon SageMaker を呼ぶ (mix) • 既存 Kubernetes クラスターから、機械学習部分だけ切り出し • SageMaker Operator for Kubernetes で呼ぶ • Amazon SageMaker を使う • TCO の⾯で多くのスタートアップにとって合理的 • 環境は Docker コンテナで管理できる

Slide 37

Slide 37 text

まとめ • 機械学習ワークロードをコンテナ管理するメリットは多⼤にある • 環境の統⼀化・再現性・追跡可能性 • オーケストレーションはいくつかの選択肢がある • TCO も考慮して最適なものを選択、多くの場合は Amazon SageMaker が第⼀候補 • ツール選定は開発速度にも影響 • 選択肢が多すぎて迷ったら AWS の Solutions Architect に相談

Slide 38

Slide 38 text

Thank you! © 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. Yoshitaka Haribara @_hariby