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

Container Diversity on AWS

mats
June 18, 2020

Container Diversity on AWS

Amazon SageMaker, AWS Batch, AWS Step Functions についてコンテナ側から触れてみました。

mats

June 18, 2020
Tweet

More Decks by mats

Other Decks in Technology

Transcript

  1. © 2020, Amazon Web Services, Inc. or its Affiliates. Kazuki

    Matsuda @mats16k Startup Solutions Architect Amazon Web Services Japan 2020-06-18 Container Diversity on AWS Amazon ECS / Kubernetes だけじゃない
  2. © 2020, Amazon Web Services, Inc. or its Affiliates. Kazuki

    Matsuda (@mats16k) Startup Solutions Architect Amazon Web Services Japan --- インターネット広告代理店(のアドサーバ作っている部⾨)でインフラエンジニアに ➡ アドテク系スタートアップ⼆⼈⽬のエンジニア(SRE、アプリ開発、情シス、データエンジニア、採⽤) ➡ AWS でスタートアップ⽀援 & コンテナのスペシャリスト AWS Fargate / AWS Lambda あたりが好きです 最近、 AWS Step Functions も好きです
  3. © 2020, Amazon Web Services, Inc. or its Affiliates. コンテナオーケストレーションツールの役割

    • (ざっくり⾔うと)やりたいことを実現するために必要なことを、コンテナ の特性をうまく活かしつつ実現してくれる • 例:可⽤性の⾼い Web アプリケーションを提供するために、、、 • Healthy なコンテナをロードバランサー配下に⼊れてくれる • コンテナが異常終了している場合に、必要な台数起動してくれる • 「やりたいこと」と「オーケストレーション」のマッチングが⼤事 • ECS や Kubernetes は基本機能で、⼤部分のユースケースをサポート • ECS や Kubernetes が万能 • ⼤部分のユースケースが本質的には同質ということを意味する
  4. © 2020, Amazon Web Services, Inc. or its Affiliates. アジェンダ

    • コンテナオーケストレーションツールのおさらい • AWS 上の多様なコンテナワークロード • Amazon SageMaker • AWS Batch • AWS Step Functions with Amazon ECS • まとめ
  5. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    上の多様な コンテナワークロード
  6. © 2020, Amazon Web Services, Inc. or its Affiliates. Amazon

    SageMaker 機械学習領域でもコンテナは使われている CUDA, cuDNN トレーニングスクリプト train.py Deep Learning Framework スクリプトの実行に必要なものを コードで記述し一箇所にまとめる Docker image
  7. © 2020, Amazon Web Services, Inc. or its Affiliates. Amazon

    SageMaker 推論 推論 ⼤量のCPU や GPU 継続的なデプロイ 様々なデバイスで動作 ⼤量の GPU ⼤規模データの処理 試⾏錯誤の繰り返し 学習 学習に使うコードを記述 ⼩規模データで動作確認 開発 典型的な機械学習の流れ
  8. © 2020, Amazon Web Services, Inc. or its Affiliates. 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 (マネージメントコンソール) からでも
  9. © 2020, Amazon Web Services, Inc. or its Affiliates. Amazon

    SageMaker Jupyter Notebook/Lab Amazon S3 The Jupyter Trademark is registered with the U.S. Patent & Trademark Office. 学習 開発用インスタンス
  10. © 2020, Amazon Web Services, Inc. or its Affiliates. 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. ビルド済みのコンテナイメージが予め用意されている 学習 開発用インスタンス
  11. © 2020, Amazon Web Services, Inc. or its Affiliates. Amazon

    SageMaker 学習用コンテナ Amazon EC2 P3 Instances Jupyter Notebook/Lab Amazon S3 The Jupyter Trademark is registered with the U.S. Patent & Trademark Office. トレーニングでのメリット: • API 経由で学習用インスタ ンスを起動、 学習が完了すると自動停止 • 高性能なインスタンスを 秒課金で、 簡単にコスト削減 • 指定した数のインスタンス を同時起動、 分散学習も容易 学習 開発用インスタンス
  12. © 2020, Amazon Web Services, Inc. or its Affiliates. Amazon

    SageMaker 学習用コンテナ Amazon EC2 P3 Instances Jupyter Notebook/Lab Amazon S3 The Jupyter Trademark is registered with the U.S. Patent & Trademark Office. 学習 開発用インスタンス
  13. © 2020, Amazon Web Services, Inc. or its Affiliates. Amazon

    SageMaker 推論用コンテナ Jupyter Notebook/Lab Endpoint Amazon S3 Amazon ECR The Jupyter Trademark is registered with the U.S. Patent & Trademark Office. 推論 開発用インスタンス
  14. © 2020, Amazon Web Services, Inc. or its Affiliates. 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.4.1") SageMaker Python SDK
  15. © 2020, Amazon Web Services, Inc. or its Affiliates. 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.4.1") estimator.fit("s3://mybucket/data/train") # fit でトレーニング SageMaker Python SDK
  16. © 2020, Amazon Web Services, Inc. or its Affiliates. 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.4.1") estimator.fit("s3://mybucket/data/train") # fit でトレーニング predictor = estimator.deploy(initial_instance_count=2, # 2以上にすると Multi-AZ instance_type="ml.m5.xlarge") # deploy でエンドポイント作成 SageMaker Python SDK 環境をコードで表現して、それに合わせて実環境を動作させてくれる
  17. © 2020, Amazon Web Services, Inc. or its Affiliates. Amazon

    SageMaker まとめ • Amazon SageMaker は機械学習ワークロードに特化した コンテナオーケストレーションツール • (ちなみに裏側では Amazon ECS が使われています) • もちろん、同様のことを Amazon ECS / Kubernetes で実装することは 技術的には可能 • やりたいことがよくあるユースケースなのであれば、既存の実装や ベストプラクティスに乗っかるべき • 例)Web サービスの場合に、healthy なコンテナのみをロードバランサー配下に ⼊れるなど
  18. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Batch - バッチコンピューティングとは 本セッションにおける バッチコンピューティング とは、シミュレーションなど 負荷の⾼い計算をスーパーコンピュータやクラスタ等で順次実⾏していくような 処理 例: • 設計製造での最適化を⾏うためのパラメータ探索 • モンテカルロシミュレーションによる⾦融商品のプライシング・リスク計算 • ゲノム分析などの⼤規模解析 • 3DCG レンダリングや動画エンコードなどのメディア処理
  19. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Batch - バッチコンピューティングとは JobA JobB JobF JobC JobD JobE 毎⽇23:00起動 ⼟曜00:00起動 俗に⾔う『バッチ処理』は 2 種類ある A) 定型業務における『バッチ処理』 夜間バッチのように、予めジョブの起動や順序を定義しておいて ジョブの実⾏・管理をするシステム(ジョブネット等) ミドルウェア例:Hinemos、SOS JobScheduler etc. B) ⼤規模計算における『バッチ処理』 スーパーコンピュータ等で⾏う⼤規模科学計算、 CGレンダリング、 機械学習における学習プロセス、ゲノム分析などのアドホックな計算 ミドルウェア例:SGE、Torque、OpenLAVA etc. 5:00までに完了 AWS Batch はこちら JobB JobA JobA JobB キューイング セントラルマネージャ submit submit dispatch dispatch コンピューティングノード群 A) B) AWS Batch は負荷の⾼いコンピューティングを 効率的に⾏うためのサービス
  20. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Batch のアーキテクチャ ユーザ ジョブ ジョブ定義 ジョブキュー
  21. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Batch のアーキテクチャ ユーザ ジョブ ジョブ定義 ジョブキュー ジョブ定義 ジョブを作成する際のテンプレート パラメータ例: • コンテナイメージ • コンテナ内での実⾏コマンド • 実⾏コマンドに渡されるパラメータ • 再試⾏戦略・タイムアウト • ジョブの使⽤する IAM Role • 要求 vCPU、メモリ、GPU • マルチノードを利⽤するか • mount point • ulimit ※ 多くのパラメータはジョブ作成時に上書き可能
  22. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Batch のアーキテクチャ ユーザ Elastic Container Registry ジョブ ジョブ定義 ジョブキュー コンテナイメージ Docker Hub コンテナレジストリ
  23. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Batch のアーキテクチャ ユーザ Elastic Container Registry Elastic Container Service Cluster EC2 インスタンス ジョブ ジョブ定義 ジョブキュー コンテナイメージ Docker Hub コンテナレジストリ コンピューティング環境 S3 Elastic File System コンテナ
  24. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Batch のアーキテクチャ ユーザ Elastic Container Registry Elastic Container Service Cluster EC2 インスタンス ジョブ ジョブ定義 ジョブキュー コンテナイメージ Docker Hub コンテナレジストリ コンピューティング環境 S3 Elastic File System コンテナ コンピューティング環境 実際に計算を⾏う ECS クラスター パラメータ例: • マネージド or アンマネージド • (オプション)ユーザ独⾃の AMI • (オプション)EC2 起動テンプレート • オンデマンド or スポット • 最⼩ vCPU 数、最⼤ vCPU 数 • 最⼩ vCPU 数を 0 に設定することで、ジョ ブの無い時はインスタンスを起動しないこ とが可能 • 許可されたインスタンスタイプ • M4、C4、R3 の中から合うものが選択され る Optimal や、インスタンスファミリー 単位での指定も可能 • VPC、Subnet、セキュリティグループ • Placement Group
  25. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Batch まとめ • AWS Batch はバッチコンピューティングに特化した コンテナオーケストレーションツール • (これも裏側では Amazon ECS が使われています) • 同様のことを Amazon ECS / Kubernetes で実装することは可能(再掲) • スポットインスタンスを利⽤したコスト最適化を⾏いつつ、中断時のハンド リングもちゃんとやりたいなど、バッチの作り込みはなかなか⼤変
  26. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Step Functions q 分散アプリケーション・マイクロサービスの全体 を「ステートマシン」(後述) と呼ばれる仕組みで オーケストレートできる q 定義したステートマシンは AWS コンソールから 「ワークフロー」(右図) という形式で⾒やすく可 視化できる q ステートマシンの各ステップの実⾏履歴をログか ら追跡できる
  27. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Step Functions ⽇常のステートマシンの例 : ⾃動販売機 ⼊⾦待ち ジュースの選択 ジュースの 払い出し ⾃動販売機 ⾦額 釣銭・ジュース 利⽤者が⼊⾦するまで待機する。 ジュースの購⼊に⼗分な⾦額が⼊⾦されたら、⾦額を次の プロセスに伝える。 例えば 3 つのプロセスに分離できる。 利⽤者がジュースを選択するまで待機する。 ジュースが選択されたら、⼊⾦額からジュースの⾦額を差し 引き、釣銭の⾦額を計算する。 釣銭の⾦額と、選択されたジュースを次のプロセスに伝え る。 釣銭と選択されたジュースを実際に受け取り⼝に払い出す。 この 2 つのプロセスは並列に実⾏できる。 釣銭の 払い出し
  28. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Step Functions ASL (Amazon States Language) と呼ばれる JSON 形式の⾔語でワークフローを定義 ステートマシンの作成
  29. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Step Functions • AWS Lambda : Lambda 関数の実⾏ • Amazon DynamoDB : 既存のアイテムの取得、新規アイテムの登録 • AWS Batch : ジョブの起動、ジョブ完了の待機 • Amazon Elastic Container Service : ECS/Fargate タスクの実⾏ • Amazon Simple Notification Service : SNS トピックへのメッセージ送信 • Amazon Simple Queue Service : SQS キューへのメッセージ送信 • AWS Glue : Glue ジョブの実⾏ • Amazon SageMaker : トレーニングジョブ、トランスフォームジョブの起動 呼び出し可能な AWS のサービス
  30. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Step Functions の例 API Gateway Step Functions workflow コンテナ実行 並列化 コンテナ実行 文字起こし
  31. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Step Functions の例 API Gateway Broadcast Containers Step Functions workflow コンテナ実行 Amazon ECS on Fargate 並列化 コンテナ実行 Amazon Chime https://chime.aws/12345 S3 文字起こし 録画ファイル src_url: https://chime.aws/12345 dst_url: - rtmp://a.youtube.com - s3://mybucket/meeting.mp4 s3://mybucket/meeting.mp4 rtmp://a.youtube.com
  32. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Step Functions の例 API Gateway Broadcast Containers Step Functions workflow コンテナ実行 Amazon ECS on Fargate 並列化 コンテナ実行 Amazon Chime https://chime.aws/12345 S3 文字起こし Transcribe 録画ファイル • コンテナが異常終了等した際のリトライ • コンテナの処理終了の検知 • コンテナ以外を含むジョブ内でのコンテナ のハンドリング Lambda src_url: https://chime.aws/12345 dst_url: - rtmp://a.youtube.com - s3://mybucket/meeting.mp4 s3://mybucket/meeting.mp4 rtmp://a.youtube.com
  33. © 2020, Amazon Web Services, Inc. or its Affiliates. AWS

    Step Functions まとめ • AWS Step Functions はコンテナタスクをラップする⾃由度の⾼い コンテナオーケストレーションツール • (AWS の他のサービスとも連携可能) • AWS Faregare 上で実⾏することで、フルサーバレス化することが出来る • Amazon ECS はコントロールプレーンの管理が不要 • AWS Fargate は仮想マシンの管理が不要 • コンテナが全体の⼀部でしか無いようなジョブも管理することが出来る
  34. © 2020, Amazon Web Services, Inc. or its Affiliates. まとめ

    • コンテナオーケストレーションツールでやりたいことを実装する • やりたいことを起点にオーケストレーションツール(実装⽅法)を選定する • AWS は多種多様なワークロードをサポートできるサービスを提供している • その裏側ではコンテナ技術が使われているものも多い • コンテナの基礎的なところを理解していると強みになる • コンテナ/オーケストレーションツールに使われない。使う側に。 • コンテナを本質的に理解していることが重要(再) • 判断が難しい場合は SA までご相談を