Terraformを用いたSageMaker Endpointの構築
はじめに
こちらのブログを参考に以下のようなSageMaker EndpointをInvokeするEndpointを構築してみました。
API Gateway EndpointからSageMaker Endpointを呼び出すLambda関数をトリガーし、予測を行います。
コードはGitHubに上げてあります。
https://github.com/suaaa7/iris-data-endpoint
動作環境
- macOS Mojave (10.14.6)
- Terraform (0.12.6)
ファイル構成
$ tree
.
├── LICENSE
├── Makefile
├── README.md
├── config.tf
├── main.tf
├── modules
│ ├── apigateway
│ │ └── main.tf
│ ├── iam
│ │ └── main.tf
│ ├── lambda
│ │ ├── main.tf
│ │ ├── src
│ │ │ └── lambda_function.py
│ │ └── upload
│ │ └── lambda_function.zip
│ └── sagemaker
│ └── main.tf
├── request.sh
├── test.csv
└── variables.tf
本当はmain.tf
を
main.tf
variables.tf
outputs.tf
に分けるべきだと思うのですが、分けるほどのコード量ではなかったので、main.tf
にまとめてしまっています。
SageMaker Endpointについて
推論用インスタンスを立てるために設定が必要な項目はModel・EndpointConfig・Endpointの3つです。
ModelはどのS3のデータをロードするのかと、どのECRのイメージを利用するのかを保持します。
今回は、Irisデータセットのサンプルとしてすでに構築してあるモデル、Dockerイメージを利用します。
- Location of model artifacts
s3://aws-machine-learning-blog/artifacts/decision-trees/model.tar.gz
- Location of inference code image
305705277353.dkr.ecr.us-east-1.amazonaws.com/decision-trees-sample:latest
参考
TerraformでSageMakerのデプロイ・モデルの更新をする
https://medium.com/mixi-developers/terraformでsagemakerのデプロイ-モデルの更新をする-c1340fa0340d
API Gateway + Lambdaついて
API GatewayとLambdaのモジュールをまとめるか悩みましたが、分けてみました。
このあたりのベストプラクティスが分かっていないので、毎回悩みます。
参考
Serverless Applications with AWS Lambda and API Gateway
https://learn.hashicorp.com/terraform/aws/lambda-api-gateway
動作確認
初期化
$ terraform init
構築
SageMaker EndpointのCreatingには10分ほどかかります。
$ terraform apply
予測
csvには以下のような推論データを含めます。
- Sepal Length
- Sepal Width
- Petal Length
- Petal Width
10,10,10,10
<base_url>
には、TerraformのOutputsに出力されるbase_url
を指定してください。
$ curl -X POST -H "Content-Type: text/csv" -d "@test.csv" <base_url>
{"code": 200, "variant": "variant-a", "prediction": "virginica"}
後片付け
$ terraform destroy
Author And Source
この問題について(Terraformを用いたSageMaker Endpointの構築), 我々は、より多くの情報をここで見つけました https://qiita.com/suaaa7/items/32d65d7304d0149ff893著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .