Slide 1

Slide 1 text

2022/04/27 iret tech labo AWS IoT Greengrass V2/SageMaker によるエッジAI推論の紹介 アイレットエンジニアと学ぶ技術勉強会「iret tech labo」#18

Slide 2

Slide 2 text

⾃⼰紹介 2 n 岩佐 孝浩(いわさ たかひろ) • クラウドインテグレーション事業部 開発第⼀セクション • AWS を活⽤したアプリケーションの要件定義・設計・開発が主業務 • 2020年11⽉⼊社 • AWS Top Engineers 2020/2021 (今年はどうでしょう・・・)

Slide 3

Slide 3 text

アジェンダ 3 1. はじめに (18:05~18:05) 2. エッジコンピューティング概要 (18:05~18:10) 3. IoT Greengrass V2 概要 (18:10~18:15) 4. SageMaker (Neo/Edge Manager) 概要 (18:15~18:20) 5. IoT Greengrass V2/SageMaker によるエッジAI推論のサンプル (18:20~18:45) 6. ディスカッション/Q&A (18:45-19:00)

Slide 4

Slide 4 text

1. はじめに 4

Slide 5

Slide 5 text

1.はじめに 5 n 前提 • AWS におけるエッジAI推論に興味のある⽅ • AWS/機械学習の基礎知識がある⽅ n ⽬的 • エッジAI推論の概要を理解する • IoT Greengrass V2 の概要を理解する • SageMaker/SageMaker Neo/SageMaker Edge Manager の概要を理解する • IoT Greengrass V2/SageMaker によるエッジAI推論のサンプルを確認する (これがメイン) n 免責 • 本⽇の内容は 雲勉@オンライン (2/24) の内容を少しだけ加筆したものになります。 • ボリュームが多めなので、駆け⾜で進めます。(時間が少しオーバーする可能性があります) • スピーカー⾃⾝がAIの専⾨家というわけではありませんので、ご了承ください。 • 途中で⽔分補給した場合はすいません・・・

Slide 6

Slide 6 text

1.はじめに (余談) 6 AWS のドキュメントは、2022年時点では英語版を参照することを強くお勧めします。 (機械翻訳の精度がイマイチなのか、中には内容が⼤きく異なる(古い︖)ものがあるため) 例)https://docs.aws.amazon.com/ja_jp/greengrass/v2/developerguide/uninstall-greengrass-core-v2.html

Slide 7

Slide 7 text

2. エッジコンピューティング概要 7

Slide 8

Slide 8 text

2.エッジコンピューティング概要 8 エッジコンピューティングとは、利⽤者や端末と物理的に近い場所に処理装置(エッジプラットフォーム)を 分散配置して、ネットワークの端点でデータ処理を⾏う技術の総称。(Wikipedia) メリット • 低レイテンシー(特に⾃動運転のようなリアルタイム性が求められるケースで重要) • セキュリティ・リスク低減 • 通信コスト抑制 デメリット • クラウドで享受できるメリットとトレードオフ • 垂直スケーリングが困難(クラウドの場合、ボタンを押すだけで超ハイスペックのリソースを利⽤可能) • 精緻なキャパシティ・プランニングが必要 • インフラ管理が必要 • …

Slide 9

Slide 9 text

