Upgrade to Pro — share decks privately, control downloads, hide ads and more …

機械学習基盤を作るのに Kubernetes か SageMaker で迷っている人へ / M...

機械学習基盤を作るのに Kubernetes か SageMaker で迷っている人へ / ML Platform

最近「機械学習基盤を Kubernetes (Amazon EKS) で作るか Amazon SageMaker で作るか迷っています!」という質問を受けることがあります。モチベーションとしてコンテナ化による環境統一を目的とした上で、オーケストレーションツールとして Amazon EKS (Kubernetes + Kubeflow) や Amazon SageMaker が候補に挙がっているようです。機械学習基盤の選定においてトータルコスト (TCO) の観点から議論し、その答えを整理したいと思います。

Yoshitaka Haribara

March 17, 2020
Tweet

More Decks by Yoshitaka Haribara

Other Decks in Technology

Transcript

  1. © 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
  2. ⾃⼰紹介 • 針原 佳貴 (はりばら よしたか) • 博⼠ (情報理⼯学) •

    @_hariby hariby • https://speakerdeck.com/hariby/ • Startup Solutions Architect • スタートアップの技術⽀援・機械学習導⼊⽀援 • 最近は量⼦コンピュータの相談も • 好きなサービスは Amazon SageMaker
  3. なぜ Kubernetes で機械学習を⾏うのか︖ • ライブラリ・依存関係の管理をコンテナで容易に • 環境の統⼀化と、再現性・追跡可能性 • トレーニング・デプロイの際に 宣⾔的にインフラ環境をコントロールしたい

    • 環境のコード化とインフラの再現性 • ML パイプラインを構築するための Open Source エコシステム • Kubeflow Pipelines, MLflow, Metaflow,... • Custom Resource Definition (CRD) を使えば⾃分で書ける
  4. Upstream Kubernetes Kubernetes certified なマネージドサービス、 コミュニティによるツールと協調。 Highly available プロダクション環境向けに構築、 複数

    AZ にまたがり⾼い可⽤性。 Integrated AWS エコシステムとの統合: VPC Networking, Elastic Load Balancing, IAM Permissions, CloudWatch など。 Amazon Elastic Kubernetes Service (EKS)
  5. 構成例: 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
  6. 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()
  7. スタートアップで割とよくある状況 • Kubeflow on Amazon EKS などが作れて運⽤できるなら OK • Kubernetes

    / Kubeflow のバージョンアップ • モデルを作ってデプロイできる環境があれば、 それらがどう動いてるかは必ずしも重要ではない • 例えば Kubeflow 的な何かがあれば、ツールがどう動いているか⾃体は興味ない (Kubeflow はあくまでも⼀例です) • 多くの機械学習エンジニアにとって基盤の運⽤は結構つらいことが多い • 機械学習モデル構築と、インフラ・ワークフローエンジンを触るスキルセットの乖離 • あえて⾃分で作らない、という選択肢も必要
  8. トレーニングと パラメーター チューニング あらゆる規模で機械学習・深層学習モデルを構築・トレーニング・デプロイ トレーニング 環境の 整備と運⽤ 本番環境への デプロイ 学習データの

    収集と準備 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
  9. 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
  10. 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 (マネージメントコンソール) からでも
  11. Amazon SageMaker 開発 Jupyter Notebook/Lab Amazon S3 The Jupyter Trademark

    is registered with the U.S. Patent & Trademark Office.
  12. 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. ビルド済みのコンテナイメージが 予め用意されている
  13. Amazon SageMaker 開発 学習 Amazon EC2 P3 Instances Jupyter Notebook/Lab

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

    Amazon S3 The Jupyter Trademark is registered with the U.S. Patent & Trademark Office.
  15. 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.
  16. Amazon SageMaker は⾒⽅を変えると 機械学習に特化したコンテナ オーケストレーションサービスという理解も • 環境は Docker コンテナとして⽤意 •

    トレーニング・デプロイ先の環境はインスタンスタイプ・台数を選ぶ • Input パラメータとしてインスタンスタイプやトレーニングデータの path を指定、 それ⾃体は Kubernetes で書くのとそれほど変わらないはず • 過去のトレーニングジョブの履歴・⽣成物が残るため、実験管理も容易
  17. ワークフロー構築を助けるツール • 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
  18. 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 でエンドポイント作成
  19. EKS (Kubernetes) か SageMaker か • トータルのコスト (TCO) • トレーニング・推論に使う

    CPU/GPU • 基盤⾃体の運⽤負荷 • セキュリティ・コンプライアンス・ガバナンス • B-to-B で提供する場合は特に重要 • どういう観点が必要かは AWS Well-Architected Framework のセキュリティの柱を参照 ⼀般的論として、 ⾃由度を⼿に⼊れるためには運⽤負荷の増加を受け⼊れる必要がある
  20. TCO の考え⽅: 4種類のコスト Capability 考慮事項 インスタンスの プロビジョン・運⽤ • インスタンスのプロビジョン、環境構築の容易さ •

    パッチ適⽤等のメンテナンス • スポットインスタンスなどの活⽤によるコスト削減 セキュリティ・ コンプライアンスの管理 • 転送時・保管時のデータ暗号化 • 権限管理 • 証跡管理 • SOC, PCI, ISO, FedRAMP, HIPAA などのコンプライアンス対応 インフラ パフォーマンス最適化 • トレーニングジョブ毎の独⽴したパフォーマンス • 分散学習に適したストレージやネットワークのチューニング • 推論のための最適なインフラ選択とチューニング ⾼可⽤性インフラ管理 • データやモデル成果物の可⽤性・耐久性 • トレーニング・推論環境のモニタリング、ログの取得や管理 • 推論環境の可⽤性 (Multi-AZ 対応やオートスケーリング)
  21. 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
  22. インスタンスの管理とコスト • SageMaker • トレーニングごとにインスタンスを⽴ち上げ、終わったら勝⼿に落ちる • Kubernetes • クラスタを共有するので、無駄なコストをかけないためには Cluster

    Autoscaler などで ジョブが流れない時にはインスタンスを落とすようにする必要がある GPU の利⽤率が低い時間帯がある場合、 インスタンスの上げ下げがコストに⼤きく効いてくる
  23. SageMaker Operator for Kubernetes • SageMaker ⾃体は便利そうだが既存 Kubernetes クラスターがあり、 SageMaker

    API や SDK の使い⽅を覚えるのが⾯倒な場合などに • Kubernetes でパイプラインとワークフローの作成・ ML ワークロードのオーケストレーションを⾏いながらも部分的に SageMaker でモデルのトレーニング・チューニング・デプロイ • SageMaker 側でインフラを完全にマネージ • Managed Spot Training や分散学習などの機能も利⽤可能 Kubernetes から Amazon SageMaker を呼びモデルをトレーニング・チューニング・デプロイ Amazon SageMaker Kubernetes
  24. 選択肢 • Kubernetes を Amazon EKS で運⽤ • Kubernetes に慣れている企業

    • Kubeflow を使った構成例を紹介した • Kubernetes から Amazon SageMaker を呼ぶ (mix) • 既存 Kubernetes クラスターから、機械学習部分だけ切り出し • SageMaker Operator for Kubernetes で呼ぶ • Amazon SageMaker を使う • TCO の⾯で多くのスタートアップにとって合理的 • 環境は Docker コンテナで管理できる
  25. Thank you! © 2020, Amazon Web Services, Inc. or its

    affiliates. All rights reserved. Yoshitaka Haribara @_hariby