Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【雲勉】AWS IoT Greengrass V2/SageMaker によるエッジ AI 推...

mfukuta
February 24, 2022

【雲勉】AWS IoT Greengrass V2/SageMaker によるエッジ AI 推論の紹介

mfukuta

February 24, 2022
Tweet

More Decks by mfukuta

Other Decks in Technology

Transcript

  1. アイレットご紹介 – 会社概要 3 ◼ 社名 アイレット株式会社 ◼ 所在地 〒105-6307

    東京都港区⻁ノ⾨1-23-1 ⻁ノ⾨ヒルズ森タワー7F 設⽴2003年10⽉15⽇ ◼ 資本⾦ 7,000万円 ◼ 代表者名 岩永充正 ◼ 従業員数 682名(2021年4⽉末時点) ◼ 事業内容 ITコンサルティング、システム開発、 システム保守・運⽤、 サーバハウジング・ホスティング ◼ 主要株主 KDDI株式会社
  2. アイレットご紹介 – 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社のみとなります。
  3. アイレットご紹介 – 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ビジネスの拡⼤に貢献しました。 また、サーバーレスやマシンラーニングなどの新サービスも積極的に採⽤して成功させる⼀⽅で、エンタープライズ案件も推進してきた結 果、著しい売り上げ伸び率を達成 したことが評価されました。
  4. 0.講師自己紹介 7 ◼ 岩佐 孝浩(いわさ たかひろ) • クラウドインテグレーション事業部 大阪開発セクション •

    AWS を活用したアプリケーションの要件定義・設計・開発が主業務 • 2020年11月入社 • 古いアーキテクチャの本を読み返すのがマイブーム (改めて気づきがあり面白いです) • AWS Top Engineers 2020/2021 (AWS 以外の勉強もしていきたい)
  5. アジェンダ 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)
  6. 1.はじめに 10 ◼ 前提 • AWS におけるエッジAI推論に興味のある方 • AWS/機械学習の基礎知識がある方 ◼

    目的 • エッジAI推論の概要を理解する • IoT Greengrass V2 の概要を理解する • SageMaker/SageMaker Neo/SageMaker Edge Manager の概要を理解する • IoT Greengrass V2/SageMaker によるエッジAI推論のサンプルを確認する (これがメイン) ◼ 免責 • ボリュームが多めなので、少し駆け足で進めます。 • スピーカー自身がAIの専門家というわけではありませんので、ご了承ください。 • 元同僚が参加してくれているようです。ご無沙汰してます。
  7. 2.エッジコンピューティング概要 13 エッジコンピューティングとは、利用者や端末と物理的に近い場所に処理装置(エッジプラットフォーム)を 分散配置して、ネットワークの端点でデータ処理を行う技術の総称。(Wikipedia) メリット • 低レイテンシー(特に自動運転のようなリアルタイム性が求められるケースで重要) • セキュリティ・リスク低減 •

    通信コスト抑制 デメリット • クラウドで享受できるメリットとトレードオフ • 垂直スケーリングが困難(クラウドの場合、ボタンを押すだけで超ハイスペックのリソースを利用可能) • 精緻なキャパシティ・プランニングが必要 • インフラ管理が必要 • …
  8. 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
  9. 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推論が可能
  10. 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
  11. 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 推論をバッチ処理
  12. 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
  13. 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
  14. 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/
  15. 4. SageMaker (Neo/Edge Manager) 概要 – SageMaker Neo 24 モデルを

    シリアライズ SageMaker Neo が最適化 最適化された モデル
  16. 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
  17. 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推論動作確認
  18. 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
  19. 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 にアップロードされる)
  20. 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 今回はトレーニングコードは割愛します。
  21. 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
  22. 5. エッジAI推論のサンプル – 訓練スクリプト作成 34 if __name__ == '__main__': args

    = parse_args() vgg16 = models.vgg16(pretrained=True) fit(vgg16) save(vgg16, args.sm_model_dir) training.py
  23. 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” も参考にしてください。
  24. 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
  25. 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
  26. 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
  27. 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 の登録に必要)
  28. 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
  29. 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 でコン パイルして最適化します。
  30. 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. 入力設定
  31. 5. エッジAI推論のサンプル – SageMaker Edge Manager パッケージング 47 ジョブのプロパティ •

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

    Greengrass V2 コンポーネントの仕様を入力するだけで、 SageMaker がコンポーネント作成・登録を行います。 • コンポーネントをデプロイすると、Greengrass Core の “/greengrass/v2/work/vgg16-component/” にコンパイ ルされたモデルが配置されます。
  33. 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= セットアップ完了後、クレデンシャルを削除するか無効化することをお勧めします。
  34. 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 インストール
  35. 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
  36. 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 を定義して、推論間隔を設定で変更できるようにしています。
  37. 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 でパッケージングすると自動で登録されます。
  38. 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 アーティファクトを上書きすると、コン ポーネントのステータスが「破損」になります。 詳細は公式ページを参照してください。
  39. 5. エッジAI推論のサンプル – Greengrass Component 登録 (推論用) 57 作成したレシピの YAML

    を貼り付けて、「コンポーネントを作成」を押す と、推論用 Greengrass Component が登録されます。
  40. 5. エッジAI推論のサンプル – Greengrass Component デプロイ 59 ターゲットを指定 • 名前は任意の値でよいですが、後で一覧から削除・非表示に

    できないため、”hoge”, “test” 等の変な値を入力しないこ とをお勧めします。(早急に改善していただきたいです ね・・・) • デプロイターゲットは、Greengrass Core セットアップ時 に自動で登録された Thing Group を選択してください。
  41. 5. エッジAI推論のサンプル – Greengrass Component デプロイ 60 コンポーネントの選択 マイコンポーネント •

    vgg16-component • SageMaker Edge Manager でパッケージン グした VGG16 Model コンポーネント • vgg16-inference-component • 推論用コンポーネント パブリックコンポーネント • variant.DLR • Model を利用するためのコンポーネント • aws.greengrass.Nucleus • Greengrass Core に必須のコンポーネント
  42. 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
  43. 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
  44. 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} 変換実行
  45. 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
  46. 70