[レポート] サーバレスAI推論 with AWS Lamba #SVS315 #reinvent 2019

AWS事業本部 梶原@福岡オフィスです。 AWS re:Invent 2019に参加していました

このエントリではAWS re:Invent 2019で開催されていました。「Serverless AI inference with AWS Lambda」ワークショップに参加しましたのでレポートします。
また、後日、同セッションの資料も公開されておりましたので、ご興味があるかたは以下のリンクもご参照ください

SVS315 PDF資料

公開リポジトリ

ワークショップ概要

SVS315 Serverless AI inference with AWS Lambda https://www.portal.reinvent.awsevents.com/connect/sessionDetail.ww?SESSION_ID=98007

Learn how to ask questions of a trained model using a serverless architecture. In this session, you start by preprocessing data using Amazon Simple Storage Service (Amazon S3) and AWS Lambda then build and train your AI model using an Amazon SageMaker notebook. Once the model is trained and hosted on Amazon S3, you run your real-time inferences with Amazon API Gateway and Lambda.

サーバーレスアーキテクチャを使用して、学習モデルに問合せする方法を学びます。 このセッションでは、Amazon Simple Storage Service(Amazon S3)とAWS Lambdaを使用してデータを前処理し、Amazon SageMakerノートブックを使用してAIモデルを構築およびトレーニングします。 モデルをトレーニングしてAmazon S3でホストしたら、Amazon API GatewayとLambdaを使用してリアルタイムの推論を実行します

スピーカー

  • Justin McWhirter - Solutions Architect, Amazon Web Services
  • Collin Forrester - Solutions Architect, Amazon Web Services

レポート

アジェンダ

  • What is Wild Rydes?: 野生の乗り物って何?
  • Architecture overview: アーキテクチャ概要
  • Section 0: Set up development environment: 環境構築
  • Section 1: Gather and process ride data: データの収集と搭乗データの処理
  • Section 2: Build and train model:モデルの作成とトレーニング
  • Section 3: Make inferences: 推論処理の作成

What is Wild Rydes?: 野生の乗り物って何?

  • http://www.wildrydes.com/
  • (動画をみたていただけるとはやいのですが、ざっくりいうと街中をはしっている乗りたいユニコーンを呼べるサーバレスのWebアプリになります)
  • 頻繁にユニコーンが乗車後にメンテナンスを要求しています。内容は角にダメージを折った、蹄が汚れている、輝きがないなどです
  • そのユニコーンが乗車後にメンテナンスが必要になる確立を推論して出したいと考えています。

Architecture overview: アーキテクチャ概要

  • 上部
    • RAWデータ処理部分
  • 中部
    • モデル作成部分
  • 下部
    • 推論実施部分

Section 0: Set up development environment: 環境構築

  • Cloud9環境の構築
  • リソースの取得
    • git clone https://github.com/jmcwhirter/aws-serverless-workshops/

Section 1: Gather and process ride data: データの収集と搭乗データの処理

  • (実際のWorkshopでは、時間短縮の為、CloudFormationで一気に作成を行いました。)
  1. RAWデータ用のバケット作成
  2. メッセージ処理用のSQSキューの作成
  3. S3バケットに保存されたjsonを処理するLambdaを作成しますfan-out)
    1. S3への保存をトリガーとしてLambdaを起動します
    2. jsonデータを分割してsqsキューにメッセージを登録します
  4. SQSキューに登録されたデータをS3に保存するLambdaを作成します
    1. 提供されたLabmda関数をアップロードして作成します
    2. メッセージをS3(CSV)へ保存します。

Section 2: Build and train model:モデルの作成とトレーニング

  1. SageMaker Notebookの作成
    • インスタンスタイプ:ml.t3.xlarge
    • 他パラメータはデフォルト
  2. Jypter NoteBookの取得
    • curl https://raw.githubusercontent.com/jmcwhirter/aws-serverless-workshops/master/MachineLearning/2_ModelBuilding/notebooks/linear_learner.ipynb \ -o SageMaker/linear_learner.ipynb && exit
  3. Jypter Notebookの実行
    • 生成したS3バケット名を設定します
    • 各処理を実行します
      • Athenaでのデータ取得
      • 学習パラメータの設定
      • 学習の実施
    • S3へ学習したモデルをアップロードします
  4. S3の学習モデルの確認

Section 3: Make inferences: 推論処理の作成

  • (実際のWorkshopでは、CloudFormationでの実施(Short cut)も用意されていましたが、こちらのセクションは1つ1つ実施していく形でした)
  1. 実行Roleの確認
  2. Labmda関数の作成
    • 提供されたLabmda関数をアップロードして作成します
  3. Labmda関数を呼び出すAPI-Gatewayの作成
  4. APIゲートウェイの呼び出しテスト
    • curl -d '{ "distance": 30, "healthpoints": 30, "magicpoints": 1500, "TMAX": 333, "TMIN": 300, "PRCP": 100 }' -H "Content-Type: application/json" -X POST https://xxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod
  5. APIの呼び出しパラメータを変更して、戻ってきた値(メンテナンスを要求する割合)を確認します。

感想

各Lamda関数の実施している内容などはその場ではあまり理解できず、手順通りにすすめるだけでしたが、学習の実施やAPI-Gatewayからの推論処理の呼び出しなど一通りの処理を実施する形でした。実際に使用する際は細かい内容は各サービスによるところになるかと思いますので、フレームワークとして使いまわしがききそうな気がしています。