LoginSignup
6
3

More than 5 years have passed since last update.

【fast.ai】AWS Lambda Deployment 解説

Posted at

概要

本記事はfast.aiのwikiのAWS Lambda DeploymentでmodelをAWS Lambda でproductionに移行するtutorialの日本語版です。

筆者の理解した範囲内で記載します。

都合上、local developmentは省き、直接productionへdeployする方法を紹介させていただきます。

AWS Lambda Deploymentとは

このガイドは Amazon API GatewayAWS Lambda を用いて Serverless Application Model (SAM) のフレームワークのを通してLambda と API Gateway AWS servicesを相互に繋げるものとなっております。

AWS Lambda

公式ページから

AWS Lambda を使用することで、サーバーのプロビジョニングや管理をすることなく、コードを実行できます。課金は実際に使用したコンピューティング時間に対してのみ発生し、コードが実行されていないときには料金も発生しません。

Amazon API Gateway

公式ページから

API Gateway では、トラフィック管理、認可とアクセスコントロール、モニタリング、API バージョン管理など、最大数十万規模の同時 API コールの受け入れと処理に伴うすべてのタスクを取り扱います。

料金

GPUを継続的に動かすと、莫大な料金が発生しかねないですが、

AWS Lambda を用いると個人利用の範囲内でしたら実質ゼロ円に抑えることができます。

必要条件

以下のアプリケーションをローカルマシンにインストールして下さい。

準備

S3 Bucket作成

最初に model と Lambda functions/layers をZIP filesにてdeployするS3 bucketを作成しましょう。以下のコードで作成できます。

aws s3 mb s3://あなたのS3 Bucket名

S3へ鍛えたmodelをアップロード

SAM applicationではPyTorch modelをTorchScript 形式でS3に保存しなければいけません。

fast.ai lesson 1をもとに、modelを鍛えて、JIT formatにてS3へ鍛えたmodelをアップロードする手順は こちらから.

SAMを用いてdeploy

SAMを用いてdeployするので、以下のコマンドでプロジェクトをダウンロードして下さい。

wget https://github.com/fastai/course-v3/raw/master/docs/production/aws-lambda.zip

unzip aws-lambda.zip

Application 概要

画像認識モデルを推論するために、lambda function は PyTorch model を S3からダウンロードしてメモリにloadします。

JSON object を通して画像のURLを読み込んで、アプリケーションはimageをダウンロードして、ピクセルをPyTorch Tensor object に変換した後 PyTorch modelへ予測を行い、最も確率の高いクラス名 とその係数を出力します。

グラフ化したアプリケーションの概要は以下の通りです。

.
├── event.json          <-- local testing のためのpayload
├── pytorch             <-- ソースコード
│   ├── __init__.py
│   ├── app.py          <-- Lambda function コード
└──template.yaml        <-- SAM テンプレート

SAM Template についての詳細は こちら

Python を用いた Lambda functions についての詳細は こちら

Request方法

Lambda function に向けてJSON形式にて予測するための画像URLを入力。

例:

{
    "url": "画像URL"
}

リスポンスformat

Lambda functionを通して、JSON object にてステータスコードとともに、bodyにて予測されたclass と confidence scoreが返ってきます。

例:

{
    "statusCode": 200,
    "body": {
        "class": "english_cocker_spaniel",
        "confidence": 0.99
    }
}

Lambda Layer

Lambda functionにcodeを追加するためにLambda Layerを用いることができます。Layer とは ZIP 形式にて、ライブラリやランタイムや他の依存環境を含んだもので、汎用的なものを直接自分のパッケージに含めずに用いることができます。

このプロジェクトでは PyTorch library が含まれている公開 Lambda Layerを用います。こちらのLambda Layer は次のregionにて用いることができます: us-west-2,us-east-1,us-east-2,eu-west-1,ap-southeast-1,ap-southeast-2,ap-northeast-1,eu-central-1. デフォルトは us-east-1です。

default region で(i.e. us-east-1)コードを実行しない場合は、 template.yaml にての AWS_REGION を正しいregionに書き直して下さい。 (e.g. us-west-2).

...
  LambdaLayerArn:
    Type: String
    Default: "arn:aws:lambda:AWS_REGION:934676248949:layer:pytorchv1-py36:1"
        ...

パッケージ化してdeploy

SAM は CodeUri property にてアプリケーションのライブラリや依存環境を規定します。

...
    PyTorchFunction:
        Type: AWS::Serverless::Function
        Properties:
            CodeUri: pytorch/
            ...

次に、以下のコマンドでLambda function をS3へとパッケージ化しましょう。

sam package \
    --output-template-file packaged.yaml \
    --s3-bucket あなたのS3 Bucket名

次に、 Cloudformation Stack にてSAM resource をdeployしましょう。default parameters の S3 Bucket名 と object keyを--parameter-overrides option にて上書きし deploy コマンドを実行しましょう。

sam deploy \
    --template-file packaged.yaml \
    --stack-name pytorch-sam-app \
    --capabilities CAPABILITY_IAM \
    --parameter-overrides BucketName=REPLACE_WITH_YOUR_BUCKET_NAME ObjectKey=fastai-models/lesson1/model.tar.gz

SAM(Serverless Application Model)についての詳細はこちらから

deployが完了した後以下のコマンドで API Gateway Endpoint URLを取得しましょう。

aws cloudformation describe-stacks \
    --stack-name pytorch-sam-app \
    --query 'Stacks[].Outputs[?OutputKey==`PyTorchApi`]' \
    --output table

Lambda function のログを取得する。

問題解決の一環として、 SAM CLI はsam logsコマンドを通してLambda Functionのログを取得することができます。ただ単にログを記載するのみならず、debugに役立つ機能も兼ね備えています。

NOTE: SAMのみならず、全ての AWS Lambda functionsに用いることができます。

sam logs -n PyTorchFunction --stack-name pytorch-sam-app --tail

Lambda function logs を取得する方法の詳細は こちらから

片付け

Serverless Application を削除するには以下のAWS CLI Commandを実行して下さい。

aws cloudformation delete-stack --stack-name pytorch-sam-app
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3