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

[iret tech labo] AWS IoT Greengrass V2/SageMaker によるエッジAI推論の紹介

[iret tech labo] AWS IoT Greengrass V2/SageMaker によるエッジAI推論の紹介

2022/4/27 開催の iret tech labo で使用したスライドです。

イベント詳細
https://www.iret.co.jp/news/20220405.html

Iwasa Takahiro

May 06, 2022
Tweet

Other Decks in Programming

Transcript

  1. ⾃⼰紹介 2 n 岩佐 孝浩(いわさ たかひろ) • クラウドインテグレーション事業部 開発第⼀セクション •

    AWS を活⽤したアプリケーションの要件定義・設計・開発が主業務 • 2020年11⽉⼊社 • AWS Top Engineers 2020/2021 (今年はどうでしょう・・・)
  2. アジェンダ 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)
  3. 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の専⾨家というわけではありませんので、ご了承ください。 • 途中で⽔分補給した場合はすいません・・・
  4. 2.エッジコンピューティング概要 8 エッジコンピューティングとは、利⽤者や端末と物理的に近い場所に処理装置(エッジプラットフォーム)を 分散配置して、ネットワークの端点でデータ処理を⾏う技術の総称。(Wikipedia) メリット • 低レイテンシー(特に⾃動運転のようなリアルタイム性が求められるケースで重要) • セキュリティ・リスク低減 •

    通信コスト抑制 デメリット • クラウドで享受できるメリットとトレードオフ • 垂直スケーリングが困難(クラウドの場合、ボタンを押すだけで超ハイスペックのリソースを利⽤可能) • 精緻なキャパシティ・プランニングが必要 • インフラ管理が必要 • …
  5. 2.エッジコンピューティング概要 9 エッジコンピュー ティング エッジAI エッジAI推論 • エッジコンピューティングは、AIに限定されるものではない。 (CDN もエッジコンピューティング)

    • エッジAIは、推論に限定されるものではない。(訓練も可能) • エッジAIの課題として、「省⼒化」「コンパクト化」が挙げられる。 • 数百コアCPUと数TBのメモリーを使⽤して、数⼗億のパラメー ターを調整することは、エッジでは⾮現実的。(2022年時点) • プロセッサーのmm2あたりのコストが上昇トレンドにある。 *1 • エッジAIに最適化するための⾊々な取り組みが進んでいる。 • Object Detection で、「空」を対象から除外するなど。(快晴 の空だと探知する物体が無いことが多いので) *1  IUUQTDBDNBDNPSHNBHB[JOFTTISJOLJOHBSUJGJDJBMJOUFMMJHFODFGVMMUFYU
  6. 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) でコンパイルしたモデルを ロードすることも可能
  7. 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
  8. 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 ਪ࿦Λόονॲཧ
  9. 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
  10. 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
  11. 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
  12. 4. SageMaker (Neo/Edge Manager) 概要 – SageMaker Neo 19 モデルを

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

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

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

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

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

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

    vgg16-component • SageMaker Edge Manager でパッケージン グした VGG16 Model コンポーネント • vgg16-inference-component • 推論⽤コンポーネント パブリックコンポーネント • variant.DLR • Model を利⽤するためのコンポーネント • aws.greengrass.Nucleus • Greengrass Core に必須のコンポーネント
  39. 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
  40. 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
  41. 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} 変換実⾏
  42. 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
  43. 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 が結構メモリを消費します。
  44. 69