Amazon Sagemaker 推論モデルを構築、テストし、AWS Lambda にデプロイする

元記事

aws.amazon.com

Amazon SageMaker

  • MLモデルを迅速・簡単に構築、学習、デプロイできる完全マネージド型プラットフォーム
  • MLモデルをデプロイすると、モデルをホストし推論を提供するAPIエンドポイントを提供
  • AES IoT Greengrassも使用できる

SageMakerの柔軟性の高さ故にLambdaでモデルをホストしたくてもできない場合がある

どのような場合か

  • GPUが必要な場合にすべてのモデルをAWS Lambdaでホストできるわけではない
  • Lambdaのデプロイパッケージのサイズなど その他の制限により、Lambdaを使用できない場合も

Lambdaが使える場合の利点

  • 低コスト
  • イベントトリガー
  • シームレスなスケーラビリティ
  • スパイクリクエス

このチュートリアルでやったこと

推論を提供するLambda関数を構築、テスト、デプロイするためのパイプラインを作成

前提条件(使用経験)

  • SageMaker
  • CloudFormation
  • Lambda
  • Code suite

アーキテクチャの説明

https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2019/08/30/sagemaker-lambda-1.gif

AWS開発者用ツールを使用

Amazon SageMaker を使用してモデルをトレーニングすると、出力モデルが Amazon S3 バケットに保存されます。ファイルがバケットに入れられるたびに、AWS CloudTrail は Amazon CloudWatch イベントをトリガーします。このイベントは Lambda 関数を呼び出して、アップロードされたファイルが新しいモデルファイルかどうかを確認します。次に、このファイルを別の S3 バケットに移動させます。Amazon SageMaker は、モデルファイルとともに、チェックポイントなどの他のファイルを異なるフォルダに保存するため、これが必要です。ただし、AWS CodePipeline をトリガーするには、S3 バケットの特定のフォルダに特定のファイルが必要です。

そのため、モデルファイルが Amazon SageMaker バケットから宛先バケットに移動した後、AWS CodePipeline がトリガーされます。最初に、AWS CodePipeline は AWS CodeBuild を呼び出して以下の 3 つのアイテムを作成します。

  • Lambda 関数のデプロイパッケージ。
  • API を作成するための AWS サーバーレスアプリケーションモデル (AWS SAM) テンプレート。
  • 推論に役立つ Lambda 関数。 これが完了すると、AWS CodePipeline は変更セットを実行して、AWS SAM テンプレートを AWS CloudFormation テンプレートに変換します。テンプレートが実行されると、AWS CodeDeploy がトリガーされます。AWS CodeDeploy は Lambda 関数を呼び出して、最新バージョンのモデルで新しく作成された Lambda 関数が期待どおりに動作しているかどうかをテストします。その場合、AWS CodeDeploy はトラフィックを古いバージョンから最新バージョンの Lambda 関数のモデルに移行します。次に、デプロイが完了します。

## Lambda関数のデプロイパッケージの作成方法

github.com

  • AWS Cloud Formationテンプレート
    • パイプラインを生成するために作成
    • AWS CodeBuildがこの(どの?)パッケージを作成する方法について書かれている
    • APIとLambda 関数自体を生成するためのAWS SAMテンプレートの作成方法についても述べられている

下記がコード例

- "git clone ${GitRepository}"
- "cd ${GitRepositoryName}"
- "rm -rf .git "
- "ls -al "
- "aws s3 cp s3://${SourceBucket}/${SourceS3ObjectKey} ."
- "tar zxf ${SourceS3ObjectKey}"
- "ls -al"
- "pwd"
- "rm -f ${SourceS3ObjectKey}"
- "aws cloudformation package --template-file samTemplateLambdaChecker.yaml --s3-bucket ${SourceBucket} --output-template-file ../outputSamTemplate.yaml"
- "cp samTemplateLambdaChecker.yaml ../"
  1. Githubから必要なファイル(Lambda コード、Lambda関数チェッカー, SAMテンプレート)をダウンロード
  2. CodeBuildがS3から最新のmodel.tar.gzファイルをコピー(どこに?)

  3. 動作するには、Lambda関数にもApache MXNet依存関係が必要  - 今回使用するCloudFormationテンプレートは、Lambdaで推論を実行するために必要なMXNetライブライを含むLambdaレイヤーを作成する。

パイプラインのテスト

モデルファイルの異動先の

モデルファイルの異動先の新しいS3バケットを作成

S3バケットにファイルを追加

テンプレートのダウンロード

CloudFormation テンプレートを起動

シミュレーション

モデルのダウンロード

テスト

まとめ

TBW

お気持ち

TBW

疑問・わからないこと

TBW