2.エッジコンピューティング概要 9 エッジコンピュー ティング エッジAI エッジAI推論 • エッジコンピューティングは、AIに限定されるものではない。 (CDN もエッジコンピューティング) • エッジAIは、推論に限定されるものではない。(訓練も可能) • エッジAIの課題として、「省⼒化」「コンパクト化」が挙げられる。 • 数百コアCPUと数TBのメモリーを使⽤して、数⼗億のパラメー ターを調整することは、エッジでは⾮現実的。(2022年時点) • プロセッサーのmm2あたりのコストが上昇トレンドにある。 *1 • エッジAIに最適化するための⾊々な取り組みが進んでいる。 • Object Detection で、「空」を対象から除外するなど。(快晴 の空だと探知する物体が無いことが多いので) *1 IUUQTDBDNBDNPSHNBHB[JOFTTISJOLJOHBSUJGJDJBMJOUFMMJHFODFGVMMUFYU

Slide 10

Slide 10 text

3. IoT Greengrass V2 概要 10

Slide 11

Slide 11 text

3. IoT Greengrass V2 概要 – 概要 11 AWS IoT Greengrass is an open source Internet of Things (IoT) edge runtime and cloud service that helps you build, deploy and manage IoT applications on your devices. *1 IUUQTEPDTBXTBNB[PODPNHSFFOHSBTTWEFWFMPQFSHVJEFXIBUJTJPUHSFFOHSBTTIUNM IUUQTEPDTBXTBNB[PODPNHSFFOHSBTTWEFWFMPQFSHVJEFIPXJUXPSLTIUNM IUUQTBXTBNB[PODPNKQBCPVUBXTXIBUTOFXBXTJPUHSFFOHSBTTTVQQPSUXJOEPXTEFWJDFT 構成イメージ *2 • サポートされる OS は、Windows *3, Linux (Ubuntu, Raspberry Pi OS など) • サポートされる CPU は x86, ARM • Lambda Function を実⾏可能 • DLR (Deep Learning Runtime) を利⽤し たエッジAI推論が可能 • DLR は SageMaker Neo だけではなく、 TVM (Apache の DL Compiler Framework) でコンパイルしたモデルを ロードすることも可能

Slide 12

Slide 12 text

3. IoT Greengrass V2 概要 – 主要コンセプト 12 • Greengrass Core Device • エッジで Greengrass Core を実⾏するデバイス。AWS IoT Thing として登録される。 • AWS と通信・連携するエッジ側のデバイス。 • Greengrass Client Device • Greengrass Core Device と MQTT で通信・連携するデバイス。AWS IoT Thing として登録される。 • Greengrass Core Device をメッセージ・ブローカーとして、以下が可能となる。 • Client Device 間の通信 • Client Device と AWS 間の通信 • Greengrass Component • Greengrass Core Device で実⾏されるソフトウェア。 • ユーザーがコンポーネントを実装・登録することが可能。 • Deployment • Greengrass Component のインストールや構成変更を、 AWS から Greengrass Core Device へ指⽰。 IUUQTEPDTBXTBNB[PODPNHSFFOHSBTTWEFWFMPQFSHVJEFIPXJUXPSLTIUNMDPODFQUPWFSWJFX

Slide 13

Slide 13 text

4. SageMaker (Neo/Edge Manager) 概要 13

Slide 14

Slide 14 text

4. SageMaker (Neo/Edge Manager) 概要 - SageMaker 14 • AWS で機械学習するためのマネージド・サービス • 機械学習ワークフローに対応する機能が豊富に提供されており、SageMaker エコシステムが整備されて いる。 • 17種類の組み込みアルゴリズムが提供されており、少量のコードで機械学習が可能。 *1 • 主要な Deep Learning Framework がサポートされているため、既存のコードを少し変更するだけで SageMaker を利⽤可能。 *2 • 推論エンドポイントとして以下の利⽤が可能。 IUUQTEPDTBXTBNB[PODPNTBHFNBLFSMBUFTUEHDPNNPOJOGPBMMJNNPEFMTIUNM IUUQTEPDTBXTBNB[PODPNTBHFNBLFSMBUFTUEHGSBNFXPSLTIUNM エンドポイント ⽤途 4BHF.BLFS)PTUJOH4FSWJDFT ৗ࣌ىಈ &$ͷΠϝʔδ 4BHF.BLFS4FSWFSMFTT&OEQPJOUT 1SFWJFX 4FSWFSMFTT -BNCEBͷΠϝʔδ "TZODISPOPVT*OGFSFODF ඇಉظ 424&$"VUPTDBMJOHͷΠϝʔδ #BUDI5SBOTGPSN ਪ࿦Λόονॲཧ

Slide 15

Slide 15 text

15 4. SageMaker (Neo/Edge Manager) 概要 - SageMaker IUUQTEPDTBXTBNB[PODPNTBHFNBLFSMBUFTUEHIPXJUXPSLTNMDPODFQUTIUNM 機械学習ワークフローの例

Slide 16

Slide 16 text

4. SageMaker (Neo/Edge Manager) 概要 - SageMaker 16 Clean Prepare Train model Evaluate model Deploy to production Monitor SageMaker Studio (IDE) SageMaker Projects (CI/CD) SageMaker Model Building Pipelines (CI/CD) SageMaker Studio Notebooks (Jupyter Notebook) SageMaker Notebook Instances (Jupyter Notebook) SageMaker ML Lineage Tracking (Collecting Information) SageMaker Data Wrangler (Feature of SageMaker Studio) SageMaker Processing (SDK) SageMaker Debugger SageMaker Experiments SageMaker Edge Manager

Slide 17

Slide 17 text

4. SageMaker (Neo/Edge Manager) 概要 - SageMaker 17 Clean Prepare Train model Evaluate model Deploy to production Monitor SageMaker Clarify (Improving Models) Amazon Augmented AI (Workflow for Human Reviews) SageMaker Ground Truth (Labeling) SageMaker Ground Truth Plus (Labeling) SageMaker Feature Store SageMaker Training Compiler SageMaker Autopilot (Auto ML) SageMaker Canvas (Auto ML) SageMaker Hosting Services SageMaker Serverless Endpoints (Preview) SageMaker Elastic Inference SageMaker Inference Recommender SageMaker Model Registry SageMaker Neo (Compile) SageMaker Model Monitor

Slide 18

Slide 18 text

4. SageMaker (Neo/Edge Manager) 概要 – SageMaker Neo 18 Neo is a capability of Amazon SageMaker that enables machine learning models to train once and run anywhere in the cloud and at the edge. *1 Amazon SageMaker Neo を使⽤すると、デベロッパーは、クラウド内の SageMaker とエッジでサポー トされているデバイスで推論するために機械学習 (ML) モデルを最適化できます。 *2 SageMaker Neo は、シングルクリックでトレーニングされたモデルを最適化し、実⾏可能ファイルにコン パイルします。コンパイラは、機械学習モデルを使⽤して、クラウドインスタンスまたはエッジデバイス上の モデルの可能な限り最⾼のパフォーマンスを引き出すパフォーマンス最適化を適⽤します。 *2 IUUQTEPDTBXTBNB[PODPNTBHFNBLFSMBUFTUEHOFPIUNM IUUQTBXTBNB[PODPNKQTBHFNBLFSOFP

Slide 19

Slide 19 text

4. SageMaker (Neo/Edge Manager) 概要 – SageMaker Neo 19 モデルを シリアライズ SageMaker Neo が最適化 最適化された モデル

Slide 20

Slide 20 text

4. SageMaker (Neo/Edge Manager) 概要 – SageMaker Edge Manager 20 Amazon SageMaker Edge Manager provides model management for edge devices so you can optimize, secure, monitor, and maintain machine learning models on fleets of edge devices such as smart cameras, robots, personal computers, and mobile devices. *1 エッジにある機械学習モデルを管理・監視できます。(今回のサンプルでは監視はしません) IUUQTEPDTBXTBNB[PODPNTBHFNBLFSMBUFTUEHFEHFIUNM

Slide 21

Slide 21 text

5. エッジAI推論のサンプル 21

Slide 22

Slide 22 text

5. エッジAI推論のサンプル – 概要 22 今回は EC2 をエッジ側の端末とみなして、エッジAI推論を試してみます。 本⽇のサンプルを GitHub にアップロードしましたので、あわせてご参照ください。 https://github.com/iwstkhr/aws-iot-greengrass-edge-inference-sample 1. 事前準備 a. AWS リソース準備 b. 訓練スクリプト作成 c. 推論スクリプト作成 2. SageMaker a. SageMaker 訓練 b. SageMaker Neo コンパイル c. SageMaker Edge Manager パッケージング 3. Greengrass a. Greengrass Core セットアップ b. Greengrass Component 登録 (推論⽤) c. Greengrass Component デプロイ 4. エッジAI推論動作確認

Slide 23

Slide 23 text

5. エッジAI推論のサンプル – 概要 23

Slide 24

Slide 24 text

5. エッジAI推論のサンプル – AWS リソース準備 24 リソース 名前 ⽤途 IAM User greengrass-core-setup-user Greengrass Core セットアップ⽤ IAM Role sagemaker-execution-role SageMaker 実⾏ロール IAM Role GreengrassV2TokenExchangeRole Greengrass Core ⽤ロール S3 sagemaker-ml-model-artifacts-{account_id}-{region} ML Model 配置⽤ 事前に以下のAWSリソースを準備しておきます。 各リソースの詳細は、GitHub の CloudFormation Template を参照してください。 % aws cloudformation deploy --template-file ./cfn.yaml --stack-name greengrass-sample --capabilities CAPABILITY_NAMED_IAM Waiting for changeset to be created.. Waiting for stack create/update to complete Successfully created/updated stack - greengrass-sample

Slide 25

Slide 25 text

5. エッジAI推論のサンプル – AWS リソース準備 25 CloudFormation Console

Slide 26

Slide 26 text

5. エッジAI推論のサンプル – 訓練スクリプト作成 26 SageMaker で実⾏する訓練スクリプトを作成します。 今回は PyTorch の学習済みモデル VGG16 を利⽤します。 % pip install torch torchvision SageMaker で実⾏する訓練スクリプトは、以下を除いてローカルでの実装と同様です。 (詳細は公式ドキュメントを参照してください) • スクリプト実⾏引数と環境変数 • 訓練データ • FILE モードの場合、S3 から SageMaker Instance に⾃動でコピーされる。 • PIPE モードの場合、⾃⾝で実装が必要。(https://aws.amazon.com/jp/blogs/news/accelerate-model- training-using-faster-pipe-mode-on-amazon-sagemaker/) • モデル保存 • SM_MODEL_DIR 環境変数の値を利⽤(このディレクトリのデータは、⾃動的に S3 にアップロードされる)

Slide 27

Slide 27 text

5. エッジAI推論のサンプル – 訓練スクリプト作成 27 import argparse import os from datetime import datetime import torch from torchvision import models def fit(model: torch.nn.modules.Module) -> None: # Write some training codes... pass training.py 今回はトレーニングコードは割愛します。

Slide 28

Slide 28 text

5. エッジAI推論のサンプル – 訓練スクリプト作成 28 def save(model: torch.nn.modules.Module, path: str) -> None: suffix = datetime.now().strftime('%Y-%m-%d_%H-%M-%S') path = os.path.join(path, f'model-{suffix}.pt') # If you use `model.state_dict()`, SageMaker compilation will fail. torch.save(model, path) def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser() # hyperparameters sent by the client are passed as command-line arguments to the script. # input data and model directories parser.add_argument('--model_dir', type=str) parser.add_argument('--sm_model_dir', type=str, default=os.environ.get('SM_MODEL_DIR')) parser.add_argument('--train', type=str, default=os.environ.get('SM_CHANNEL_TRAIN')) parser.add_argument('--test', type=str, default=os.environ.get('SM_CHANNEL_TEST')) args, _ = parser.parse_known_args() return args training.py

Slide 29

Slide 29 text

5. エッジAI推論のサンプル – 訓練スクリプト作成 29 if __name__ == '__main__': args = parse_args() vgg16 = models.vgg16(pretrained=True) fit(vgg16) save(vgg16, args.sm_model_dir) training.py

Slide 30

Slide 30 text

5. エッジAI推論のサンプル – 推論スクリプト作成 30 Edge (Greengrass Core) で推論するためのスクリプトを作成します。 SageMaker Neo でコンパイルしたモデルは、DLR (Deep Learning Runtime) でロードします。 DLR の詳細は公式ページを参照してください。 % pip install dlr • PyTorch は、⼊⼒データとして `torch.Tensor` を想定しますが、SageMaker Neo でコンパイルし たモデルは、`numpy.ndarray` を想定します。 • Greengrass Core の “/greengrass/v2/work/vgg16-inference-component/images/” にある “*.npy” を推論するように実装しています。 • PyTorch 訓練済みモデルの⼊⼒形式は、公式ページを参照してください。 • “--interval” で定期的に推論するように実装しています。 • 実装にあたって、AWS 提供の “aws.greengrass.DLRImageClassification” や “aws.greengrass.DLRObjectDetection” も参考にしてください。

Slide 31

Slide 31 text

5. エッジAI推論のサンプル – 推論スクリプト作成 31 import argparse import glob import json import os import time import numpy as np from dlr import DLRModel def load_model() -> DLRModel: return DLRModel('/greengrass/v2/work/vgg16-component') inference.py

Slide 32

Slide 32 text

5. エッジAI推論のサンプル – 推論スクリプト作成 32 def load_labels() -> dict: path = os.path.dirname(os.path.abspath(__file__)) # See https://storage.googleapis.com/download.tensorflow.org/data/imagenet_class_index.json path = os.path.join(path, 'imagenet_class_index.json') with open(path, 'r') as f: labels = json.load(f) return labels def iter_files(path: str) -> str: path = path[:-1] if path.endswith('/') else path files = glob.glob(f'{path}/*.npy') for file in files: yield file def predict(model: DLRModel, image: np.ndarray) -> np.ndarray: return model.run(image)[0] inference.py

Slide 33

Slide 33 text

5. エッジAI推論のサンプル – 推論スクリプト作成 33 def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser() parser.add_argument('--test_dir', type=str) parser.add_argument('--interval', type=int, default=300) args, _ = parser.parse_known_args() return args def start(model: DLRModel, path: str, labels: dict) -> None: for file in iter_files(path): image = np.load(file) y = predict(model, image) index = int(np.argmax(y)) label = labels.get(str(index), '') print(f'Prediction result of {file}: {label}') inference.py

Slide 34

Slide 34 text

5. エッジAI推論のサンプル – 推論スクリプト作成 34 if __name__ == '__main__': args = parse_args() print(f'args: {args}') model = load_model() labels = load_labels() if args.interval == 0: start(model, args.test_dir, labels) else: while True: start(model, args.test_dir, labels) print(f'Sleep in {args.interval} seconds...') time.sleep(args.interval) inference.py % cd vgg16-inference-component % zip vgg16-inference-component-1.0.0.zip inference.py imagenet_class_index.json % aws s3 cp vgg16-inference-component-1.0.0.zip s3://{YOUR_BUCKET}/artifacts/ 推論スクリプトと関連ファイルを ZIP 圧縮して、S3 にアップロードします。(推論⽤ Greengrass Component の登録に必要)

Slide 35

Slide 35 text

5. エッジAI推論のサンプル – SageMaker 訓練 35 SageMaker Training Job を作成するためのスクリプトを作成します。 (コンソールで作成も可能ですが、正直使いにくいので、スクリプトのほうが楽だと思います) from sagemaker.pytorch import PyTorch AWS_ACCOUNT_ID = '123456789012' S3_BUCKET = f's3://sagemaker-ml-model-artifacts-{AWS_ACCOUNT_ID}-ap-northeast-1ʼ if __name__ == '__main__': pytorch_estimator = PyTorch( entry_point='training.py', source_dir='./', role='sagemaker-execution-role', instance_count=1, instance_type='ml.m5.large', framework_version='1.10.0', py_version='py38', output_path=f'{S3_BUCKET}/models/trained', hyperparameters={} ) pytorch_estimator.fit() training_job.py % pip install sagemaker

Slide 36

Slide 36 text

5. エッジAI推論のサンプル – SageMaker 訓練 36 % python training_job.py … 2022-02-16 15:41:56 Uploading - Uploading generated training model 2022-02-16 15:42:56 Completed - Training job completed ProfilerReport-1645025749: NoIssuesFound Training seconds: 255 Billable seconds: 255 実⾏ログに請求対象の起動秒数が出⼒されます。(下の例だと255秒) • 訓練スクリプトで保存したモデルは、 S3 に出⼒されます。 (output/model.tar.gz に出⼒されま す) • このモデルを SageMaker Neo でコン パイルして最適化します。

Slide 37

Slide 37 text

5. エッジAI推論のサンプル – SageMaker Neo コンパイル 37 SageMaker Compilation Job を作成します。

Slide 38

Slide 38 text

5. エッジAI推論のサンプル – SageMaker Neo コンパイル 38 ジョブ設定 ジョブ名は任意の値でよいですが、後で⼀覧から削除・⾮表⽰にできないため、”hoge”, “test” 等の変な値を⼊⼒しない ことをお勧めします。(早急に改善していただきたいですね・・・)

Slide 39

Slide 39 text

5. エッジAI推論のサンプル – SageMaker Neo コンパイル 39 項⽬ 値 アーティファクトの場所 model.tar.gz の S3 URI データ⼊⼒設定 モデルの Input Shape *1 機械学習フレームワーク 今回は PyTorch フレームワークバージョン 1.8 *1) 訓練済みモデルの仕様は、公式ページを参照してくださ い。 All pre-trained models expect input images normalized in the same way, i.e. mini-batches of 3-channel RGB images of shape (3 x H x W), where H and W are expected to be at least 224. ⼊⼒設定

Slide 40

Slide 40 text

5. エッジAI推論のサンプル – SageMaker Neo コンパイル 40 出⼒設定 その他設定 約4分でコンパイルは完了しました。

Slide 41

Slide 41 text

5. エッジAI推論のサンプル – SageMaker Edge Manager パッケージング 41 SageMaker Edge Packaging Job を作成します。

Slide 42

Slide 42 text

5. エッジAI推論のサンプル – SageMaker Edge Manager パッケージング 42 ジョブのプロパティ • ジョブ名は任意の値でよいですが、後で⼀覧から削除・ ⾮表⽰にできないため、”hoge”, “test” 等の変な値を ⼊⼒しないことをお勧めします。(早急に改善していた だきたいですね・・・) • IAM ロールは、CloudFormation で作成した SageMaker 実⾏ロールを使⽤できます。

Slide 43

Slide 43 text

5. エッジAI推論のサンプル – SageMaker Edge Manager パッケージング 43 モデルソース SageMaker Neo のコンパイルジョブ名を⼊⼒してください。

Slide 44

Slide 44 text

5. エッジAI推論のサンプル – SageMaker Edge Manager パッケージング 44 出⼒設定 • Greengrass V2 コンポーネントの仕様を⼊⼒するだけで、 SageMaker がコンポーネント作成・登録を⾏います。 • コンポーネントをデプロイすると、Greengrass Core の “/greengrass/v2/work/vgg16-component/” にコンパイ ルされたモデルが配置されます。

Slide 45

Slide 45 text

5. エッジAI推論のサンプル – Greengrass Core セットアップ 45 エッジの端末に Greengrass Core をインストールします。(今回は EC2 Ubuntu 20.04.03) インストール⼿順の詳細は、公式ページを参照してください。 MQTT over TLS は 8883 を利⽤します。開放されていない場合、マニュアルセットアップを実施してください。 % sudo apt install default-jdk % java -version 1. JDK インストール 2. Greengrass Core 実⾏ユーザー/グループ追加 % sudo useradd --system --create-home ggc_user % sudo groupadd --system ggc_group 3. AWS Credential 設定 % # CloudFormation で作成した greengrass-core-setup-user のクレデンシャルを作成してセット % export AWS_ACCESS_KEY_ID= % export AWS_SECRET_ACCESS_KEY= セットアップ完了後、クレデンシャルを削除するか無効化することをお勧めします。

Slide 46

Slide 46 text

5. エッジAI推論のサンプル – Greengrass Core セットアップ 46 % curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus- latest.zip % unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip % sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \ -jar ./GreengrassInstaller/lib/Greengrass.jar \ --aws-region ap-northeast-1 \ --thing-name MyGreengrassCore \ --thing-group-name MyGreengrassCoreGroup \ --thing-policy-name GreengrassV2IoTThingPolicy \ --tes-role-name GreengrassV2TokenExchangeRole \ --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \ --component-default-user ggc_user:ggc_group \ --provision true \ --setup-system-service true 4. Greengrass Core インストール

Slide 47

Slide 47 text

5. エッジAI推論のサンプル – Greengrass Core セットアップ 47 Greengrass Core Installer が⾃動作成する AWS リソース (名前は変更可能) マニュアル・インストールの場合は、⼿動で作成する必要があります。 リソース 名前 Thing MyGreengrassCore Thing Group MyGreengrassCoreGroup Thing Policy GreengrassV2IoTThingPolicy Token Exchange Role GreengrassV2TokenExchangeRole Token Exchange Role Alias GreengrassCoreTokenExchangeRoleAlias 5. Greengrass Core Service 確認 (結構メモリを消費します…) % sudo systemctl status greengrass ● greengrass.service - Greengrass Core Loaded: loaded (/etc/systemd/system/greengrass.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2022-02-16 05:09:16 UTC; 1 day 2h ago Main PID: 1454 (sh) Tasks: 51 (limit: 2197) Memory: 734.2M CGroup: /system.slice/greengrass.service

Slide 48

Slide 48 text

5. エッジAI推論のサンプル – Greengrass Component 登録 (推論⽤) 48 推論⽤の Greengrass Component を登録するために、レシピを作成してください。 レシピの詳細は公式ページを参照してください。 RecipeFormatVersion: '2020-01-25' ComponentName: vgg16-inference-component ComponentVersion: 1.0.0 ComponentDescription: Inference component for VGG16 ComponentPublisher: Iret # Arguments to be passed. ComponentConfiguration: DefaultConfiguration: Interval: 60 recipe.yaml ComponentConfiguration で、設定を⾃由に記述できます。 Interval を定義して、推論間隔を設定で変更できるようにしています。

Slide 49

Slide 49 text

5. エッジAI推論のサンプル – Greengrass Component 登録 (推論⽤) 49 # Dependencies which will be installed with this component. ComponentDependencies: variant.DLR: VersionRequirement: ">=1.6.5 <1.7.0" DependencyType: HARD vgg16-component: VersionRequirement: ">=1.0.0" DependencyType: HARD recipe.yaml ComponentDependencies で、コンポーネントの依存関係を記述します。 • variant.DLR • AWS が提供するコンポーネントです。詳細は公式ページを参照してください。 • Python 仮想環境は “/greengrass/v2/work/variant.DLR/greengrass_ml/greengrass_ml_dlr_venv” • vgg16-component • SageMaker Neo でコンパイルした PyTorch VGG16 を含むコンポーネント • SageMaker Edge Manager でパッケージングすると⾃動で登録されます。

Slide 50

Slide 50 text

5. エッジAI推論のサンプル – Greengrass Component 登録 (推論⽤) 50 Manifests: - Name: Linux Platform: os: linux Lifecycle: Run: RequiresPrivilege: true Script: | . {variant.DLR:configuration:/MLRootPath}/greengrass_ml_dlr_venv/bin/activate python3 -u {artifacts:decompressedPath}/vgg16-inference-component-1.0.0/inference.py --interval {configuration:/Interval} -- test_dir {work:path}/images/ Artifacts: - Uri: s3://sagemaker-ml-model-artifacts-123456789012-ap-northeast-1/artifacts/vgg16-inference-component-1.0.0.zip Unarchive: ZIP recipe.yaml Component をデプロイすると、Greengrass Core が S3 からアーティファクトをダウンロードして展開します。 Greengrass Core が、アーティファクトのチェックサムを検証するため、S3 アーティファクトを上書きすると、コン ポーネントのステータスが「破損」になります。 詳細は公式ページを参照してください。

Slide 51

Slide 51 text

5. エッジAI推論のサンプル – Greengrass Component 登録 (推論⽤) 51

Slide 52

Slide 52 text

5. エッジAI推論のサンプル – Greengrass Component 登録 (推論⽤) 52 作成したレシピの YAML を貼り付けて、「コンポーネントを作成」を押す と、推論⽤ Greengrass Component が登録されます。

Slide 53

Slide 53 text

5. エッジAI推論のサンプル – Greengrass Component デプロイ 53

Slide 54

Slide 54 text

5. エッジAI推論のサンプル – Greengrass Component デプロイ 54 ターゲットを指定 • 名前は任意の値でよいですが、後で⼀覧から削除・⾮表⽰に できないため、”hoge”, “test” 等の変な値を⼊⼒しないこ とをお勧めします。(早急に改善していただきたいです ね・・・) • デプロイターゲットは、Greengrass Core セットアップ時 に⾃動で登録された Thing Group を選択してください。

Slide 55

Slide 55 text

5. エッジAI推論のサンプル – Greengrass Component デプロイ 55 コンポーネントの選択 マイコンポーネント • vgg16-component • SageMaker Edge Manager でパッケージン グした VGG16 Model コンポーネント • vgg16-inference-component • 推論⽤コンポーネント パブリックコンポーネント • variant.DLR • Model を利⽤するためのコンポーネント • aws.greengrass.Nucleus • Greengrass Core に必須のコンポーネント

Slide 56

Slide 56 text

5. エッジAI推論のサンプル – Greengrass Component デプロイ 56 コンポーネント設定 設定変更はせず、「次へ」を押す。

Slide 57

Slide 57 text

5. エッジAI推論のサンプル – Greengrass Component デプロイ 57 詳細設定 設定変更はせず、「次へ」を押す。

Slide 58

Slide 58 text

5. エッジAI推論のサンプル – Greengrass Component デプロイ 58 レビュー 内容を確認後、「デプロイ」を押すと Greengrass Core へのデプロイが開始します。

Slide 59

Slide 59 text

5. エッジAI推論のサンプル – エッジAI推論動作確認 59 以下の⼿順で推論スクリプトの動作を確認します。 • 推論したい画像を NumPy Array に変換 (変換スクリプトを⽤意しました) • PyTorch の Pre-trained Model が想定する⼊⼒形式は、4次元テンソル (N, C, H, W) • 詳細は公式ページを参照してください。 • Greengrass Core の “/greengrass/v2/work/vgg16-inference-component/images/” に転送 • Greengrass Core の “/greengrass/v2/logs/ vgg16-inference-component.log” を確認 import argparse import os from PIL import Image import numpy as np import torch from torchvision import transforms convert_img_to_npy.py

Slide 60

Slide 60 text

5. エッジAI推論のサンプル – エッジAI推論動作確認 60 def load_image_to_tensor(path: str) -> torch.Tensor: preprocess = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) img = Image.open(path) tensor_3d = preprocess(img) return torch.unsqueeze(tensor_3d, 0) def save(tensor: torch.Tensor, path: str) -> None: np.save(path, tensor.numpy()) convert_img_to_npy.py

Slide 61

Slide 61 text

5. エッジAI推論のサンプル – エッジAI推論動作確認 61 def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser() parser.add_argument('image', type=str) args, _ = parser.parse_known_args() return args if __name__ == '__main__': args = parse_args() image = args.image tensor = load_image_to_tensor(image) save(tensor, os.path.basename(image) + '.npy') convert_img_to_npy.py % python convert_img_to_npy.py {YOUR_IMAGE} 変換実⾏

Slide 62

Slide 62 text

5. エッジAI推論のサンプル – エッジAI推論動作確認 62 % scp xxx.jpg.npy {GREENGRASS_HOST}://greengrass/v2/work/vgg16-inference-component/images/ % ssh {GREENGRASS_HOST} % tail -f /greengrass/v2/logs/vgg16-inference-component.log … 2022-02-19T21:32:21.993Z [INFO] (Copier) vgg16-inference-component: stdout. Prediction result of /greengrass/v2/work/vgg16-inference-component/images/keyboard.jpg.npy: ['n03085013', 'computer_keyboard']. {scriptName=services.vgg16-inference-component.lifecycle.Run.Script, serviceName=vgg16-inference-component, currentState=RUNNING} 2022-02-19T21:32:22.257Z [INFO] (Copier) vgg16-inference-component: stdout. Prediction result of /greengrass/v2/work/vgg16-inference-component/images/pen.jpg.npy: ['n03388183', 'fountain_pen']. {scriptName=services.vgg16-inference-component.lifecycle.Run.Script, serviceName=vgg16-inference-component, currentState=RUNNING} 推論スクリプト動作確認 推論した画像 左)キーボード => computer_keyboard 右)ボールペン => fountain_pen

Slide 63

Slide 63 text

6. ディスカッション/Q&A 63

Slide 64

Slide 64 text

6. ディスカッション/Q&A 64 (事前に頂いた質問) 当初の想定と異なった等、苦労したことがあれば知りたいです。 • Greengrass V2/SageMaker を組み合わせたエッジ推論に関する情報が、かなり少ない印象。 (2022年時点) • 英語も少ないですが、⽇本語はもっと少ないです。 • Greengrass V1 の情報に注意。 • SageMaker Neo で Raspberry Pi 向けにコンパイルしたモデルは 64bit OS ⽤。 • Raspberry Pi Imager で推奨される OS は Raspberry Pi OS 32bit のため、DLR がモ デルのロードに失敗しても気付きにくい。 • Greengrass Core が結構メモリを消費します。

Slide 65

Slide 65 text

6. ディスカッション/Q&A 65 AWS IoT Greengrass V2 を利⽤するメリット

Slide 66

Slide 66 text

6. ディスカッション/Q&A 66 過去と現在の IoT を取り巻く環境

Slide 67

Slide 67 text

6. ディスカッション/Q&A 67 スマートホームしてますか︖

Slide 68

Slide 68 text

中途向け会社説明会 68 「アイレットってどんな会社︖」「cloudpackって具体的にどんな事業なの︖」 「オフィス環境は︖」「これまでの経験を活かせそう︖」など、 少しでも興味がある⽅は、ぜひお気軽にご参加ください。

Slide 69

Slide 69 text

69