Slide 1

Slide 1 text

2021/02/24 ~開発エンジニア向け~ 雲勉@オンライン【勉強会】 AWS IoT Greengrass V2/SageMaker によるエッジAI推論の紹介

Slide 2

Slide 2 text

2 本日のハッシュタグ #kumoben 写真撮影 OK!

Slide 3

Slide 3 text

アイレットご紹介 – 会社概要 3 ◼ 社名 アイレット株式会社 ◼ 所在地 〒105-6307 東京都港区⻁ノ⾨1-23-1 ⻁ノ⾨ヒルズ森タワー7F 設⽴2003年10⽉15⽇ ◼ 資本⾦ 7,000万円 ◼ 代表者名 岩永充正 ◼ 従業員数 682名(2021年4⽉末時点) ◼ 事業内容 ITコンサルティング、システム開発、 システム保守・運⽤、 サーバハウジング・ホスティング ◼ 主要株主 KDDI株式会社

Slide 4

Slide 4 text

アイレットご紹介 – AWS APNパートナー 4 cloudpackは、Amazon Elastic Compute Cloud (Amazon EC2)やAmazon Simple Storage Service (Amazon S3)をはじめとする AWSの各種プロダクトを利⽤する際の導⼊・設計から運⽤保守を含んだフルマネージドのサービスを提供し、バックアップや24時間 365⽇の監視/障害対応、技術的な問い合わせに対するサポートなどを⾏っております。 2013年6⽉4⽇には、AWSパートナーネットワーク(APN)において、⽇本初のAPNプレミアティアコンサルティングパートナーの⼀社と して認定されたのをはじめ、その後9年連続で認定されています。 『APNプレミアティアコンサルティングパートナー』はAPNプログラムの中で最上位のパートナーであり、厳しいクライテリアを満たした パートナーのみが選出され、世界で128社のみが認定されています。9年連続で認定された⽇本企業としては、cloudpack(アイレット) と株式会社野村総合研究所の2社のみとなります。

Slide 5

Slide 5 text

アイレットご紹介 – APN Consulting Partner of the Year 2019 – Japan 5 AWSのパートナーネットワークに登録している企業が参加した「AWS Partner Summit Tokyo」の中で、数あるアワードの中で最も実績 をあげたパートナーであることを⽰す『APN Consulting Partner of the Year 2019 – Japan』を受賞しました。cloudpackは、同賞を5度 ⽬の受賞となります。 『APN Consulting Partner of the Year 2019 – Japan』は、AWSが年間を通じて営業・技術・マーケティング分野においてパートナーと しての総合⼒を判断し、AWSのビジネスに最も貢献したパートナーに贈られるものです。cloudpackは、2013年から継続的にプレミアコン サルティングパートナーとして認定されているほか、業界に影響を与える多数のお客様事例のリリースや、数千台規模のマイグレーション 案件、基幹システムの移⾏を⼿掛けるなど、さらなるAWSビジネスの拡⼤に貢献しました。 また、サーバーレスやマシンラーニングなどの新サービスも積極的に採⽤して成功させる⼀⽅で、エンタープライズ案件も推進してきた結 果、著しい売り上げ伸び率を達成 したことが評価されました。

Slide 6

Slide 6 text

アイレットご紹介 - 弊社の代表するサービス 6 クラウドを活用し お客様のご要望に幅広くお応えする 総合支援サービスです。

Slide 7

Slide 7 text

0.講師自己紹介 7 ◼ 岩佐 孝浩(いわさ たかひろ) • クラウドインテグレーション事業部 大阪開発セクション • AWS を活用したアプリケーションの要件定義・設計・開発が主業務 • 2020年11月入社 • 古いアーキテクチャの本を読み返すのがマイブーム (改めて気づきがあり面白いです) • AWS Top Engineers 2020/2021 (AWS 以外の勉強もしていきたい)

Slide 8

Slide 8 text

アジェンダ 8 0. 自己紹介 1. はじめに (19:05~19:05) 2. エッジコンピューティング概要 (19:05~19:10) 3. IoT Greengrass V2 概要 (19:10~19:15) 4. SageMaker (Neo/Edge Manager) 概要 (19:15~19:20) 5. IoT Greengrass V2/SageMaker によるエッジAI推論のサンプル (19:20~19:55)

Slide 9

Slide 9 text

1. はじめに 9

Slide 10

Slide 10 text

1.はじめに 10 ◼ 前提 • AWS におけるエッジAI推論に興味のある方 • AWS/機械学習の基礎知識がある方 ◼ 目的 • エッジAI推論の概要を理解する • IoT Greengrass V2 の概要を理解する • SageMaker/SageMaker Neo/SageMaker Edge Manager の概要を理解する • IoT Greengrass V2/SageMaker によるエッジAI推論のサンプルを確認する (これがメイン) ◼ 免責 • ボリュームが多めなので、少し駆け足で進めます。 • スピーカー自身がAIの専門家というわけではありませんので、ご了承ください。 • 元同僚が参加してくれているようです。ご無沙汰してます。

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

3. IoT Greengrass V2 概要 15

Slide 16

Slide 16 text

3. IoT Greengrass V2 概要 – 概要 16 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 *1) https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html *2) https://docs.aws.amazon.com/greengrass/v2/developerguide/how-it-works.html *3) https://aws.amazon.com/jp/about-aws/whats-new/2021/11/aws-iot-greengrass-support-windows-devices/ 構成イメージ *2 • サポートされる OS は、Windows *3, Linux (Ubuntu, Raspberry Pi OS など) • サポートされる CPU は x86, ARM • Lambda Function を実行可能 • DLR (Deep Learning Runtime) を利用し たエッジAI推論が可能

Slide 17

Slide 17 text

3. IoT Greengrass V2 概要 – 主要コンセプト 17 • 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 へ指示。 https://docs.aws.amazon.com/greengrass/v2/developerguide/how-it-works.html#concept-overview

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

4. SageMaker (Neo/Edge Manager) 概要 - SageMaker 19 • AWS で機械学習するためのマネージド・サービス • 機械学習ワークフローに対応する機能が豊富に提供されており、SageMaker エコシステムが整備されて いる。 • 17種類の組み込みアルゴリズムが提供されており、少量のコードで機械学習が可能。 *1 • 主要な Deep Learning Framework がサポートされているため、既存のコードを少し変更するだけで SageMaker を利用可能。 *2 • 推論エンドポイントとして以下の利用が可能。 *1) https://docs.aws.amazon.com/sagemaker/latest/dg/common-info-all-im-models.html *2) https://docs.aws.amazon.com/sagemaker/latest/dg/frameworks.html エンドポイント 用途 SageMaker Hosting Services 常時起動 (EC2 のイメージ) SageMaker Serverless Endpoints (Preview) Serverless (Lambda のイメージ) Asynchronous Inference 非同期 (SQS + EC2 + Autoscaling のイメージ) Batch Transform 推論をバッチ処理

Slide 20

Slide 20 text

20 4. SageMaker (Neo/Edge Manager) 概要 - SageMaker https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-mlconcepts.html 機械学習ワークフローの例

Slide 21

Slide 21 text

4. SageMaker (Neo/Edge Manager) 概要 - SageMaker 21 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 22

Slide 22 text

4. SageMaker (Neo/Edge Manager) 概要 - SageMaker 22 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 23

Slide 23 text

4. SageMaker (Neo/Edge Manager) 概要 – SageMaker Neo 23 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 *1) https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html *2) https://aws.amazon.com/jp/sagemaker/neo/

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

4. SageMaker (Neo/Edge Manager) 概要 – SageMaker Edge Manager 25 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 エッジにある機械学習モデルを管理・監視できます。(今回のサンプルでは監視はしません) *1) https://docs.aws.amazon.com/sagemaker/latest/dg/edge.html

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

5. エッジAI推論のサンプル – 概要 27 今回は 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 28

Slide 28 text

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

Slide 29

Slide 29 text

5. エッジAI推論のサンプル – AWS リソース準備 29 リソース 名前 用途 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 30

Slide 30 text

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

Slide 31

Slide 31 text

5. エッジAI推論のサンプル – 訓練スクリプト作成 31 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 32

Slide 32 text

5. エッジAI推論のサンプル – 訓練スクリプト作成 32 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 33

Slide 33 text

5. エッジAI推論のサンプル – 訓練スクリプト作成 33 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 34

Slide 34 text

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

Slide 35

Slide 35 text

5. エッジAI推論のサンプル – 推論スクリプト作成 35 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 36

Slide 36 text

5. エッジAI推論のサンプル – 推論スクリプト作成 36 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 37

Slide 37 text

5. エッジAI推論のサンプル – 推論スクリプト作成 37 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 38

Slide 38 text

5. エッジAI推論のサンプル – 推論スクリプト作成 38 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 39

Slide 39 text

5. エッジAI推論のサンプル – 推論スクリプト作成 39 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 40

Slide 40 text

5. エッジAI推論のサンプル – SageMaker 訓練 40 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 41

Slide 41 text

5. エッジAI推論のサンプル – SageMaker 訓練 41 % 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 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

5. エッジAI推論のサンプル – SageMaker Neo コンパイル 44 項目 値 アーティファクトの場所 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 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

5. エッジAI推論のサンプル – Greengrass Core セットアップ 50 エッジの端末に 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 51

Slide 51 text

5. エッジAI推論のサンプル – Greengrass Core セットアップ 51 % 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 52

Slide 52 text

5. エッジAI推論のサンプル – Greengrass Core セットアップ 52 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 53

Slide 53 text

5. エッジAI推論のサンプル – Greengrass Component 登録 (推論用) 53 推論用の 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 54

Slide 54 text

5. エッジAI推論のサンプル – Greengrass Component 登録 (推論用) 54 # 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 55

Slide 55 text

5. エッジAI推論のサンプル – Greengrass Component 登録 (推論用) 55 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 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

5. エッジAI推論のサンプル – エッジAI推論動作確認 64 以下の手順で推論スクリプトの動作を確認します。 • 推論したい画像を 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 65

Slide 65 text

5. エッジAI推論のサンプル – エッジAI推論動作確認 65 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 66

Slide 66 text

5. エッジAI推論のサンプル – エッジAI推論動作確認 66 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 67

Slide 67 text

5. エッジAI推論のサンプル – エッジAI推論動作確認 67 % 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 68

Slide 68 text

6. 質疑応答 68

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

70